source: firmware/FTM/FTM_top_tb.vhd @ 10127

Last change on this file since 10127 was 10127, checked in by weitzel, 10 years ago
ftm library file added and small bug fix in FTM test bench
File size: 16.6 KB
Line 
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--------------------------------------------------------------------------------
28library IEEE;
29use IEEE.STD_LOGIC_1164.ALL;
30use IEEE.STD_LOGIC_UNSIGNED.ALL;
31use IEEE.NUMERIC_STD.ALL;
32
33library UNISIM;
34use UNISIM.VComponents.all;
35
36entity FTM_top_tb is
37end FTM_top_tb;
38
39architecture 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 1); -- there is NO net W_A0 because
56                                               -- the W5300 is operated in the
57                                               -- 16-bit mode
58
59      -- W5300 control signals
60      -- the signals W_INT, W_RD, W_WR and W_RES also go to testpoints T17
61      -- W_CS is also routed to testpoint JP7
62      W_CS   : out  STD_LOGIC;                      -- W5300 chip select
63      W_INT  : IN   STD_LOGIC;                      -- interrupt
64      W_RD   : out  STD_LOGIC;                      -- read
65      W_WR   : out  STD_LOGIC;                      -- write
66      W_RES  : out  STD_LOGIC;                      -- reset W5300 chip
67
68      -- W5300 buffer ready indicator
69      W_BRDY : in STD_LOGIC_VECTOR(3 downto 0); 
70
71      -- testpoints (T18) associated with the W5300
72      W_T    : inout STD_LOGIC_VECTOR(3 downto 0); 
73 
74
75      -- SPI Interface
76      -- connection to the EEPROM U36 (AL25L016M) and
77      -- temperature sensors U45, U46, U48 and U49 (all MAX6662)
78      -------------------------------------------------------------------------------
79      S_CLK  : out  STD_LOGIC;     -- SPI clock
80
81      -- EEPROM
82      --   MOSI   : out  STD_LOGIC;     -- master out slave in
83      --   MISO   : in   STD_LOGIC;     -- master in slave out
84      --   EE_CS  : out  STD_LOGIC;     -- EEPROM chip select
85
86      -- temperature sensors U45, U46, U48 and U49
87      SIO    : inout  STD_LOGIC;          -- serial IO
88      TS_CS  : out STD_LOGIC_VECTOR(3 downto 0);     -- temperature sensors chip select
89
90 
91      -- Trigger primitives inputs
92      -------------------------------------------------------------------------------
93      Trig_Prim_A  : in STD_LOGIC_VECTOR(9 downto 0);  -- crate 0
94      Trig_Prim_B  : in STD_LOGIC_VECTOR(9 downto 0);  -- crate 1
95      Trig_Prim_C  : in STD_LOGIC_VECTOR(9 downto 0);  -- crate 2
96      Trig_Prim_D  : in STD_LOGIC_VECTOR(9 downto 0);  -- crate 3
97
98 
99      -- NIM inputs
100      ------------------------------------------------------------------------------
101      ext_Trig  : in  STD_LOGIC_VECTOR(2 downto 1);      -- external trigger input
102      Veto      : in  STD_LOGIC;                         -- trigger veto input
103      NIM_In    : in  STD_LOGIC_VECTOR(2 downto 0);      -- auxiliary inputs
104
105      -- alternative external clock input for FPGA
106      NIM_In3_GCLK  : in  STD_LOGIC;      -- input with global clock buffer available
107
108   
109      -- LEDs
110      -------------------------------------------------------------------------------
111      LED_red  : out STD_LOGIC_VECTOR(3 downto 0);    -- red
112      LED_ye   : out STD_LOGIC_VECTOR(1 downto 0);    -- yellow
113      LED_gn   : out STD_LOGIC_VECTOR(1 downto 0);    -- green
114
115   
116      -- Clock conditioner LMK03000
117      -------------------------------------------------------------------------------
118      CLK_Clk_Cond  : out STD_LOGIC;  -- MICROWIRE interface serial clock
119      LE_Clk_Cond   : out STD_LOGIC;  -- MICROWIRE interface latch enable   
120      DATA_Clk_Cond : out STD_LOGIC;  -- MICROWIRE interface data
121   
122      SYNC_Clk_Cond : out STD_LOGIC;  -- global clock synchronization
123      LD_Clk_Cond   : in STD_LOGIC;   -- lock detect, should be checked for                 
124
125   
126      -- various RS-485 Interfaces
127      -------------------------------------------------------------------------------
128      -- Bus 1: FTU slow control   
129      Bus1_Tx_En    : out STD_LOGIC;  -- bus 1: transmitter enable                                 
130      Bus1_Rx_En    : out STD_LOGIC;  -- bus 1: receiver enable
131
132      Bus1_RxD_0    : in STD_LOGIC;   -- crate 0
133      Bus1_TxD_0    : out STD_LOGIC;
134
135      Bus1_RxD_1    : in STD_LOGIC;   -- crate 1
136      Bus1_TxD_1    : out STD_LOGIC;
137
138      Bus1_RxD_2    : in STD_LOGIC;   -- crate 2
139      Bus1_TxD_2    : out STD_LOGIC;
140
141      Bus1_RxD_3    : in STD_LOGIC;   -- crate 3
142      Bus1_TxD_3    : out STD_LOGIC; 
143
144
145      -- Bus 2: Trigger-ID to FAD boards
146      Bus2_Tx_En    : out STD_LOGIC;  -- bus 2: transmitter enable                                 
147      Bus2_Rx_En    : out STD_LOGIC;  -- bus 2: receiver enable
148
149      Bus2_RxD_0    : in STD_LOGIC;   -- crate 0
150      Bus2_TxD_0    : out STD_LOGIC;
151
152      Bus2_RxD_1    : in STD_LOGIC;   -- crate 1
153      Bus2_TxD_1    : out STD_LOGIC;
154
155      Bus2_RxD_2    : in STD_LOGIC;   -- crate 2
156      Bus2_TxD_2    : out STD_LOGIC;
157
158      Bus2_RxD_3    : in STD_LOGIC;   -- crate 3
159      Bus2_TxD_3    : out STD_LOGIC; 
160   
161
162      -- auxiliary access
163      --   Aux_Rx_D      : in STD_LOGIC;
164      --   Aux_Tx_D      : out STD_LOGIC;
165      --   Aux_Rx_En     : out STD_LOGIC;   --   Rx- and Tx enable
166      --   Aux_Tx_En     : out STD_LOGIC;   --   also for auxiliary Trigger-ID
167                                                                 
168
169      -- auxiliary Trigger-ID (i.e. to send the Trigger-ID to the counting hut/house/container)
170      --   TrID_Rx_D     : in STD_LOGIC;
171      --   TrID_Tx_D     : out STD_LOGIC;
172
173
174      -- Crate-Resets
175      -------------------------------------------------------------------------------
176      Crate_Res0   : out STD_LOGIC;
177      Crate_Res1   : out STD_LOGIC;
178      Crate_Res2   : out STD_LOGIC;
179      Crate_Res3   : out STD_LOGIC;
180
181
182      -- Busy signals from the FAD boards
183      -------------------------------------------------------------------------------
184      Busy0     : in STD_LOGIC;
185      Busy1     : in STD_LOGIC;
186      Busy2     : in STD_LOGIC;
187      Busy3     : in STD_LOGIC;
188
189
190      -- NIM outputs
191      -- LVDS output at the FPGA followed by LVDS to NIM conversion stage
192      -------------------------------------------------------------------------------
193      -- calibration
194      --   Cal_NIM1_p  : out STD_LOGIC;     --  Cal_NIM1+
195      --   Cal_NIM1_n  : out STD_LOGIC;     --  Cal_NIM1-
196      --   Cal_NIM2_p  : out STD_LOGIC;     --  Cal_NIM2+ 
197      --   Cal_NIM2_n  : out STD_LOGIC;     --  Cal_NIM2-
198
199      -- auxiliarry / spare NIM outputs
200      --   NIM_Out0_p  : out STD_LOGIC;   -- NIM_Out0+
201      --   NIM_Out0_n  : out STD_LOGIC;   -- NIM_Out0-
202      --   NIM_Out1_p  : out STD_LOGIC;   -- NIM_Out1+
203      --   NIM_Out1_n  : out STD_LOGIC;   -- NIM_Out1-
204
205 
206      -- fast control signal outputs
207      -- LVDS output at the FPGA followed by LVDS to NIM conversion stage
208      -------------------------------------------------------------------------------
209      RES_p      : out STD_LOGIC;   --  RES+   Reset
210      RES_n      : out STD_LOGIC;   --  RES-
211
212      TRG_p      : out STD_LOGIC;   -- TRG+  Trigger
213      TRG_n      : out STD_LOGIC;   -- TRG-
214
215      TIM_Run_p  : out STD_LOGIC;   -- TIM_Run+  Time Marker
216      TIM_Run_n  : out STD_LOGIC;   -- TIM_Run-
217      TIM_Sel    : out STD_LOGIC;   -- Time Marker selector
218                                                   
219      -- CLD_FPGA   : in STD_LOGIC;    -- DRS-Clock feedback into FPGA
220
221
222      -- LVDS calibration outputs
223      -------------------------------------------------------------------------------
224      -- to connector J13
225      -- for light pulsar in the mirror dish
226      Cal_0_p    : out STD_LOGIC; 
227      Cal_0_n    : out STD_LOGIC;
228      Cal_1_p    : out STD_LOGIC;
229      Cal_1_n    : out STD_LOGIC;
230      Cal_2_p    : out STD_LOGIC;
231      Cal_2_n    : out STD_LOGIC;
232      Cal_3_p    : out STD_LOGIC;
233      Cal_3_n    : out STD_LOGIC;
234
235      -- to connector J12
236      -- for light pulsar inside shutter
237      Cal_4_p    : out STD_LOGIC;
238      Cal_4_n    : out STD_LOGIC;
239      Cal_5_p    : out STD_LOGIC;
240      Cal_5_n    : out STD_LOGIC;
241      Cal_6_p    : out STD_LOGIC;
242      Cal_6_n    : out STD_LOGIC; 
243      Cal_7_p    : out STD_LOGIC;
244      Cal_7_n    : out STD_LOGIC 
245
246
247      -- Testpoints
248      -------------------------------------------------------------------------------
249      --   TP    : inout STD_LOGIC_VECTOR(32 downto 0);
250      --   TP_in    : in STD_LOGIC_VECTOR(34 downto 33);    -- input only
251
252      -- Board ID - inputs
253      -- local board-ID "solder programmable"
254      -- all on 'input only' pins
255      -------------------------------------------------------------------------------
256      -- brd_id : in STD_LOGIC_VECTOR(7 downto 0)    -- input only                 
257
258    );
259  end component;
260   
261  --Inputs
262  signal clk_sig          : STD_LOGIC := '0';
263  signal W_INT_sig        : STD_LOGIC := '0';
264  signal W_BRDY_sig       : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
265  signal Trig_Prim_A_sig  : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
266  signal Trig_Prim_B_sig  : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
267  signal Trig_Prim_C_sig  : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
268  signal Trig_Prim_D_sig  : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
269  signal ext_Trig_sig     : STD_LOGIC_VECTOR(2 downto 1) := (others => '0');
270  signal Veto_sig         : STD_LOGIC := '0';
271  signal NIM_In_sig       : STD_LOGIC_VECTOR(2 downto 0) := (others => '0');
272  signal NIM_In3_GCLK_sig : STD_LOGIC := '0';
273  signal LD_Clk_Cond_sig  : STD_LOGIC := '1';
274  signal Bus1_RxD_0_sig   : STD_LOGIC := '1';
275  signal Bus1_RxD_1_sig   : STD_LOGIC := '1';
276  signal Bus1_RxD_2_sig   : STD_LOGIC := '1';
277  signal Bus1_RxD_3_sig   : STD_LOGIC := '1';
278  signal Bus2_RxD_0_sig   : STD_LOGIC := '1';
279  signal Bus2_RxD_1_sig   : STD_LOGIC := '1';
280  signal Bus2_RxD_2_sig   : STD_LOGIC := '1';
281  signal Bus2_RxD_3_sig   : STD_LOGIC := '1';
282  signal Busy0_sig        : STD_LOGIC := '0';
283  signal Busy1_sig        : STD_LOGIC := '0';
284  signal Busy2_sig        : STD_LOGIC := '0';
285  signal Busy3_sig        : STD_LOGIC := '0';
286
287  --Input/Output Pins
288  signal W_D_sig : STD_LOGIC_VECTOR(15 downto 0) := (others => '0');
289  signal W_T_sig : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
290  signal SIO_sig : STD_LOGIC := '0';
291 
292  --Outputs
293  signal W_A_sig           : STD_LOGIC_VECTOR(9 downto 1);
294  signal W_CS_sig          : STD_LOGIC;
295  signal W_RD_sig          : STD_LOGIC;
296  signal W_WR_sig          : STD_LOGIC;
297  signal W_RES_sig         : STD_LOGIC;
298  signal S_CLK_sig         : STD_LOGIC;
299  signal TS_CS_sig         : STD_LOGIC_VECTOR(3 downto 0); 
300  signal LED_red_sig       : STD_LOGIC_VECTOR(3 downto 0);
301  signal LED_ye_sig        : STD_LOGIC_VECTOR(1 downto 0);
302  signal LED_gn_sig        : STD_LOGIC_VECTOR(1 downto 0);
303  signal CLK_Clk_Cond_sig  : STD_LOGIC;
304  signal LE_Clk_Cond_sig   : STD_LOGIC;
305  signal DATA_Clk_Cond_sig : STD_LOGIC;
306  signal SYNC_Clk_Cond_sig : STD_LOGIC;
307  signal Bus1_Tx_En_sig    : STD_LOGIC;
308  signal Bus1_Rx_En_sig    : STD_LOGIC;
309  signal Bus1_TxD_0_sig    : STD_LOGIC;
310  signal Bus1_TxD_1_sig    : STD_LOGIC;
311  signal Bus1_TxD_2_sig    : STD_LOGIC;
312  signal Bus1_TxD_3_sig    : STD_LOGIC;
313  signal Bus2_Tx_En_sig    : STD_LOGIC;
314  signal Bus2_Rx_En_sig    : STD_LOGIC;
315  signal Bus2_TxD_0_sig    : STD_LOGIC;
316  signal Bus2_TxD_1_sig    : STD_LOGIC;
317  signal Bus2_TxD_2_sig    : STD_LOGIC;
318  signal Bus2_TxD_3_sig    : STD_LOGIC;
319  signal Crate_Res0_sig    : STD_LOGIC;
320  signal Crate_Res1_sig    : STD_LOGIC;
321  signal Crate_Res2_sig    : STD_LOGIC;
322  signal Crate_Res3_sig    : STD_LOGIC;
323  signal RES_p_sig         : STD_LOGIC;
324  signal RES_n_sig         : STD_LOGIC;
325  signal TRG_p_sig         : STD_LOGIC;
326  signal TRG_n_sig         : STD_LOGIC;
327  signal TIM_Run_p_sig     : STD_LOGIC;
328  signal TIM_Run_n_sig     : STD_LOGIC;
329  signal TIM_Sel_sig       : STD_LOGIC;
330  signal Cal_0_p_sig       : STD_LOGIC;
331  signal Cal_0_n_sig       : STD_LOGIC;
332  signal Cal_1_p_sig       : STD_LOGIC;
333  signal Cal_1_n_sig       : STD_LOGIC;
334  signal Cal_2_p_sig       : STD_LOGIC;
335  signal Cal_2_n_sig       : STD_LOGIC;
336  signal Cal_3_p_sig       : STD_LOGIC;
337  signal Cal_3_n_sig       : STD_LOGIC;
338  signal Cal_4_p_sig       : STD_LOGIC;
339  signal Cal_4_n_sig       : STD_LOGIC;
340  signal Cal_5_p_sig       : STD_LOGIC;
341  signal Cal_5_n_sig       : STD_LOGIC;
342  signal Cal_6_p_sig       : STD_LOGIC;
343  signal Cal_6_n_sig       : STD_LOGIC;
344  signal Cal_7_p_sig       : STD_LOGIC;
345  signal Cal_7_n_sig       : STD_LOGIC;
346
347  -- Clock period definitions
348  constant clk_period : TIME := 25 ns; -- 40 MHZ oscillator U47
349 
350begin
351 
352  -- Instantiate the Unit Under Test (UUT)
353  uut: FTM_top
354    port map(     
355      clk           => clk_sig,
356      W_D           => W_D_sig,
357      W_A           => W_A_sig,
358      W_CS          => W_CS_sig,
359      W_INT         => W_INT_sig,
360      W_RD          => W_RD_sig,
361      W_WR          => W_WR_sig,
362      W_RES         => W_RES_sig,
363      W_BRDY        => W_BRDY_sig, 
364      W_T           => W_T_sig, 
365      S_CLK         => S_CLK_sig,
366      SIO           => SIO_sig,
367      TS_CS         => TS_CS_sig,
368      Trig_Prim_A   => Trig_Prim_A_sig,
369      Trig_Prim_B   => Trig_Prim_B_sig,
370      Trig_Prim_C   => Trig_Prim_C_sig,
371      Trig_Prim_D   => Trig_Prim_D_sig,
372      ext_Trig      => ext_Trig_sig,
373      Veto          => Veto_sig, 
374      NIM_In        => NIM_In_sig, 
375      NIM_In3_GCLK  => NIM_In3_GCLK_sig, 
376      LED_red       => LED_red_sig,
377      LED_ye        => LED_ye_sig,
378      LED_gn        => LED_gn_sig,
379      CLK_Clk_Cond  => CLK_Clk_Cond_sig,
380      LE_Clk_Cond   => LE_Clk_Cond_sig,
381      DATA_Clk_Cond => DATA_Clk_Cond_sig,
382      SYNC_Clk_Cond => SYNC_Clk_Cond_sig,
383      LD_Clk_Cond   => LD_Clk_Cond_sig,               
384      Bus1_Tx_En    => Bus1_Tx_En_sig,                               
385      Bus1_Rx_En    => Bus1_Rx_En_sig,
386      Bus1_RxD_0    => Bus1_RxD_0_sig,
387      Bus1_TxD_0    => Bus1_TxD_0_sig,
388      Bus1_RxD_1    => Bus1_RxD_1_sig,
389      Bus1_TxD_1    => Bus1_TxD_1_sig,
390      Bus1_RxD_2    => Bus1_RxD_2_sig,
391      Bus1_TxD_2    => Bus1_TxD_2_sig,
392      Bus1_RxD_3    => Bus1_RxD_3_sig,
393      Bus1_TxD_3    => Bus1_TxD_3_sig, 
394      Bus2_Tx_En    => Bus2_Tx_En_sig,                               
395      Bus2_Rx_En    => Bus2_Rx_En_sig,
396      Bus2_RxD_0    => Bus2_RxD_0_sig,
397      Bus2_TxD_0    => Bus2_TxD_0_sig,
398      Bus2_RxD_1    => Bus2_RxD_1_sig,
399      Bus2_TxD_1    => Bus2_TxD_1_sig,
400      Bus2_RxD_2    => Bus2_RxD_2_sig,
401      Bus2_TxD_2    => Bus2_TxD_2_sig,
402      Bus2_RxD_3    => Bus2_RxD_3_sig,
403      Bus2_TxD_3    => Bus2_TxD_3_sig,
404      Crate_Res0    => Crate_Res0_sig,
405      Crate_Res1    => Crate_Res1_sig,
406      Crate_Res2    => Crate_Res2_sig,
407      Crate_Res3    => Crate_Res3_sig,
408      Busy0         => Busy0_sig,
409      Busy1         => Busy1_sig,
410      Busy2         => Busy2_sig,
411      Busy3         => Busy3_sig,
412      RES_p         => RES_p_sig,
413      RES_n         => RES_n_sig,
414      TRG_p         => TRG_p_sig,
415      TRG_n         => TRG_n_sig,
416      TIM_Run_p     => TIM_Run_p_sig,
417      TIM_Run_n     => TIM_Run_n_sig,
418      TIM_Sel       => TIM_Sel_sig,
419      Cal_0_p       => Cal_0_p_sig, 
420      Cal_0_n       => Cal_0_n_sig,
421      Cal_1_p       => Cal_1_p_sig,
422      Cal_1_n       => Cal_1_n_sig,
423      Cal_2_p       => Cal_2_p_sig,
424      Cal_2_n       => Cal_2_n_sig,
425      Cal_3_p       => Cal_3_p_sig,
426      Cal_3_n       => Cal_3_n_sig,
427      Cal_4_p       => Cal_4_p_sig,
428      Cal_4_n       => Cal_4_n_sig,
429      Cal_5_p       => Cal_5_p_sig,
430      Cal_5_n       => Cal_5_n_sig,
431      Cal_6_p       => Cal_6_p_sig,
432      Cal_6_n       => Cal_6_n_sig, 
433      Cal_7_p       => Cal_7_p_sig,
434      Cal_7_n       => Cal_7_n_sig 
435    );
436
437  -- Stimulus process for clock
438  clk_proc: process
439  begin
440    clk_sig <= '0';
441    wait for clk_period/2;
442    clk_sig <= '1';
443    wait for clk_period/2;
444  end process clk_proc;
445 
446end;
Note: See TracBrowser for help on using the repository browser.