1 | --------------------------------------------------------------------------------
|
---|
2 | -- Company: ETH Zurich, Institute for Particle Physics
|
---|
3 | -- Engineer: Q. Weitzel, P. Vogler
|
---|
4 | --
|
---|
5 | -- Create Date: 08.12.2010
|
---|
6 | -- Design Name:
|
---|
7 | -- Module Name: FTM_top_tb.vhd
|
---|
8 | -- Project Name:
|
---|
9 | -- Target Device:
|
---|
10 | -- Tool versions:
|
---|
11 | -- Description: Testbench for FTM firmware
|
---|
12 | --
|
---|
13 | -- VHDL Test Bench Created by ISE for module: FTM_top
|
---|
14 | --
|
---|
15 | -- Dependencies:
|
---|
16 | --
|
---|
17 | -- Revision:
|
---|
18 | -- Revision 0.01 - File Created
|
---|
19 | -- Additional Comments:
|
---|
20 | --
|
---|
21 | -- Notes:
|
---|
22 | -- This testbench has been automatically generated using types std_logic and
|
---|
23 | -- std_logic_vector for the ports of the unit under test. Xilinx recommends
|
---|
24 | -- that these types always be used for the top-level I/O of a design in order
|
---|
25 | -- to guarantee that the testbench will bind correctly to the post-implementation
|
---|
26 | -- simulation model.
|
---|
27 | --------------------------------------------------------------------------------
|
---|
28 | library IEEE;
|
---|
29 | use IEEE.STD_LOGIC_1164.ALL;
|
---|
30 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
---|
31 | use IEEE.NUMERIC_STD.ALL;
|
---|
32 |
|
---|
33 | library UNISIM;
|
---|
34 | use UNISIM.VComponents.all;
|
---|
35 |
|
---|
36 | entity FTM_top_tb is
|
---|
37 | end FTM_top_tb;
|
---|
38 |
|
---|
39 | architecture behavior of FTM_top_tb is
|
---|
40 |
|
---|
41 | -- Component Declaration for the Unit Under Test (UUT)
|
---|
42 |
|
---|
43 | component FTM_top
|
---|
44 | port(
|
---|
45 |
|
---|
46 | -- Clock
|
---|
47 | clk : IN STD_LOGIC; -- external clock from oscillator U47
|
---|
48 |
|
---|
49 | -- connection to the WIZnet W5300 ethernet controller
|
---|
50 | -------------------------------------------------------------------------------
|
---|
51 | -- W5300 data bus
|
---|
52 | W_D : inout STD_LOGIC_VECTOR(15 downto 0); -- 16-bit data bus to W5300
|
---|
53 |
|
---|
54 | -- W5300 address bus
|
---|
55 | W_A : out STD_LOGIC_VECTOR(9 downto 0); -- there is no real net W_A0 because
|
---|
56 | -- the W5300 is operated in the
|
---|
57 | -- 16-bit mode
|
---|
58 | -- -> W_A<0> assigned to unconnected pin
|
---|
59 |
|
---|
60 | -- W5300 control signals
|
---|
61 | -- the signals W_INT, W_RD, W_WR and W_RES also go to testpoints T17
|
---|
62 | -- W_CS is also routed to testpoint JP7
|
---|
63 | W_CS : out STD_LOGIC; -- W5300 chip select
|
---|
64 | W_INT : IN STD_LOGIC; -- interrupt
|
---|
65 | W_RD : out STD_LOGIC; -- read
|
---|
66 | W_WR : out STD_LOGIC; -- write
|
---|
67 | W_RES : out STD_LOGIC; -- reset W5300 chip
|
---|
68 |
|
---|
69 | -- W5300 buffer ready indicator
|
---|
70 | -- W_BRDY : in STD_LOGIC_VECTOR(3 downto 0);
|
---|
71 |
|
---|
72 | -- testpoints (T18) associated with the W5300
|
---|
73 | -- W_T : inout STD_LOGIC_VECTOR(3 downto 0);
|
---|
74 |
|
---|
75 |
|
---|
76 | -- SPI Interface
|
---|
77 | -- connection to the EEPROM U36 (AL25L016M) and
|
---|
78 | -- temperature sensors U45, U46, U48 and U49 (all MAX6662)
|
---|
79 | -------------------------------------------------------------------------------
|
---|
80 | -- S_CLK : out STD_LOGIC; -- SPI clock
|
---|
81 |
|
---|
82 | -- EEPROM
|
---|
83 | -- MOSI : out STD_LOGIC; -- master out slave in
|
---|
84 | -- MISO : in STD_LOGIC; -- master in slave out
|
---|
85 | -- EE_CS : out STD_LOGIC; -- EEPROM chip select
|
---|
86 |
|
---|
87 | -- temperature sensors U45, U46, U48 and U49
|
---|
88 | -- SIO : inout STD_LOGIC; -- serial IO
|
---|
89 | -- TS_CS : out STD_LOGIC_VECTOR(3 downto 0); -- temperature sensors chip select
|
---|
90 |
|
---|
91 |
|
---|
92 | -- Trigger primitives inputs
|
---|
93 | -------------------------------------------------------------------------------
|
---|
94 | Trig_Prim_A : in STD_LOGIC_VECTOR(9 downto 0); -- crate 0
|
---|
95 | Trig_Prim_B : in STD_LOGIC_VECTOR(9 downto 0); -- crate 1
|
---|
96 | Trig_Prim_C : in STD_LOGIC_VECTOR(9 downto 0); -- crate 2
|
---|
97 | Trig_Prim_D : in STD_LOGIC_VECTOR(9 downto 0); -- crate 3
|
---|
98 |
|
---|
99 |
|
---|
100 | -- NIM inputs
|
---|
101 | ------------------------------------------------------------------------------
|
---|
102 | ext_Trig : in STD_LOGIC_VECTOR(2 downto 1); -- external trigger input
|
---|
103 | Veto : in STD_LOGIC; -- trigger veto input
|
---|
104 | -- NIM_In : in STD_LOGIC_VECTOR(2 downto 0); -- auxiliary inputs
|
---|
105 |
|
---|
106 | -- alternative external clock input for FPGA
|
---|
107 | -- NIM_In3_GCLK : in STD_LOGIC; -- input with global clock buffer available
|
---|
108 |
|
---|
109 |
|
---|
110 | -- LEDs
|
---|
111 | -------------------------------------------------------------------------------
|
---|
112 | LED_red : out STD_LOGIC_VECTOR(3 downto 0); -- red
|
---|
113 | LED_ye : out STD_LOGIC_VECTOR(1 downto 0); -- yellow
|
---|
114 | LED_gn : out STD_LOGIC_VECTOR(1 downto 0); -- green
|
---|
115 |
|
---|
116 |
|
---|
117 | -- Clock conditioner LMK03000
|
---|
118 | -------------------------------------------------------------------------------
|
---|
119 | CLK_Clk_Cond : out STD_LOGIC; -- MICROWIRE interface serial clock
|
---|
120 | LE_Clk_Cond : out STD_LOGIC; -- MICROWIRE interface latch enable
|
---|
121 | DATA_Clk_Cond : out STD_LOGIC; -- MICROWIRE interface data
|
---|
122 |
|
---|
123 | SYNC_Clk_Cond : out STD_LOGIC; -- global clock synchronization
|
---|
124 | LD_Clk_Cond : in STD_LOGIC; -- lock detect, should be checked for
|
---|
125 |
|
---|
126 |
|
---|
127 | -- various RS-485 Interfaces
|
---|
128 | -------------------------------------------------------------------------------
|
---|
129 | -- Bus 1: FTU slow control
|
---|
130 | Bus1_Tx_En : out STD_LOGIC; -- bus 1: transmitter enable
|
---|
131 | Bus1_Rx_En : out STD_LOGIC; -- bus 1: receiver enable
|
---|
132 |
|
---|
133 | Bus1_RxD_0 : in STD_LOGIC; -- crate 0
|
---|
134 | Bus1_TxD_0 : out STD_LOGIC;
|
---|
135 |
|
---|
136 | Bus1_RxD_1 : in STD_LOGIC; -- crate 1
|
---|
137 | Bus1_TxD_1 : out STD_LOGIC;
|
---|
138 |
|
---|
139 | Bus1_RxD_2 : in STD_LOGIC; -- crate 2
|
---|
140 | Bus1_TxD_2 : out STD_LOGIC;
|
---|
141 |
|
---|
142 | Bus1_RxD_3 : in STD_LOGIC; -- crate 3
|
---|
143 | Bus1_TxD_3 : out STD_LOGIC;
|
---|
144 |
|
---|
145 |
|
---|
146 | -- Bus 2: Trigger-ID to FAD boards
|
---|
147 | Bus2_Tx_En : out STD_LOGIC; -- bus 2: transmitter enable
|
---|
148 | Bus2_Rx_En : out STD_LOGIC; -- bus 2: receiver enable
|
---|
149 |
|
---|
150 | Bus2_RxD_0 : in STD_LOGIC; -- crate 0
|
---|
151 | Bus2_TxD_0 : out STD_LOGIC;
|
---|
152 |
|
---|
153 | Bus2_RxD_1 : in STD_LOGIC; -- crate 1
|
---|
154 | Bus2_TxD_1 : out STD_LOGIC;
|
---|
155 |
|
---|
156 | Bus2_RxD_2 : in STD_LOGIC; -- crate 2
|
---|
157 | Bus2_TxD_2 : out STD_LOGIC;
|
---|
158 |
|
---|
159 | Bus2_RxD_3 : in STD_LOGIC; -- crate 3
|
---|
160 | Bus2_TxD_3 : out STD_LOGIC;
|
---|
161 |
|
---|
162 |
|
---|
163 | -- auxiliary access
|
---|
164 | -- Aux_Rx_D : in STD_LOGIC;
|
---|
165 | -- Aux_Tx_D : out STD_LOGIC;
|
---|
166 | -- Aux_Rx_En : out STD_LOGIC; -- Rx- and Tx enable
|
---|
167 | -- Aux_Tx_En : out STD_LOGIC; -- also for auxiliary Trigger-ID
|
---|
168 |
|
---|
169 |
|
---|
170 | -- auxiliary Trigger-ID (i.e. to send the Trigger-ID to the counting hut/house/container)
|
---|
171 | -- TrID_Rx_D : in STD_LOGIC;
|
---|
172 | -- TrID_Tx_D : out STD_LOGIC;
|
---|
173 |
|
---|
174 |
|
---|
175 | -- Crate-Resets
|
---|
176 | -------------------------------------------------------------------------------
|
---|
177 | Crate_Res0 : out STD_LOGIC;
|
---|
178 | Crate_Res1 : out STD_LOGIC;
|
---|
179 | Crate_Res2 : out STD_LOGIC;
|
---|
180 | Crate_Res3 : out STD_LOGIC;
|
---|
181 |
|
---|
182 |
|
---|
183 | -- Busy signals from the FAD boards
|
---|
184 | -------------------------------------------------------------------------------
|
---|
185 | Busy0 : in STD_LOGIC;
|
---|
186 | Busy1 : in STD_LOGIC;
|
---|
187 | Busy2 : in STD_LOGIC;
|
---|
188 | Busy3 : in STD_LOGIC;
|
---|
189 |
|
---|
190 |
|
---|
191 | -- NIM outputs
|
---|
192 | -- LVDS output at the FPGA followed by LVDS to NIM conversion stage
|
---|
193 | -------------------------------------------------------------------------------
|
---|
194 | -- calibration
|
---|
195 | -- Cal_NIM1_p : out STD_LOGIC; -- Cal_NIM1+
|
---|
196 | -- Cal_NIM1_n : out STD_LOGIC; -- Cal_NIM1-
|
---|
197 | -- Cal_NIM2_p : out STD_LOGIC; -- Cal_NIM2+
|
---|
198 | -- Cal_NIM2_n : out STD_LOGIC; -- Cal_NIM2-
|
---|
199 |
|
---|
200 | -- auxiliarry / spare NIM outputs
|
---|
201 | -- NIM_Out0_p : out STD_LOGIC; -- NIM_Out0+
|
---|
202 | -- NIM_Out0_n : out STD_LOGIC; -- NIM_Out0-
|
---|
203 | -- NIM_Out1_p : out STD_LOGIC; -- NIM_Out1+
|
---|
204 | -- NIM_Out1_n : out STD_LOGIC; -- NIM_Out1-
|
---|
205 |
|
---|
206 |
|
---|
207 | -- fast control signal outputs
|
---|
208 | -- LVDS output at the FPGA followed by LVDS to NIM conversion stage
|
---|
209 | -------------------------------------------------------------------------------
|
---|
210 | -- RES_p : out STD_LOGIC; -- RES+ Reset
|
---|
211 | -- RES_n : out STD_LOGIC; -- RES-
|
---|
212 |
|
---|
213 | TRG_p : out STD_LOGIC; -- TRG+ Trigger
|
---|
214 | TRG_n : out STD_LOGIC; -- TRG-
|
---|
215 |
|
---|
216 | TIM_Run_p : out STD_LOGIC; -- TIM_Run+ Time Marker
|
---|
217 | TIM_Run_n : out STD_LOGIC; -- TIM_Run-
|
---|
218 | -- TIM_Sel : out STD_LOGIC; -- Time Marker selector
|
---|
219 |
|
---|
220 | -- CLD_FPGA : in STD_LOGIC; -- DRS-Clock feedback into FPGA
|
---|
221 |
|
---|
222 |
|
---|
223 | -- LVDS calibration outputs
|
---|
224 | -------------------------------------------------------------------------------
|
---|
225 | -- to connector J13
|
---|
226 | -- for light pulsar in the mirror dish
|
---|
227 | -- Cal_0_p : out STD_LOGIC;
|
---|
228 | -- Cal_0_n : out STD_LOGIC;
|
---|
229 | -- Cal_1_p : out STD_LOGIC;
|
---|
230 | -- Cal_1_n : out STD_LOGIC;
|
---|
231 | -- Cal_2_p : out STD_LOGIC;
|
---|
232 | -- Cal_2_n : out STD_LOGIC;
|
---|
233 | -- Cal_3_p : out STD_LOGIC;
|
---|
234 | -- Cal_3_n : out STD_LOGIC;
|
---|
235 |
|
---|
236 | -- to connector J12
|
---|
237 | -- for light pulsar inside shutter
|
---|
238 | -- Cal_4_p : out STD_LOGIC;
|
---|
239 | -- Cal_4_n : out STD_LOGIC;
|
---|
240 | -- Cal_5_p : out STD_LOGIC;
|
---|
241 | -- Cal_5_n : out STD_LOGIC;
|
---|
242 | -- Cal_6_p : out STD_LOGIC;
|
---|
243 | -- Cal_6_n : out STD_LOGIC;
|
---|
244 | -- Cal_7_p : out STD_LOGIC;
|
---|
245 | -- Cal_7_n : out STD_LOGIC
|
---|
246 |
|
---|
247 |
|
---|
248 | -- Testpoints
|
---|
249 | -------------------------------------------------------------------------------
|
---|
250 | TP : inout STD_LOGIC_VECTOR(32 downto 0)
|
---|
251 | -- TP_in : in STD_LOGIC_VECTOR(34 downto 33); -- input only
|
---|
252 |
|
---|
253 | -- Board ID - inputs
|
---|
254 | -- local board-ID "solder programmable"
|
---|
255 | -- all on 'input only' pins
|
---|
256 | -------------------------------------------------------------------------------
|
---|
257 | -- brd_id : in STD_LOGIC_VECTOR(7 downto 0) -- input only
|
---|
258 |
|
---|
259 | );
|
---|
260 | end component;
|
---|
261 |
|
---|
262 | --Inputs
|
---|
263 | signal clk_sig : STD_LOGIC := '0';
|
---|
264 | signal W_INT_sig : STD_LOGIC := '0';
|
---|
265 | signal W_BRDY_sig : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
|
---|
266 | signal Trig_Prim_A_sig : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
|
---|
267 | signal Trig_Prim_B_sig : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
|
---|
268 | signal Trig_Prim_C_sig : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
|
---|
269 | signal Trig_Prim_D_sig : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
|
---|
270 | signal ext_Trig_sig : STD_LOGIC_VECTOR(2 downto 1) := (others => '0');
|
---|
271 | signal Veto_sig : STD_LOGIC := '0';
|
---|
272 | signal NIM_In_sig : STD_LOGIC_VECTOR(2 downto 0) := (others => '0');
|
---|
273 | signal NIM_In3_GCLK_sig : STD_LOGIC := '0';
|
---|
274 | signal LD_Clk_Cond_sig : STD_LOGIC := '1';
|
---|
275 | signal Bus1_RxD_0_sig : STD_LOGIC := '1';
|
---|
276 | signal Bus1_RxD_1_sig : STD_LOGIC := '1';
|
---|
277 | signal Bus1_RxD_2_sig : STD_LOGIC := '1';
|
---|
278 | signal Bus1_RxD_3_sig : STD_LOGIC := '1';
|
---|
279 | signal Bus2_RxD_0_sig : STD_LOGIC := '1';
|
---|
280 | signal Bus2_RxD_1_sig : STD_LOGIC := '1';
|
---|
281 | signal Bus2_RxD_2_sig : STD_LOGIC := '1';
|
---|
282 | signal Bus2_RxD_3_sig : STD_LOGIC := '1';
|
---|
283 | signal Busy0_sig : STD_LOGIC := '0';
|
---|
284 | signal Busy1_sig : STD_LOGIC := '0';
|
---|
285 | signal Busy2_sig : STD_LOGIC := '0';
|
---|
286 | signal Busy3_sig : STD_LOGIC := '0';
|
---|
287 |
|
---|
288 | --Input/Output Pins
|
---|
289 | signal W_D_sig : STD_LOGIC_VECTOR(15 downto 0) := (others => '0');
|
---|
290 | signal W_T_sig : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
|
---|
291 | signal SIO_sig : STD_LOGIC := '0';
|
---|
292 | signal TP_sig : STD_LOGIC_VECTOR(32 downto 0) := (others => '0');
|
---|
293 |
|
---|
294 | --Outputs
|
---|
295 | signal W_A_sig : STD_LOGIC_VECTOR(9 downto 0);
|
---|
296 | signal W_CS_sig : STD_LOGIC;
|
---|
297 | signal W_RD_sig : STD_LOGIC;
|
---|
298 | signal W_WR_sig : STD_LOGIC;
|
---|
299 | signal W_RES_sig : STD_LOGIC;
|
---|
300 | signal S_CLK_sig : STD_LOGIC;
|
---|
301 | signal TS_CS_sig : STD_LOGIC_VECTOR(3 downto 0);
|
---|
302 | signal LED_red_sig : STD_LOGIC_VECTOR(3 downto 0);
|
---|
303 | signal LED_ye_sig : STD_LOGIC_VECTOR(1 downto 0);
|
---|
304 | signal LED_gn_sig : STD_LOGIC_VECTOR(1 downto 0);
|
---|
305 | signal CLK_Clk_Cond_sig : STD_LOGIC;
|
---|
306 | signal LE_Clk_Cond_sig : STD_LOGIC;
|
---|
307 | signal DATA_Clk_Cond_sig : STD_LOGIC;
|
---|
308 | signal SYNC_Clk_Cond_sig : STD_LOGIC;
|
---|
309 | signal Bus1_Tx_En_sig : STD_LOGIC;
|
---|
310 | signal Bus1_Rx_En_sig : STD_LOGIC;
|
---|
311 | signal Bus1_TxD_0_sig : STD_LOGIC;
|
---|
312 | signal Bus1_TxD_1_sig : STD_LOGIC;
|
---|
313 | signal Bus1_TxD_2_sig : STD_LOGIC;
|
---|
314 | signal Bus1_TxD_3_sig : STD_LOGIC;
|
---|
315 | signal Bus2_Tx_En_sig : STD_LOGIC;
|
---|
316 | signal Bus2_Rx_En_sig : STD_LOGIC;
|
---|
317 | signal Bus2_TxD_0_sig : STD_LOGIC;
|
---|
318 | signal Bus2_TxD_1_sig : STD_LOGIC;
|
---|
319 | signal Bus2_TxD_2_sig : STD_LOGIC;
|
---|
320 | signal Bus2_TxD_3_sig : STD_LOGIC;
|
---|
321 | signal Crate_Res0_sig : STD_LOGIC;
|
---|
322 | signal Crate_Res1_sig : STD_LOGIC;
|
---|
323 | signal Crate_Res2_sig : STD_LOGIC;
|
---|
324 | signal Crate_Res3_sig : STD_LOGIC;
|
---|
325 | signal RES_p_sig : STD_LOGIC;
|
---|
326 | signal RES_n_sig : STD_LOGIC;
|
---|
327 | signal TRG_p_sig : STD_LOGIC;
|
---|
328 | signal TRG_n_sig : STD_LOGIC;
|
---|
329 | signal TIM_Run_p_sig : STD_LOGIC;
|
---|
330 | signal TIM_Run_n_sig : STD_LOGIC;
|
---|
331 | signal TIM_Sel_sig : STD_LOGIC;
|
---|
332 | signal Cal_0_p_sig : STD_LOGIC;
|
---|
333 | signal Cal_0_n_sig : STD_LOGIC;
|
---|
334 | signal Cal_1_p_sig : STD_LOGIC;
|
---|
335 | signal Cal_1_n_sig : STD_LOGIC;
|
---|
336 | signal Cal_2_p_sig : STD_LOGIC;
|
---|
337 | signal Cal_2_n_sig : STD_LOGIC;
|
---|
338 | signal Cal_3_p_sig : STD_LOGIC;
|
---|
339 | signal Cal_3_n_sig : STD_LOGIC;
|
---|
340 | signal Cal_4_p_sig : STD_LOGIC;
|
---|
341 | signal Cal_4_n_sig : STD_LOGIC;
|
---|
342 | signal Cal_5_p_sig : STD_LOGIC;
|
---|
343 | signal Cal_5_n_sig : STD_LOGIC;
|
---|
344 | signal Cal_6_p_sig : STD_LOGIC;
|
---|
345 | signal Cal_6_n_sig : STD_LOGIC;
|
---|
346 | signal Cal_7_p_sig : STD_LOGIC;
|
---|
347 | signal Cal_7_n_sig : STD_LOGIC;
|
---|
348 |
|
---|
349 | -- Clock period definitions
|
---|
350 | constant clk_period : TIME := 25 ns; -- 40 MHZ oscillator U47
|
---|
351 | --constant baud_rate_period : TIME := 4 us; -- 250 kHz baud rate
|
---|
352 | constant baud_rate_period : TIME := 100 ns; -- 10 MHz baud rate
|
---|
353 |
|
---|
354 | begin
|
---|
355 |
|
---|
356 | -- Instantiate the Unit Under Test (UUT)
|
---|
357 | uut: FTM_top
|
---|
358 | port map(
|
---|
359 | clk => clk_sig,
|
---|
360 | W_D => W_D_sig,
|
---|
361 | W_A => W_A_sig,
|
---|
362 | W_CS => W_CS_sig,
|
---|
363 | W_INT => W_INT_sig,
|
---|
364 | W_RD => W_RD_sig,
|
---|
365 | W_WR => W_WR_sig,
|
---|
366 | W_RES => W_RES_sig,
|
---|
367 | -- W_BRDY => W_BRDY_sig,
|
---|
368 | -- W_T => W_T_sig,
|
---|
369 | -- S_CLK => S_CLK_sig,
|
---|
370 | -- SIO => SIO_sig,
|
---|
371 | -- TS_CS => TS_CS_sig,
|
---|
372 | Trig_Prim_A => Trig_Prim_A_sig,
|
---|
373 | Trig_Prim_B => Trig_Prim_B_sig,
|
---|
374 | Trig_Prim_C => Trig_Prim_C_sig,
|
---|
375 | Trig_Prim_D => Trig_Prim_D_sig,
|
---|
376 | ext_Trig => ext_Trig_sig,
|
---|
377 | Veto => Veto_sig,
|
---|
378 | -- NIM_In => NIM_In_sig,
|
---|
379 | -- NIM_In3_GCLK => NIM_In3_GCLK_sig,
|
---|
380 | LED_red => LED_red_sig,
|
---|
381 | LED_ye => LED_ye_sig,
|
---|
382 | LED_gn => LED_gn_sig,
|
---|
383 | CLK_Clk_Cond => CLK_Clk_Cond_sig,
|
---|
384 | LE_Clk_Cond => LE_Clk_Cond_sig,
|
---|
385 | DATA_Clk_Cond => DATA_Clk_Cond_sig,
|
---|
386 | SYNC_Clk_Cond => SYNC_Clk_Cond_sig,
|
---|
387 | LD_Clk_Cond => LD_Clk_Cond_sig,
|
---|
388 | Bus1_Tx_En => Bus1_Tx_En_sig,
|
---|
389 | Bus1_Rx_En => Bus1_Rx_En_sig,
|
---|
390 | Bus1_RxD_0 => Bus1_RxD_0_sig,
|
---|
391 | Bus1_TxD_0 => Bus1_TxD_0_sig,
|
---|
392 | Bus1_RxD_1 => Bus1_RxD_1_sig,
|
---|
393 | Bus1_TxD_1 => Bus1_TxD_1_sig,
|
---|
394 | Bus1_RxD_2 => Bus1_RxD_2_sig,
|
---|
395 | Bus1_TxD_2 => Bus1_TxD_2_sig,
|
---|
396 | Bus1_RxD_3 => Bus1_RxD_3_sig,
|
---|
397 | Bus1_TxD_3 => Bus1_TxD_3_sig,
|
---|
398 | Bus2_Tx_En => Bus2_Tx_En_sig,
|
---|
399 | Bus2_Rx_En => Bus2_Rx_En_sig,
|
---|
400 | Bus2_RxD_0 => Bus2_RxD_0_sig,
|
---|
401 | Bus2_TxD_0 => Bus2_TxD_0_sig,
|
---|
402 | Bus2_RxD_1 => Bus2_RxD_1_sig,
|
---|
403 | Bus2_TxD_1 => Bus2_TxD_1_sig,
|
---|
404 | Bus2_RxD_2 => Bus2_RxD_2_sig,
|
---|
405 | Bus2_TxD_2 => Bus2_TxD_2_sig,
|
---|
406 | Bus2_RxD_3 => Bus2_RxD_3_sig,
|
---|
407 | Bus2_TxD_3 => Bus2_TxD_3_sig,
|
---|
408 | Crate_Res0 => Crate_Res0_sig,
|
---|
409 | Crate_Res1 => Crate_Res1_sig,
|
---|
410 | Crate_Res2 => Crate_Res2_sig,
|
---|
411 | Crate_Res3 => Crate_Res3_sig,
|
---|
412 | Busy0 => Busy0_sig,
|
---|
413 | Busy1 => Busy1_sig,
|
---|
414 | Busy2 => Busy2_sig,
|
---|
415 | Busy3 => Busy3_sig,
|
---|
416 | -- RES_p => RES_p_sig,
|
---|
417 | -- RES_n => RES_n_sig,
|
---|
418 | TRG_p => TRG_p_sig,
|
---|
419 | TRG_n => TRG_n_sig,
|
---|
420 | TIM_Run_p => TIM_Run_p_sig,
|
---|
421 | TIM_Run_n => TIM_Run_n_sig,
|
---|
422 | -- TIM_Sel => TIM_Sel_sig,
|
---|
423 | -- Cal_0_p => Cal_0_p_sig,
|
---|
424 | -- Cal_0_n => Cal_0_n_sig,
|
---|
425 | -- Cal_1_p => Cal_1_p_sig,
|
---|
426 | -- Cal_1_n => Cal_1_n_sig,
|
---|
427 | -- Cal_2_p => Cal_2_p_sig,
|
---|
428 | -- Cal_2_n => Cal_2_n_sig,
|
---|
429 | -- Cal_3_p => Cal_3_p_sig,
|
---|
430 | -- Cal_3_n => Cal_3_n_sig,
|
---|
431 | -- Cal_4_p => Cal_4_p_sig,
|
---|
432 | -- Cal_4_n => Cal_4_n_sig,
|
---|
433 | -- Cal_5_p => Cal_5_p_sig,
|
---|
434 | -- Cal_5_n => Cal_5_n_sig,
|
---|
435 | -- Cal_6_p => Cal_6_p_sig,
|
---|
436 | -- Cal_6_n => Cal_6_n_sig,
|
---|
437 | -- Cal_7_p => Cal_7_p_sig,
|
---|
438 | -- Cal_7_n => Cal_7_n_sig,
|
---|
439 | TP => TP_sig
|
---|
440 | );
|
---|
441 |
|
---|
442 | -- Stimulus process for clock
|
---|
443 | clk_proc: process
|
---|
444 | begin
|
---|
445 | clk_sig <= '0';
|
---|
446 | wait for clk_period/2;
|
---|
447 | clk_sig <= '1';
|
---|
448 | wait for clk_period/2;
|
---|
449 | end process clk_proc;
|
---|
450 |
|
---|
451 | -- Stimulus process for busy signals
|
---|
452 | busy_proc: process
|
---|
453 | begin
|
---|
454 | wait for 500us;
|
---|
455 | Busy0_sig <= '1';
|
---|
456 | wait for 100us;
|
---|
457 | Busy0_sig <= '0';
|
---|
458 | -- wait for 1ms;
|
---|
459 | -- Busy0_sig <= '1';
|
---|
460 | -- wait for 500us;
|
---|
461 | -- Busy0_sig <= '0';
|
---|
462 | wait;
|
---|
463 | end process busy_proc;
|
---|
464 |
|
---|
465 | -- Stimulus process for trigger
|
---|
466 | trigger_proc: process
|
---|
467 | begin
|
---|
468 | ---------------------------------------------------------------------------
|
---|
469 | -- FTUs not yet initialized
|
---|
470 | ---------------------------------------------------------------------------
|
---|
471 | wait for 10us;
|
---|
472 | Trig_Prim_A_sig(0) <= '1';
|
---|
473 | wait for 100ns;
|
---|
474 | Trig_Prim_A_sig(0) <= '0';
|
---|
475 | wait for 99us;
|
---|
476 | Trig_Prim_B_sig(0) <= '1';
|
---|
477 | wait for 100ns;
|
---|
478 | Trig_Prim_B_sig(0) <= '0';
|
---|
479 | wait for 1us;
|
---|
480 | Trig_Prim_B_sig(0) <= '1';
|
---|
481 | wait for 100ns;
|
---|
482 | Trig_Prim_B_sig(0) <= '0';
|
---|
483 | ---------------------------------------------------------------------------
|
---|
484 | -- now FTUs are initialized
|
---|
485 | ---------------------------------------------------------------------------
|
---|
486 | wait for 2200us;
|
---|
487 | Trig_Prim_A_sig(0) <= '1';
|
---|
488 | Trig_Prim_B_sig(0) <= '1';
|
---|
489 | wait for 100ns;
|
---|
490 | Trig_Prim_A_sig(0) <= '0';
|
---|
491 | Trig_Prim_B_sig(0) <= '0';
|
---|
492 | wait for 4us;
|
---|
493 | Trig_Prim_A_sig(0) <= '1';
|
---|
494 | wait for 100ns;
|
---|
495 | Trig_Prim_A_sig(0) <= '0';
|
---|
496 | wait for 22us;
|
---|
497 | Trig_Prim_B_sig(0) <= '1';
|
---|
498 | wait for 100ns;
|
---|
499 | Trig_Prim_B_sig(0) <= '0';
|
---|
500 | wait;
|
---|
501 | end process trigger_proc;
|
---|
502 |
|
---|
503 | -- Stimulus process for RS485 of crate 0
|
---|
504 | rs485_0_proc: process
|
---|
505 |
|
---|
506 | procedure assign_rs485_0 (data: std_logic_vector(7 downto 0)) is
|
---|
507 | begin
|
---|
508 | Bus1_RxD_0_sig <= '0'; --start bit
|
---|
509 | wait for baud_rate_period;
|
---|
510 | Bus1_RxD_0_sig <= data(0); --bit 0
|
---|
511 | wait for baud_rate_period;
|
---|
512 | Bus1_RxD_0_sig <= data(1); --bit 1
|
---|
513 | wait for baud_rate_period;
|
---|
514 | Bus1_RxD_0_sig <= data(2); --bit 2
|
---|
515 | wait for baud_rate_period;
|
---|
516 | Bus1_RxD_0_sig <= data(3); --bit 3
|
---|
517 | wait for baud_rate_period;
|
---|
518 | Bus1_RxD_0_sig <= data(4); --bit 4
|
---|
519 | wait for baud_rate_period;
|
---|
520 | Bus1_RxD_0_sig <= data(5); --bit 5
|
---|
521 | wait for baud_rate_period;
|
---|
522 | Bus1_RxD_0_sig <= data(6); --bit 6
|
---|
523 | wait for baud_rate_period;
|
---|
524 | Bus1_RxD_0_sig <= data(7); --bit 7
|
---|
525 | wait for baud_rate_period;
|
---|
526 | Bus1_RxD_0_sig <= '1'; --stop bit
|
---|
527 | wait for baud_rate_period;
|
---|
528 | Bus1_RxD_0_sig <= '1'; --stop bit
|
---|
529 | wait for baud_rate_period;
|
---|
530 | end assign_rs485_0;
|
---|
531 |
|
---|
532 | begin
|
---|
533 | ---------------------------------------------------------------------------
|
---|
534 | -- time of FTU answer
|
---|
535 | ---------------------------------------------------------------------------
|
---|
536 | wait for 1.24ms;
|
---|
537 | ---------------------------------------------------------------------------
|
---|
538 | -- data package of FTU answer (28 byte)
|
---|
539 | ---------------------------------------------------------------------------
|
---|
540 | assign_rs485_0(X"40"); --start delimiter
|
---|
541 | wait for 0us;
|
---|
542 | assign_rs485_0(X"C0"); --FTM address
|
---|
543 | wait for 0ns;
|
---|
544 | assign_rs485_0(X"00"); --FTU address
|
---|
545 | wait for 0ns;
|
---|
546 | assign_rs485_0(X"01"); --FTM firmware ID
|
---|
547 | wait for 0ns;
|
---|
548 | assign_rs485_0(X"02"); --instruction
|
---|
549 | wait for 0us;
|
---|
550 | assign_rs485_0(X"00"); --data byte 01
|
---|
551 | wait for 0ns;
|
---|
552 | assign_rs485_0(X"F0"); --data byte 02
|
---|
553 | wait for 0ns;
|
---|
554 | assign_rs485_0(X"00"); --data byte 03
|
---|
555 | wait for 0ns;
|
---|
556 | assign_rs485_0(X"00"); --data byte 04
|
---|
557 | wait for 0ns;
|
---|
558 | assign_rs485_0(X"00"); --data byte 05
|
---|
559 | wait for 0ns;
|
---|
560 | assign_rs485_0(X"00"); --data byte 06
|
---|
561 | wait for 0ns;
|
---|
562 | assign_rs485_0(X"00"); --data byte 07
|
---|
563 | wait for 0ns;
|
---|
564 | assign_rs485_0(X"00"); --data byte 08
|
---|
565 | wait for 0ns;
|
---|
566 | assign_rs485_0(X"00"); --data byte 09
|
---|
567 | wait for 0ns;
|
---|
568 | assign_rs485_0(X"00"); --data byte 10
|
---|
569 | wait for 0ns;
|
---|
570 | assign_rs485_0(X"00"); --data byte 11
|
---|
571 | wait for 0ns;
|
---|
572 | assign_rs485_0(X"00"); --data byte 12
|
---|
573 | wait for 0ns;
|
---|
574 | assign_rs485_0(X"00"); --data byte 13
|
---|
575 | wait for 0ns;
|
---|
576 | assign_rs485_0(X"00"); --data byte 14
|
---|
577 | wait for 0ns;
|
---|
578 | assign_rs485_0(X"00"); --data byte 15
|
---|
579 | wait for 0ns;
|
---|
580 | assign_rs485_0(X"00"); --data byte 16
|
---|
581 | wait for 0ns;
|
---|
582 | assign_rs485_0(X"00"); --data byte 17
|
---|
583 | wait for 0ns;
|
---|
584 | assign_rs485_0(X"00"); --data byte 18
|
---|
585 | wait for 0ns;
|
---|
586 | assign_rs485_0(X"00"); --data byte 19
|
---|
587 | wait for 0ns;
|
---|
588 | assign_rs485_0(X"00"); --data byte 20
|
---|
589 | wait for 0ns;
|
---|
590 | assign_rs485_0(X"00"); --data byte 21
|
---|
591 | wait for 0ns;
|
---|
592 | assign_rs485_0(X"00"); --CRC error counter (not used)
|
---|
593 | wait for 0ns;
|
---|
594 | assign_rs485_0(X"98"); --check sum for rates
|
---|
595 | --assign_rs485_0(X"A5"); --check sum for ping
|
---|
596 | ---------------------------------------------------------------------------
|
---|
597 | -- don't forget final wait!
|
---|
598 | ---------------------------------------------------------------------------
|
---|
599 | wait;
|
---|
600 |
|
---|
601 | end process rs485_0_proc;
|
---|
602 |
|
---|
603 | end;
|
---|