@@ -0,0 +1,10 | |||||
|
1 | vcom -quiet -93 -work work MINI_LFR_top.vhd | |||
|
2 | vcom -quiet -93 -work work testbench.vhd | |||
|
3 | ||||
|
4 | vsim work.testbench | |||
|
5 | ||||
|
6 | log -r * | |||
|
7 | ||||
|
8 | do wave.do | |||
|
9 | ||||
|
10 | run 250 us |
@@ -0,0 +1,258 | |||||
|
1 | LIBRARY ieee; | |||
|
2 | USE ieee.std_logic_1164.ALL; | |||
|
3 | USE ieee.numeric_std.ALL; | |||
|
4 | use IEEE.std_logic_textio.all; | |||
|
5 | LIBRARY STD; | |||
|
6 | use std.textio.all; | |||
|
7 | ||||
|
8 | LIBRARY grlib; | |||
|
9 | USE grlib.stdlib.ALL; | |||
|
10 | LIBRARY gaisler; | |||
|
11 | USE gaisler.libdcom.ALL; | |||
|
12 | USE gaisler.sim.ALL; | |||
|
13 | USE gaisler.jtagtst.ALL; | |||
|
14 | LIBRARY techmap; | |||
|
15 | USE techmap.gencomp.ALL; | |||
|
16 | ||||
|
17 | LIBRARY lpp; | |||
|
18 | USE lpp.lpp_sim_pkg.ALL; | |||
|
19 | USE lpp.lpp_lfr_apbreg_pkg.ALL; | |||
|
20 | USE lpp.lpp_lfr_time_management_apbreg_pkg.ALL; | |||
|
21 | ||||
|
22 | ENTITY testbench IS | |||
|
23 | END; | |||
|
24 | ||||
|
25 | ARCHITECTURE behav OF testbench IS | |||
|
26 | ||||
|
27 | COMPONENT MINI_LFR_top | |||
|
28 | PORT ( | |||
|
29 | clk_50 : IN STD_LOGIC; | |||
|
30 | clk_49 : IN STD_LOGIC; | |||
|
31 | reset : IN STD_LOGIC; | |||
|
32 | BP0 : IN STD_LOGIC; | |||
|
33 | BP1 : IN STD_LOGIC; | |||
|
34 | LED0 : OUT STD_LOGIC; | |||
|
35 | LED1 : OUT STD_LOGIC; | |||
|
36 | LED2 : OUT STD_LOGIC; | |||
|
37 | TXD1 : IN STD_LOGIC; | |||
|
38 | RXD1 : OUT STD_LOGIC; | |||
|
39 | nCTS1 : OUT STD_LOGIC; | |||
|
40 | nRTS1 : IN STD_LOGIC; | |||
|
41 | TXD2 : IN STD_LOGIC; | |||
|
42 | RXD2 : OUT STD_LOGIC; | |||
|
43 | nCTS2 : OUT STD_LOGIC; | |||
|
44 | nDTR2 : IN STD_LOGIC; | |||
|
45 | nRTS2 : IN STD_LOGIC; | |||
|
46 | nDCD2 : OUT STD_LOGIC; | |||
|
47 | IO0 : INOUT STD_LOGIC; | |||
|
48 | IO1 : INOUT STD_LOGIC; | |||
|
49 | IO2 : INOUT STD_LOGIC; | |||
|
50 | IO3 : INOUT STD_LOGIC; | |||
|
51 | IO4 : INOUT STD_LOGIC; | |||
|
52 | IO5 : INOUT STD_LOGIC; | |||
|
53 | IO6 : INOUT STD_LOGIC; | |||
|
54 | IO7 : INOUT STD_LOGIC; | |||
|
55 | IO8 : INOUT STD_LOGIC; | |||
|
56 | IO9 : INOUT STD_LOGIC; | |||
|
57 | IO10 : INOUT STD_LOGIC; | |||
|
58 | IO11 : INOUT STD_LOGIC; | |||
|
59 | SPW_EN : OUT STD_LOGIC; | |||
|
60 | SPW_NOM_DIN : IN STD_LOGIC; | |||
|
61 | SPW_NOM_SIN : IN STD_LOGIC; | |||
|
62 | SPW_NOM_DOUT : OUT STD_LOGIC; | |||
|
63 | SPW_NOM_SOUT : OUT STD_LOGIC; | |||
|
64 | SPW_RED_DIN : IN STD_LOGIC; | |||
|
65 | SPW_RED_SIN : IN STD_LOGIC; | |||
|
66 | SPW_RED_DOUT : OUT STD_LOGIC; | |||
|
67 | SPW_RED_SOUT : OUT STD_LOGIC; | |||
|
68 | ADC_nCS : OUT STD_LOGIC; | |||
|
69 | ADC_CLK : OUT STD_LOGIC; | |||
|
70 | ADC_SDO : IN STD_LOGIC_VECTOR(7 DOWNTO 0); | |||
|
71 | SRAM_nWE : OUT STD_LOGIC; | |||
|
72 | SRAM_CE : OUT STD_LOGIC; | |||
|
73 | SRAM_nOE : OUT STD_LOGIC; | |||
|
74 | SRAM_nBE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); | |||
|
75 | SRAM_A : OUT STD_LOGIC_VECTOR(19 DOWNTO 0); | |||
|
76 | SRAM_DQ : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0)); | |||
|
77 | END COMPONENT; | |||
|
78 | ||||
|
79 | ----------------------------------------------------------------------------- | |||
|
80 | SIGNAL clk_50 : STD_LOGIC := '0'; | |||
|
81 | SIGNAL clk_49 : STD_LOGIC := '0'; | |||
|
82 | SIGNAL reset : STD_LOGIC; | |||
|
83 | SIGNAL BP0 : STD_LOGIC; | |||
|
84 | SIGNAL BP1 : STD_LOGIC; | |||
|
85 | SIGNAL LED0 : STD_LOGIC; | |||
|
86 | SIGNAL LED1 : STD_LOGIC; | |||
|
87 | SIGNAL LED2 : STD_LOGIC; | |||
|
88 | SIGNAL TXD1 : STD_LOGIC; | |||
|
89 | SIGNAL RXD1 : STD_LOGIC; | |||
|
90 | SIGNAL nCTS1 : STD_LOGIC; | |||
|
91 | SIGNAL nRTS1 : STD_LOGIC; | |||
|
92 | SIGNAL TXD2 : STD_LOGIC; | |||
|
93 | SIGNAL RXD2 : STD_LOGIC; | |||
|
94 | SIGNAL nCTS2 : STD_LOGIC; | |||
|
95 | SIGNAL nDTR2 : STD_LOGIC; | |||
|
96 | SIGNAL nRTS2 : STD_LOGIC; | |||
|
97 | SIGNAL nDCD2 : STD_LOGIC; | |||
|
98 | SIGNAL IO0 : STD_LOGIC; | |||
|
99 | SIGNAL IO1 : STD_LOGIC; | |||
|
100 | SIGNAL IO2 : STD_LOGIC; | |||
|
101 | SIGNAL IO3 : STD_LOGIC; | |||
|
102 | SIGNAL IO4 : STD_LOGIC; | |||
|
103 | SIGNAL IO5 : STD_LOGIC; | |||
|
104 | SIGNAL IO6 : STD_LOGIC; | |||
|
105 | SIGNAL IO7 : STD_LOGIC; | |||
|
106 | SIGNAL IO8 : STD_LOGIC; | |||
|
107 | SIGNAL IO9 : STD_LOGIC; | |||
|
108 | SIGNAL IO10 : STD_LOGIC; | |||
|
109 | SIGNAL IO11 : STD_LOGIC; | |||
|
110 | SIGNAL SPW_EN : STD_LOGIC; | |||
|
111 | SIGNAL SPW_NOM_DIN : STD_LOGIC; | |||
|
112 | SIGNAL SPW_NOM_SIN : STD_LOGIC; | |||
|
113 | SIGNAL SPW_NOM_DOUT : STD_LOGIC; | |||
|
114 | SIGNAL SPW_NOM_SOUT : STD_LOGIC; | |||
|
115 | SIGNAL SPW_RED_DIN : STD_LOGIC; | |||
|
116 | SIGNAL SPW_RED_SIN : STD_LOGIC; | |||
|
117 | SIGNAL SPW_RED_DOUT : STD_LOGIC; | |||
|
118 | SIGNAL SPW_RED_SOUT : STD_LOGIC; | |||
|
119 | SIGNAL ADC_nCS : STD_LOGIC; | |||
|
120 | SIGNAL ADC_CLK : STD_LOGIC; | |||
|
121 | SIGNAL ADC_SDO : STD_LOGIC_VECTOR(7 DOWNTO 0); | |||
|
122 | SIGNAL SRAM_nWE : STD_LOGIC; | |||
|
123 | SIGNAL SRAM_CE : STD_LOGIC; | |||
|
124 | SIGNAL SRAM_nOE : STD_LOGIC; | |||
|
125 | SIGNAL SRAM_nBE : STD_LOGIC_VECTOR(3 DOWNTO 0); | |||
|
126 | SIGNAL SRAM_A : STD_LOGIC_VECTOR(19 DOWNTO 0); | |||
|
127 | SIGNAL SRAM_DQ : STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
128 | ----------------------------------------------------------------------------- | |||
|
129 | ||||
|
130 | CONSTANT ADDR_BASE_LFR : STD_LOGIC_VECTOR(31 DOWNTO 8) := X"80000F"; | |||
|
131 | CONSTANT ADDR_BASE_TIME_MANAGMENT : STD_LOGIC_VECTOR(31 DOWNTO 8) := X"800006"; | |||
|
132 | CONSTANT ADDR_BASE_GPIO : STD_LOGIC_VECTOR(31 DOWNTO 8) := X"80000B"; | |||
|
133 | ||||
|
134 | ||||
|
135 | SIGNAL message_simu : STRING(1 TO 15) := "---------------"; | |||
|
136 | ||||
|
137 | BEGIN | |||
|
138 | ||||
|
139 | ----------------------------------------------------------------------------- | |||
|
140 | -- TB | |||
|
141 | ----------------------------------------------------------------------------- | |||
|
142 | PROCESS | |||
|
143 | CONSTANT txp : TIME := 320 ns; | |||
|
144 | BEGIN -- PROCESS | |||
|
145 | TXD1 <= '1'; | |||
|
146 | reset <= '0'; | |||
|
147 | WAIT FOR 500 ns; | |||
|
148 | reset <= '1'; | |||
|
149 | WAIT FOR 10000 ns; | |||
|
150 | message_simu <= "0 - UART init "; | |||
|
151 | UART_INIT(TXD1,txp); | |||
|
152 | ||||
|
153 | message_simu <= "1 - UART test "; | |||
|
154 | UART_WRITE(TXD1,txp,ADDR_BASE_GPIO & "000010",X"0000FFFF"); | |||
|
155 | UART_WRITE(TXD1,txp,ADDR_BASE_GPIO & "000001",X"00000A0A"); | |||
|
156 | UART_WRITE(TXD1,txp,ADDR_BASE_GPIO & "000001",X"00000B0B"); | |||
|
157 | ||||
|
158 | -- UNSET the LFR reset | |||
|
159 | message_simu <= "2 - LFR UNRESET"; | |||
|
160 | UART_WRITE(TXD1,txp,ADDR_BASE_TIME_MANAGMENT & ADDR_LFR_TM_CONTROL , X"00000000"); | |||
|
161 | UART_WRITE(TXD1,txp,ADDR_BASE_TIME_MANAGMENT & ADDR_LFR_TM_TIME_LOAD , X"00000000"); | |||
|
162 | -- | |||
|
163 | message_simu <= "3 - LFR CONFIG "; | |||
|
164 | UART_WRITE(TXD1,txp,ADDR_BASE_LFR & ADDR_LFR_SM_F0_0_ADDR , X"00000B0B"); | |||
|
165 | ||||
|
166 | WAIT; | |||
|
167 | END PROCESS; | |||
|
168 | ||||
|
169 | ----------------------------------------------------------------------------- | |||
|
170 | -- CLOCK | |||
|
171 | ----------------------------------------------------------------------------- | |||
|
172 | clk_50 <= NOT clk_50 AFTER 5 ns; | |||
|
173 | clk_49 <= NOT clk_49 AFTER 10172 ps; | |||
|
174 | ||||
|
175 | ----------------------------------------------------------------------------- | |||
|
176 | -- DON'T CARE | |||
|
177 | ----------------------------------------------------------------------------- | |||
|
178 | BP0 <= '0'; | |||
|
179 | BP1 <= '0'; | |||
|
180 | nRTS1 <= '0' ; | |||
|
181 | ||||
|
182 | TXD2 <= '1'; | |||
|
183 | nRTS2 <= '1'; | |||
|
184 | nDTR2 <= '1'; | |||
|
185 | ||||
|
186 | SPW_NOM_DIN <= '1'; | |||
|
187 | SPW_NOM_SIN <= '1'; | |||
|
188 | SPW_RED_DIN <= '1'; | |||
|
189 | SPW_RED_SIN <= '1'; | |||
|
190 | ||||
|
191 | ADC_SDO <= x"AA"; | |||
|
192 | ||||
|
193 | SRAM_DQ <= (OTHERS => 'Z'); | |||
|
194 | ||||
|
195 | ----------------------------------------------------------------------------- | |||
|
196 | -- DUT | |||
|
197 | ----------------------------------------------------------------------------- | |||
|
198 | MINI_LFR_top_1: MINI_LFR_top | |||
|
199 | PORT MAP ( | |||
|
200 | clk_50 => clk_50, | |||
|
201 | clk_49 => clk_49, | |||
|
202 | reset => reset, | |||
|
203 | ||||
|
204 | BP0 => BP0, | |||
|
205 | BP1 => BP1, | |||
|
206 | ||||
|
207 | LED0 => LED0, | |||
|
208 | LED1 => LED1, | |||
|
209 | LED2 => LED2, | |||
|
210 | ||||
|
211 | TXD1 => TXD1, | |||
|
212 | RXD1 => RXD1, | |||
|
213 | nCTS1 => nCTS1, | |||
|
214 | nRTS1 => nRTS1, | |||
|
215 | ||||
|
216 | TXD2 => TXD2, | |||
|
217 | RXD2 => RXD2, | |||
|
218 | nCTS2 => nCTS2, | |||
|
219 | nDTR2 => nDTR2, | |||
|
220 | nRTS2 => nRTS2, | |||
|
221 | nDCD2 => nDCD2, | |||
|
222 | ||||
|
223 | IO0 => IO0, | |||
|
224 | IO1 => IO1, | |||
|
225 | IO2 => IO2, | |||
|
226 | IO3 => IO3, | |||
|
227 | IO4 => IO4, | |||
|
228 | IO5 => IO5, | |||
|
229 | IO6 => IO6, | |||
|
230 | IO7 => IO7, | |||
|
231 | IO8 => IO8, | |||
|
232 | IO9 => IO9, | |||
|
233 | IO10 => IO10, | |||
|
234 | IO11 => IO11, | |||
|
235 | ||||
|
236 | SPW_EN => SPW_EN, | |||
|
237 | SPW_NOM_DIN => SPW_NOM_DIN, | |||
|
238 | SPW_NOM_SIN => SPW_NOM_SIN, | |||
|
239 | SPW_NOM_DOUT => SPW_NOM_DOUT, | |||
|
240 | SPW_NOM_SOUT => SPW_NOM_SOUT, | |||
|
241 | SPW_RED_DIN => SPW_RED_DIN, | |||
|
242 | SPW_RED_SIN => SPW_RED_SIN, | |||
|
243 | SPW_RED_DOUT => SPW_RED_DOUT, | |||
|
244 | SPW_RED_SOUT => SPW_RED_SOUT, | |||
|
245 | ||||
|
246 | ADC_nCS => ADC_nCS, | |||
|
247 | ADC_CLK => ADC_CLK, | |||
|
248 | ADC_SDO => ADC_SDO, | |||
|
249 | ||||
|
250 | SRAM_nWE => SRAM_nWE, | |||
|
251 | SRAM_CE => SRAM_CE, | |||
|
252 | SRAM_nOE => SRAM_nOE,ddr_buffer_f | |||
|
253 | SRAM_nBE => SRAM_nBE, | |||
|
254 | SRAM_A => SRAM_A, | |||
|
255 | SRAM_DQ => SRAM_DQ); | |||
|
256 | ||||
|
257 | ||||
|
258 | END; |
@@ -0,0 +1,24 | |||||
|
1 | onerror {resume} | |||
|
2 | quietly WaveActivateNextPane {} 0 | |||
|
3 | add wave -noupdate /testbench/message_simu | |||
|
4 | add wave -noupdate -radix hexadecimal -childformat {{/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.config_active_interruption_onNewMatrix -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.config_active_interruption_onError -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.config_ms_run -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f0_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f1_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f2_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f0_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f1_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f2_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_error_buffer_full -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_error_input_fifo_write -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f0_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f0_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f1_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f1_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f2_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f2_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.length_matrix -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f0_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f0_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f1_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f1_1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f2_0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f2_1 -radix hexadecimal}} -subitemconfig {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.config_active_interruption_onNewMatrix {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.config_active_interruption_onError {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.config_ms_run {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f0_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f1_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f2_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f0_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f1_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_ready_matrix_f2_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_error_buffer_full {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.status_error_input_fifo_write {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f0_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f0_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f1_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f1_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f2_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.addr_matrix_f2_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.length_matrix {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f0_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f0_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f1_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f1_1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f2_0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp.time_matrix_f2_1 {-height 15 -radix hexadecimal}} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_sp | |||
|
5 | add wave -noupdate -radix hexadecimal -childformat {{/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.status_new_err -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_BW -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_SP0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_SP1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_R0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_R1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_R2 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_snapshot -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f0_2 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f2 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.nb_data_by_buffer -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.nb_snapshot_param -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f2 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f3 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.burst_f0 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.burst_f1 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.burst_f2 -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.run -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.status_ready_buffer_f -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.addr_buffer_f -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.time_buffer_f -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.length_buffer -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.error_buffer_full -radix hexadecimal} {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.start_date -radix hexadecimal}} -subitemconfig {/testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.status_new_err {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_BW {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_SP0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_SP1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_R0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_R1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.data_shaping_R2 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_snapshot {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f0_2 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.delta_f2 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.nb_data_by_buffer {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.nb_snapshot_param {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f2 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.enable_f3 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.burst_f0 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.burst_f1 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.burst_f2 {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.run {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.status_ready_buffer_f {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.addr_buffer_f {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.time_buffer_f {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.length_buffer {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.error_buffer_full {-height 15 -radix hexadecimal} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp.start_date {-height 15 -radix hexadecimal}} /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_apbreg_1/reg_wp | |||
|
6 | add wave -noupdate /testbench/MINI_LFR_top_1/lpp_lfr_1/lpp_lfr_ms_1/ongoing | |||
|
7 | TreeUpdate [SetDefaultTree] | |||
|
8 | WaveRestoreCursors {{Cursor 1} {11527482482 ps} 0} | |||
|
9 | quietly wave cursor active 1 | |||
|
10 | configure wave -namecolwidth 539 | |||
|
11 | configure wave -valuecolwidth 100 | |||
|
12 | configure wave -justifyvalue left | |||
|
13 | configure wave -signalnamewidth 0 | |||
|
14 | configure wave -snapdistance 10 | |||
|
15 | configure wave -datasetprefix 0 | |||
|
16 | configure wave -rowmargin 4 | |||
|
17 | configure wave -childrowmargin 2 | |||
|
18 | configure wave -gridoffset 0 | |||
|
19 | configure wave -gridperiod 1 | |||
|
20 | configure wave -griddelta 40 | |||
|
21 | configure wave -timeline 0 | |||
|
22 | configure wave -timelineunits ns | |||
|
23 | update | |||
|
24 | WaveRestoreZoom {0 ps} {61313789250 ps} |
@@ -0,0 +1,94 | |||||
|
1 | ------------------------------------------------------------------------------ | |||
|
2 | -- This file is a part of the LPP VHDL IP LIBRARY | |||
|
3 | -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS | |||
|
4 | -- | |||
|
5 | -- This program is free software; you can redistribute it and/or modify | |||
|
6 | -- it under the terms of the GNU General Public License as published by | |||
|
7 | -- the Free Software Foundation; either version 3 of the License, or | |||
|
8 | -- (at your option) any later version. | |||
|
9 | -- | |||
|
10 | -- This program is distributed in the hope that it will be useful, | |||
|
11 | -- but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
12 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
13 | -- GNU General Public License for more details. | |||
|
14 | -- | |||
|
15 | -- You should have received a copy of the GNU General Public License | |||
|
16 | -- along with this program; if not, write to the Free Software | |||
|
17 | -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
|
18 | ------------------------------------------------------------------------------- | |||
|
19 | -- Author : Jean-christophe Pellion | |||
|
20 | -- Mail : jean-christophe.pellion@lpp.polytechnique.fr | |||
|
21 | -- jean-christophe.pellion@easii-ic.com | |||
|
22 | ---------------------------------------------------------------------------- | |||
|
23 | ||||
|
24 | LIBRARY ieee; | |||
|
25 | USE ieee.std_logic_1164.ALL; | |||
|
26 | USE ieee.numeric_std.all; | |||
|
27 | ||||
|
28 | LIBRARY lpp; | |||
|
29 | USE lpp.cic_pkg.ALL; | |||
|
30 | USE lpp.data_type_pkg.ALL; | |||
|
31 | ||||
|
32 | ENTITY cic_lfr_add_sub IS | |||
|
33 | PORT ( | |||
|
34 | clk : IN STD_LOGIC; | |||
|
35 | rstn : IN STD_LOGIC; | |||
|
36 | run : IN STD_LOGIC; | |||
|
37 | ||||
|
38 | OP : IN STD_LOGIC_VECTOR(1 DOWNTO 0); | |||
|
39 | -- 00 A + B | |||
|
40 | -- 01 A - B | |||
|
41 | -- 10 A + B + Carry | |||
|
42 | -- 11 A - B - Carry | |||
|
43 | ||||
|
44 | data_in_A : IN STD_LOGIC_VECTOR(15 DOWNTO 0); | |||
|
45 | data_in_B : IN STD_LOGIC_VECTOR(15 DOWNTO 0); | |||
|
46 | data_in_Carry : IN STD_LOGIC; | |||
|
47 | ||||
|
48 | data_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); | |||
|
49 | data_out_Carry : OUT STD_LOGIC | |||
|
50 | ); | |||
|
51 | END cic_lfr_add_sub; | |||
|
52 | ||||
|
53 | ARCHITECTURE beh OF cic_lfr_add_sub IS | |||
|
54 | ||||
|
55 | SIGNAL data_carry : STD_LOGIC; | |||
|
56 | SIGNAL STD_LOGIC_VECTOR_ZERO : STD_LOGIC_VECTOR(15 DOWNTO 0); | |||
|
57 | SIGNAL data_add : STD_LOGIC_VECTOR(16 DOWNTO 0); | |||
|
58 | SIGNAL data_sub : STD_LOGIC_VECTOR(16 DOWNTO 0); | |||
|
59 | ||||
|
60 | SIGNAL data : STD_LOGIC_VECTOR(16 DOWNTO 0); | |||
|
61 | ||||
|
62 | BEGIN | |||
|
63 | ||||
|
64 | STD_LOGIC_VECTOR_ZERO <= (OTHERS => '0'); | |||
|
65 | data_carry <= '0' WHEN OP(1) = '0' ELSE data_in_Carry; | |||
|
66 | ||||
|
67 | data_add <= STD_LOGIC_VECTOR( SIGNED('0' & data_in_A) | |||
|
68 | + SIGNED('0' & data_in_B) | |||
|
69 | + SIGNED(STD_LOGIC_VECTOR_ZERO & data_carry)); | |||
|
70 | ||||
|
71 | data_sub <= STD_LOGIC_VECTOR( SIGNED('0' & data_in_A) | |||
|
72 | - SIGNED('0' & data_in_B) | |||
|
73 | - SIGNED(STD_LOGIC_VECTOR_ZERO & data_carry)); | |||
|
74 | ||||
|
75 | data <= data_add WHEN OP(0) = '0' ELSE data_sub; | |||
|
76 | PROCESS (clk, rstn) | |||
|
77 | BEGIN -- PROCESS | |||
|
78 | IF rstn = '0' THEN | |||
|
79 | data_out_Carry <= '0'; | |||
|
80 | data_out <= (OTHERS => '0'); | |||
|
81 | ELSIF clk'event AND clk = '1' THEN | |||
|
82 | IF run = '0' THEN | |||
|
83 | data_out_Carry <= '0'; | |||
|
84 | data_out <= (OTHERS => '0'); | |||
|
85 | ELSE | |||
|
86 | data_out_Carry <= data(16); | |||
|
87 | data_out <= data(15 DOWNTO 0); | |||
|
88 | END IF; | |||
|
89 | END IF; | |||
|
90 | END PROCESS; | |||
|
91 | ||||
|
92 | ||||
|
93 | END beh; | |||
|
94 |
@@ -0,0 +1,12 | |||||
|
1 | LIBRARY ieee; | |||
|
2 | USE ieee.std_logic_1164.ALL; | |||
|
3 | USE ieee.numeric_std.ALL; | |||
|
4 | ||||
|
5 | PACKAGE lpp_lfr_time_management_apbreg_pkg IS | |||
|
6 | ||||
|
7 | CONSTANT ADDR_LFR_TM_CONTROL : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000000"; | |||
|
8 | CONSTANT ADDR_LFR_TM_TIME_LOAD : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000001"; | |||
|
9 | CONSTANT ADDR_LFR_TM_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000010"; | |||
|
10 | CONSTANT ADDR_LFR_TM_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000011"; | |||
|
11 | ||||
|
12 | END lpp_lfr_time_management_apbreg_pkg; |
@@ -0,0 +1,104 | |||||
|
1 | ------------------------------------------------------------------------------ | |||
|
2 | -- This file is a part of the LPP VHDL IP LIBRARY | |||
|
3 | -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS | |||
|
4 | -- | |||
|
5 | -- This program is free software; you can redistribute it and/or modify | |||
|
6 | -- it under the terms of the GNU General Public License as published by | |||
|
7 | -- the Free Software Foundation; either version 3 of the License, or | |||
|
8 | -- (at your option) any later version. | |||
|
9 | -- | |||
|
10 | -- This program is distributed in the hope that it will be useful, | |||
|
11 | -- but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
12 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
13 | -- GNU General Public License for more details. | |||
|
14 | -- | |||
|
15 | -- You should have received a copy of the GNU General Public License | |||
|
16 | -- along with this program; if not, write to the Free Software | |||
|
17 | -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
|
18 | ------------------------------------------------------------------------------- | |||
|
19 | -- Author : Jean-christophe Pellion | |||
|
20 | -- Mail : jean-christophe.pellion@lpp.polytechnique.fr | |||
|
21 | ------------------------------------------------------------------------------- | |||
|
22 | ||||
|
23 | LIBRARY ieee; | |||
|
24 | USE ieee.std_logic_1164.ALL; | |||
|
25 | USE ieee.numeric_std.ALL; | |||
|
26 | LIBRARY grlib; | |||
|
27 | USE grlib.stdlib.ALL; | |||
|
28 | LIBRARY gaisler; | |||
|
29 | USE gaisler.libdcom.ALL; | |||
|
30 | USE gaisler.sim.ALL; | |||
|
31 | USE gaisler.jtagtst.ALL; | |||
|
32 | LIBRARY techmap; | |||
|
33 | USE techmap.gencomp.ALL; | |||
|
34 | ||||
|
35 | PACKAGE lpp_sim_pkg IS | |||
|
36 | ||||
|
37 | PROCEDURE UART_INIT ( | |||
|
38 | SIGNAL TX : OUT STD_LOGIC; | |||
|
39 | CONSTANT tx_period : IN TIME | |||
|
40 | ); | |||
|
41 | PROCEDURE UART_WRITE_ADDR32 ( | |||
|
42 | SIGNAL TX : OUT STD_LOGIC; | |||
|
43 | CONSTANT tx_period : IN TIME; | |||
|
44 | CONSTANT ADDR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
45 | CONSTANT DATA : IN STD_LOGIC_VECTOR(31 DOWNTO 0) | |||
|
46 | ); | |||
|
47 | PROCEDURE UART_WRITE ( | |||
|
48 | SIGNAL TX : OUT STD_LOGIC; | |||
|
49 | CONSTANT tx_period : IN TIME; | |||
|
50 | CONSTANT ADDR : IN STD_LOGIC_VECTOR(31 DOWNTO 2); | |||
|
51 | CONSTANT DATA : IN STD_LOGIC_VECTOR(31 DOWNTO 0) | |||
|
52 | ); | |||
|
53 | ||||
|
54 | END lpp_sim_pkg; | |||
|
55 | ||||
|
56 | PACKAGE BODY lpp_sim_pkg IS | |||
|
57 | ||||
|
58 | PROCEDURE UART_INIT (SIGNAL TX : OUT STD_LOGIC; CONSTANT tx_period : IN TIME) IS | |||
|
59 | BEGIN | |||
|
60 | txc(TX, 16#55#, tx_period); | |||
|
61 | END; | |||
|
62 | ||||
|
63 | PROCEDURE UART_WRITE_ADDR32 (SIGNAL TX : OUT STD_LOGIC; CONSTANT tx_period : IN TIME; | |||
|
64 | CONSTANT ADDR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
65 | CONSTANT DATA : IN STD_LOGIC_VECTOR(31 DOWNTO 0)) IS | |||
|
66 | BEGIN | |||
|
67 | txc(TX, 16#c0#, tx_period); | |||
|
68 | txa(TX, | |||
|
69 | to_integer(UNSIGNED(ADDR(31 DOWNTO 24))), | |||
|
70 | to_integer(UNSIGNED(ADDR(23 DOWNTO 16))), | |||
|
71 | to_integer(UNSIGNED(ADDR(15 DOWNTO 8))), | |||
|
72 | to_integer(UNSIGNED(ADDR(7 DOWNTO 0))), | |||
|
73 | tx_period); | |||
|
74 | txa(TX, | |||
|
75 | to_integer(UNSIGNED(DATA(31 DOWNTO 24))), | |||
|
76 | to_integer(UNSIGNED(DATA(23 DOWNTO 16))), | |||
|
77 | to_integer(UNSIGNED(DATA(15 DOWNTO 8))), | |||
|
78 | to_integer(UNSIGNED(DATA(7 DOWNTO 0))), | |||
|
79 | tx_period); | |||
|
80 | END; | |||
|
81 | ||||
|
82 | PROCEDURE UART_WRITE (SIGNAL TX : OUT STD_LOGIC; CONSTANT tx_period : IN TIME; | |||
|
83 | CONSTANT ADDR : IN STD_LOGIC_VECTOR(31 DOWNTO 2); | |||
|
84 | CONSTANT DATA : IN STD_LOGIC_VECTOR(31 DOWNTO 0)) IS | |||
|
85 | ||||
|
86 | CONSTANT ADDR_last : STD_LOGIC_VECTOR(7 DOWNTO 0) := ADDR(7 DOWNTO 2) & "00"; | |||
|
87 | ||||
|
88 | BEGIN | |||
|
89 | txc(TX, 16#c0#, tx_period); | |||
|
90 | txa(TX, | |||
|
91 | to_integer(UNSIGNED(ADDR(31 DOWNTO 24))), | |||
|
92 | to_integer(UNSIGNED(ADDR(23 DOWNTO 16))), | |||
|
93 | to_integer(UNSIGNED(ADDR(15 DOWNTO 8))), | |||
|
94 | to_integer(UNSIGNED(ADDR_last)), | |||
|
95 | tx_period); | |||
|
96 | txa(TX, | |||
|
97 | to_integer(UNSIGNED(DATA(31 DOWNTO 24))), | |||
|
98 | to_integer(UNSIGNED(DATA(23 DOWNTO 16))), | |||
|
99 | to_integer(UNSIGNED(DATA(15 DOWNTO 8))), | |||
|
100 | to_integer(UNSIGNED(DATA(7 DOWNTO 0))), | |||
|
101 | tx_period); | |||
|
102 | END; | |||
|
103 | ||||
|
104 | END lpp_sim_pkg; |
@@ -0,0 +1,90 | |||||
|
1 | LIBRARY ieee; | |||
|
2 | USE ieee.std_logic_1164.ALL; | |||
|
3 | USE ieee.numeric_std.ALL; | |||
|
4 | ||||
|
5 | PACKAGE lpp_lfr_apbreg_pkg IS | |||
|
6 | ||||
|
7 | ----------------------------------------------------------------------------- | |||
|
8 | -- SPECTRAL_MATRIX | |||
|
9 | ----------------------------------------------------------------------------- | |||
|
10 | CONSTANT ADDR_LFR_SM_CONFIG : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000000"; | |||
|
11 | CONSTANT ADDR_LFR_SM_STATUS : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000001"; | |||
|
12 | CONSTANT ADDR_LFR_SM_F0_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000010"; | |||
|
13 | CONSTANT ADDR_LFR_SM_F0_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000011"; | |||
|
14 | ||||
|
15 | CONSTANT ADDR_LFR_SM_F1_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000100"; | |||
|
16 | CONSTANT ADDR_LFR_SM_F1_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000101"; | |||
|
17 | CONSTANT ADDR_LFR_SM_F2_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000110"; | |||
|
18 | CONSTANT ADDR_LFR_SM_F2_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "000111"; | |||
|
19 | ||||
|
20 | CONSTANT ADDR_LFR_SM_F0_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001000"; | |||
|
21 | CONSTANT ADDR_LFR_SM_F0_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001001"; | |||
|
22 | CONSTANT ADDR_LFR_SM_F0_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001010"; | |||
|
23 | CONSTANT ADDR_LFR_SM_F0_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001011"; | |||
|
24 | ||||
|
25 | CONSTANT ADDR_LFR_SM_F1_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001100"; | |||
|
26 | CONSTANT ADDR_LFR_SM_F1_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001101"; | |||
|
27 | CONSTANT ADDR_LFR_SM_F1_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001110"; | |||
|
28 | CONSTANT ADDR_LFR_SM_F1_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "001111"; | |||
|
29 | ||||
|
30 | CONSTANT ADDR_LFR_SM_F2_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010000"; | |||
|
31 | CONSTANT ADDR_LFR_SM_F2_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010001"; | |||
|
32 | CONSTANT ADDR_LFR_SM_F2_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010010"; | |||
|
33 | CONSTANT ADDR_LFR_SM_F2_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010011"; | |||
|
34 | ||||
|
35 | CONSTANT ADDR_LFR_SM_LENGTH : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010100"; | |||
|
36 | ----------------------------------------------------------------------------- | |||
|
37 | -- WAVEFORM PICKER | |||
|
38 | ----------------------------------------------------------------------------- | |||
|
39 | CONSTANT ADDR_LFR_WP_DATASHAPING : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010101"; | |||
|
40 | CONSTANT ADDR_LFR_WP_CONTROL : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010110"; | |||
|
41 | CONSTANT ADDR_LFR_WP_F0_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "010111"; | |||
|
42 | ||||
|
43 | CONSTANT ADDR_LFR_WP_F0_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011000"; | |||
|
44 | CONSTANT ADDR_LFR_WP_F1_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011001"; | |||
|
45 | CONSTANT ADDR_LFR_WP_F1_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011010"; | |||
|
46 | CONSTANT ADDR_LFR_WP_F2_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011011"; | |||
|
47 | ||||
|
48 | CONSTANT ADDR_LFR_WP_F2_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011100"; | |||
|
49 | CONSTANT ADDR_LFR_WP_F3_0_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011101"; | |||
|
50 | CONSTANT ADDR_LFR_WP_F3_1_ADDR : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011110"; | |||
|
51 | CONSTANT ADDR_LFR_WP_STATUS : STD_LOGIC_VECTOR(7 DOWNTO 2) := "011111"; | |||
|
52 | ||||
|
53 | CONSTANT ADDR_LFR_WP_DELTASNAPSHOT : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100000"; | |||
|
54 | CONSTANT ADDR_LFR_WP_DELTA_F0 : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100001"; | |||
|
55 | CONSTANT ADDR_LFR_WP_DELTA_F0_2 : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100010"; | |||
|
56 | CONSTANT ADDR_LFR_WP_DELTA_F1 : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100011"; | |||
|
57 | ||||
|
58 | CONSTANT ADDR_LFR_WP_DELTA_F2 : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100100"; | |||
|
59 | CONSTANT ADDR_LFR_WP_DATA_IN_BUFFER : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100101"; | |||
|
60 | CONSTANT ADDR_LFR_WP_NBSNAPSHOT : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100110"; | |||
|
61 | CONSTANT ADDR_LFR_WP_START_DATE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "100111"; | |||
|
62 | ||||
|
63 | CONSTANT ADDR_LFR_WP_F0_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101000"; | |||
|
64 | CONSTANT ADDR_LFR_WP_F0_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101001"; | |||
|
65 | CONSTANT ADDR_LFR_WP_F0_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101010"; | |||
|
66 | CONSTANT ADDR_LFR_WP_F0_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101011"; | |||
|
67 | ||||
|
68 | CONSTANT ADDR_LFR_WP_F1_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101100"; | |||
|
69 | CONSTANT ADDR_LFR_WP_F1_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101101"; | |||
|
70 | CONSTANT ADDR_LFR_WP_F1_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101110"; | |||
|
71 | CONSTANT ADDR_LFR_WP_F1_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "101111"; | |||
|
72 | ||||
|
73 | CONSTANT ADDR_LFR_WP_F2_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110000"; | |||
|
74 | CONSTANT ADDR_LFR_WP_F2_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110001"; | |||
|
75 | CONSTANT ADDR_LFR_WP_F2_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110010"; | |||
|
76 | CONSTANT ADDR_LFR_WP_F2_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110011"; | |||
|
77 | ||||
|
78 | CONSTANT ADDR_LFR_WP_F3_0_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110100"; | |||
|
79 | CONSTANT ADDR_LFR_WP_F3_0_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110101"; | |||
|
80 | CONSTANT ADDR_LFR_WP_F3_1_TIME_COARSE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110110"; | |||
|
81 | CONSTANT ADDR_LFR_WP_F3_1_TIME_FINE : STD_LOGIC_VECTOR(7 DOWNTO 2) := "110111"; | |||
|
82 | ||||
|
83 | CONSTANT ADDR_LFR_WP_LENGTH : STD_LOGIC_VECTOR(7 DOWNTO 2) := "111000"; | |||
|
84 | ----------------------------------------------------------------------------- | |||
|
85 | -- LFR | |||
|
86 | ----------------------------------------------------------------------------- | |||
|
87 | CONSTANT ADDR_LFR_VERSION : STD_LOGIC_VECTOR(7 DOWNTO 2) := "111100"; | |||
|
88 | ||||
|
89 | ||||
|
90 | END lpp_lfr_apbreg_pkg; |
@@ -0,0 +1,136 | |||||
|
1 | ||||
|
2 | ------------------------------------------------------------------------------ | |||
|
3 | -- This file is a part of the LPP VHDL IP LIBRARY | |||
|
4 | -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS | |||
|
5 | -- | |||
|
6 | -- This program is free software; you can redistribute it and/or modify | |||
|
7 | -- it under the terms of the GNU General Public License as published by | |||
|
8 | -- the Free Software Foundation; either version 3 of the License, or | |||
|
9 | -- (at your option) any later version. | |||
|
10 | -- | |||
|
11 | -- This program is distributed in the hope that it will be useful, | |||
|
12 | -- but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
13 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
14 | -- GNU General Public License for more details. | |||
|
15 | -- | |||
|
16 | -- You should have received a copy of the GNU General Public License | |||
|
17 | -- along with this program; if not, write to the Free Software | |||
|
18 | -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
|
19 | ------------------------------------------------------------------------------- | |||
|
20 | -- Author : Jean-christophe Pellion | |||
|
21 | -- Mail : jean-christophe.pellion@lpp.polytechnique.fr | |||
|
22 | -- jean-christophe.pellion@easii-ic.com | |||
|
23 | ------------------------------------------------------------------------------- | |||
|
24 | LIBRARY ieee; | |||
|
25 | USE ieee.std_logic_1164.ALL; | |||
|
26 | USE ieee.numeric_std.ALL; | |||
|
27 | LIBRARY grlib; | |||
|
28 | USE grlib.amba.ALL; | |||
|
29 | USE grlib.stdlib.ALL; | |||
|
30 | USE grlib.devices.ALL; | |||
|
31 | USE GRLIB.DMA2AHB_Package.ALL; | |||
|
32 | LIBRARY lpp; | |||
|
33 | USE lpp.lpp_amba.ALL; | |||
|
34 | USE lpp.apb_devices_list.ALL; | |||
|
35 | USE lpp.lpp_memory.ALL; | |||
|
36 | USE lpp.lpp_dma_pkg.ALL; | |||
|
37 | LIBRARY techmap; | |||
|
38 | USE techmap.gencomp.ALL; | |||
|
39 | ||||
|
40 | ||||
|
41 | ENTITY lpp_waveform_fsmdma IS | |||
|
42 | PORT ( | |||
|
43 | -- AMBA AHB system signals | |||
|
44 | clk : IN STD_ULOGIC; | |||
|
45 | rstn : IN STD_ULOGIC; | |||
|
46 | run : IN STD_LOGIC; | |||
|
47 | ||||
|
48 | --------------------------------------------------------------------------- | |||
|
49 | -- FIFO - IN | |||
|
50 | fifo_buffer_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0); | |||
|
51 | fifo_data : IN STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
52 | fifo_empty : IN STD_LOGIC; | |||
|
53 | fifo_empty_threshold : IN STD_LOGIC; | |||
|
54 | fifo_ren : OUT STD_LOGIC; | |||
|
55 | ||||
|
56 | --------------------------------------------------------------------------- | |||
|
57 | -- DMA - OUT | |||
|
58 | dma_fifo_valid_burst : OUT STD_LOGIC; | |||
|
59 | dma_fifo_data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
60 | dma_fifo_ren : IN STD_LOGIC; | |||
|
61 | ||||
|
62 | dma_buffer_new : OUT STD_LOGIC; | |||
|
63 | dma_buffer_addr : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
64 | dma_buffer_length : OUT STD_LOGIC_VECTOR(25 DOWNTO 0); | |||
|
65 | dma_buffer_full : IN STD_LOGIC; | |||
|
66 | dma_buffer_full_err : IN STD_LOGIC; | |||
|
67 | ||||
|
68 | --------------------------------------------------------------------------- | |||
|
69 | -- Reg In | |||
|
70 | status_buffer_ready : IN STD_LOGIC; | |||
|
71 | addr_buffer : IN STD_LOGIC_VECTOR(31 DOWNTO 0); | |||
|
72 | length_buffer : IN STD_LOGIC_VECTOR(25 DOWNTO 0); | |||
|
73 | -- Reg Out | |||
|
74 | ready_buffer : OUT STD_LOGIC; | |||
|
75 | buffer_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0); | |||
|
76 | error_buffer_full : OUT STD_LOGIC | |||
|
77 | ); | |||
|
78 | END; | |||
|
79 | ||||
|
80 | ARCHITECTURE Behavioral OF lpp_waveform_fsmdma IS | |||
|
81 | ||||
|
82 | TYPE FSM_DMA_STATE IS (IDLE, ONGOING); | |||
|
83 | SIGNAL state : FSM_DMA_STATE; | |||
|
84 | SIGNAL burst_valid_s : STD_LOGIC; | |||
|
85 | ||||
|
86 | BEGIN | |||
|
87 | burst_valid_s <= NOT fifo_empty_threshold; | |||
|
88 | ||||
|
89 | error_buffer_full <= dma_buffer_full_err; | |||
|
90 | ||||
|
91 | fifo_ren <= dma_fifo_ren WHEN state = ONGOING ELSE '1'; | |||
|
92 | dma_fifo_data <= fifo_data; | |||
|
93 | dma_fifo_valid_burst <= burst_valid_s WHEN state = ONGOING ELSE '0'; | |||
|
94 | ||||
|
95 | PROCESS (clk, rstn) | |||
|
96 | BEGIN -- PROCESS | |||
|
97 | IF rstn = '0' THEN -- asynchronous reset (active low) | |||
|
98 | state <= IDLE; | |||
|
99 | buffer_time <= (OTHERS => '0'); | |||
|
100 | dma_buffer_addr <= (OTHERS => '0'); | |||
|
101 | dma_buffer_length <= (OTHERS => '0'); | |||
|
102 | dma_buffer_new <= '0'; | |||
|
103 | ready_buffer <= '0'; | |||
|
104 | ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge | |||
|
105 | ready_buffer <= '0'; | |||
|
106 | dma_buffer_new <= '0'; | |||
|
107 | IF run = '1' THEN | |||
|
108 | CASE state IS | |||
|
109 | WHEN IDLE => | |||
|
110 | IF fifo_empty = '0' THEN | |||
|
111 | IF status_buffer_ready = '0' THEN | |||
|
112 | state <= ONGOING; | |||
|
113 | buffer_time <= fifo_buffer_time; | |||
|
114 | dma_buffer_addr <= addr_buffer; | |||
|
115 | dma_buffer_length <= length_buffer; | |||
|
116 | dma_buffer_new <= '1'; | |||
|
117 | END IF; | |||
|
118 | END IF; | |||
|
119 | WHEN ONGOING => | |||
|
120 | IF dma_buffer_full = '1' THEN | |||
|
121 | ready_buffer <= '1'; | |||
|
122 | state <= IDLE; | |||
|
123 | END IF; | |||
|
124 | WHEN OTHERS => NULL; | |||
|
125 | END CASE; | |||
|
126 | ELSE | |||
|
127 | state <= IDLE; | |||
|
128 | buffer_time <= (OTHERS => '0'); | |||
|
129 | dma_buffer_addr <= (OTHERS => '0'); | |||
|
130 | dma_buffer_length <= (OTHERS => '0'); | |||
|
131 | dma_buffer_new <= '0'; | |||
|
132 | END IF; | |||
|
133 | END IF; | |||
|
134 | END PROCESS; | |||
|
135 | ||||
|
136 | END Behavioral; |
General Comments 0
You need to be logged in to leave comments.
Login now