source: firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/fad_main_struct.vhd @ 10176

Last change on this file since 10176 was 10176, checked in by neise, 9 years ago
File size: 44.7 KB
Line 
1-- VHDL Entity FACT_FAD_lib.FAD_main.symbol
2--
3-- Created:
4--          by - dneise.UNKNOWN (E5B-LABOR6)
5--          at - 15:55:13 24.02.2011
6--
7-- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
8--
9LIBRARY ieee;
10USE ieee.std_logic_1164.all;
11USE ieee.std_logic_arith.all;
12LIBRARY FACT_FAD_lib;
13USE FACT_FAD_lib.fad_definitions.all;
14
15ENTITY FAD_main IS
16   GENERIC( 
17      RAMADDRWIDTH64b : integer := 12
18   );
19   PORT( 
20      CLK                    : IN     std_logic;
21      D_T_in                 : IN     std_logic_vector (1 DOWNTO 0);
22      SROUT_in_0             : IN     std_logic;
23      SROUT_in_1             : IN     std_logic;
24      SROUT_in_2             : IN     std_logic;
25      SROUT_in_3             : IN     std_logic;
26      adc_data_array         : IN     adc_data_array_type;
27      adc_otr_array          : IN     std_logic_vector (3 DOWNTO 0);
28      board_id               : IN     std_logic_vector (3 DOWNTO 0);
29      crate_id               : IN     std_logic_vector (1 DOWNTO 0);
30      drs_refclk_in          : IN     std_logic;                                         -- used to check if DRS REFCLK exsists, if not DENABLE inhibit
31      plllock_in             : IN     std_logic_vector (3 DOWNTO 0);                     -- high level, if dominowave is running and DRS PLL locked
32      trigger                : IN     std_logic;
33      wiz_int                : IN     std_logic;
34      CLK_25_PS              : OUT    std_logic;
35      CLK_50                 : OUT    std_logic;
36      RSRLOAD                : OUT    std_logic                     := '0';
37      SRCLK                  : OUT    std_logic                     := '0';
38      SRIN_out               : OUT    std_logic                     := '0';
39      adc_clk_en             : OUT    std_logic                     := '0';
40      adc_oeb                : OUT    std_logic                     := '1';
41      additional_flasher_out : OUT    std_logic;
42      alarm_refclk_too_high  : OUT    std_logic;
43      alarm_refclk_too_low   : OUT    std_logic;
44      amber                  : OUT    std_logic;
45      counter_result         : OUT    std_logic_vector (11 DOWNTO 0);
46      dac_cs                 : OUT    std_logic;
47      denable                : OUT    std_logic                     := '0';              -- default domino wave off
48      drs_channel_id         : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
49      drs_dwrite             : OUT    std_logic                     := '1';
50      green                  : OUT    std_logic;
51      led                    : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
52      mosi                   : OUT    std_logic                     := '0';
53      red                    : OUT    std_logic;
54      sclk                   : OUT    std_logic;
55      sensor_cs              : OUT    std_logic_vector (3 DOWNTO 0);
56      wiz_addr               : OUT    std_logic_vector (9 DOWNTO 0);
57      wiz_cs                 : OUT    std_logic                     := '1';
58      wiz_rd                 : OUT    std_logic                     := '1';
59      wiz_reset              : OUT    std_logic                     := '1';
60      wiz_wr                 : OUT    std_logic                     := '1';
61      sio                    : INOUT  std_logic;
62      wiz_data               : INOUT  std_logic_vector (15 DOWNTO 0)
63   );
64
65-- Declarations
66
67END FAD_main ;
68
69--
70-- VHDL Architecture FACT_FAD_lib.FAD_main.struct
71--
72-- Created:
73--          by - dneise.UNKNOWN (E5B-LABOR6)
74--          at - 15:55:14 24.02.2011
75--
76-- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
77--
78library ieee;
79use ieee.std_logic_1164.all;
80use IEEE.STD_LOGIC_ARITH.all;
81use ieee.STD_LOGIC_UNSIGNED.all;
82
83library fact_fad_lib;
84use fact_fad_lib.fad_definitions.all;
85
86library UNISIM;
87--use UNISIM.VComponents.all;
88USE IEEE.NUMERIC_STD.all;
89USE IEEE.std_logic_signed.all;
90USE UNISIM.VComponents.all;
91
92LIBRARY FACT_FAD_lib;
93
94ARCHITECTURE struct OF FAD_main IS
95
96   -- Architecture declarations
97
98   -- Internal signal declarations
99   SIGNAL CLK_25                  : std_logic;
100   SIGNAL DCM_PS_status           : std_logic_vector(7 DOWNTO 0)                 := (OTHERS => '0');
101   --
102
103-- EVT HEADER - part 2  --> FTM trigger informaton, comes in late ...
104-- during EVT header wrinting, this field is left out ... and only written into event header,
105-- when the DRS chip were read out already.
106   SIGNAL FTM_RS485_ready         : std_logic;
107   SIGNAL SRCLK1                  : std_logic                                    := '0';
108   SIGNAL adc_data_array_int      : adc_data_array_type;
109   SIGNAL adc_otr                 : std_logic_vector(3 DOWNTO 0);
110   SIGNAL addr_out                : std_logic_vector(RAMADDRWIDTH64b-1 DOWNTO 0);
111   SIGNAL c_trigger_enable        : std_logic                                    := '0';
112   SIGNAL c_trigger_mult          : std_logic_vector(15 DOWNTO 0);
113   SIGNAL config_addr             : std_logic_vector(7 DOWNTO 0);
114   SIGNAL config_busy             : std_logic;
115   SIGNAL config_data             : std_logic_vector(15 DOWNTO 0);
116   SIGNAL config_data_valid       : std_logic;
117   SIGNAL config_rd_en            : std_logic;
118   SIGNAL config_ready            : std_logic;
119   SIGNAL config_ready_cm         : std_logic;
120   SIGNAL config_ready_spi        : std_logic;
121   -- --
122   SIGNAL config_rw_ack           : std_logic                                    := '0';
123   -- --
124   SIGNAL config_rw_ready         : std_logic                                    := '0';
125   SIGNAL config_start            : std_logic                                    := '0';
126   SIGNAL config_start_cm         : std_logic;
127   SIGNAL config_start_spi        : std_logic                                    := '0';
128   SIGNAL config_started          : std_logic;
129   SIGNAL config_started_cu       : std_logic                                    := '0';
130   SIGNAL config_started_mm       : std_logic;
131   SIGNAL config_started_spi      : std_logic                                    := '0';
132   SIGNAL config_wr_en            : std_logic;
133   SIGNAL crc                     : std_logic_vector(7 DOWNTO 0);
134   SIGNAL dac_array               : dac_array_type;
135   SIGNAL data_generator_run_mode : std_logic                                    := '0';                -- default triggers are NOT accepted
136   SIGNAL data_out                : std_logic_vector(63 DOWNTO 0);
137   SIGNAL denable_inhibit         : std_logic                                    := '0';                -- default domino wave off
138   SIGNAL denable_prim            : std_logic                                    := '0';                -- default domino wave off
139   SIGNAL din1                    : std_logic                                    := '0';                -- default domino wave off
140   SIGNAL dna                     : STD_LOGIC_VECTOR(63 DOWNTO 0)                := (others => '0');
141   SIGNAL dout                    : std_logic;
142   SIGNAL dout1                   : std_logic;
143   SIGNAL drs_clk_en              : std_logic                                    := '0';
144   SIGNAL drs_read_s_cell         : std_logic                                    := '0';
145   SIGNAL drs_read_s_cell_ready   : std_logic;
146   -- --
147--      drs_dwrite : out std_logic := '1';
148   SIGNAL drs_readout_ready       : std_logic                                    := '0';
149   SIGNAL drs_readout_ready_ack   : std_logic;
150   SIGNAL drs_readout_started     : std_logic;
151   SIGNAL drs_s_cell_array        : drs_s_cell_array_type;
152   SIGNAL drs_srin_data           : std_logic_vector(7 DOWNTO 0)                 := (others => '0');
153   SIGNAL dwrite                  : std_logic                                    := '1';
154   SIGNAL dwrite_enable           : std_logic                                    := '1';
155   SIGNAL enable_i                : std_logic;
156   SIGNAL new_config              : std_logic                                    := '0';
157   SIGNAL package_length          : std_logic_vector(15 DOWNTO 0);
158   SIGNAL ps_direction            : std_logic                                    := '1';                -- default phase shift upwards
159   SIGNAL ps_do_phase_shift       : std_logic                                    := '0';                --pulse this to phase shift once
160   SIGNAL ps_reset                : std_logic                                    := '0';                -- pulse this to reset the variable phase shift
161   SIGNAL ram_addr                : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0);
162   SIGNAL ram_data                : std_logic_vector(15 DOWNTO 0);
163   SIGNAL ram_start_addr          : std_logic_vector(RAMADDRWIDTH64b-1 DOWNTO 0);
164   SIGNAL ram_write_ea            : std_logic;
165   SIGNAL ram_write_ready         : std_logic                                    := '0';
166   -- --
167   SIGNAL ram_write_ready_ack     : std_logic                                    := '0';
168   SIGNAL ready                   : STD_LOGIC                                    := '0';
169   SIGNAL reset_synch_i           : std_logic;
170   SIGNAL roi_array               : roi_array_type;
171   SIGNAL roi_max                 : roi_max_type;
172   SIGNAL rs465_data              : std_logic_vector(55 DOWNTO 0);                                      --7 byte
173   SIGNAL s_trigger               : std_logic;
174   SIGNAL s_trigger_0             : std_logic;
175   SIGNAL sclk1                   : std_logic;
176   SIGNAL sclk_enable             : std_logic;
177   SIGNAL sensor_array            : sensor_array_type;
178   SIGNAL sensor_ready            : std_logic;
179   SIGNAL socks_connected         : std_logic;
180   SIGNAL socks_waiting           : std_logic;
181   SIGNAL srclk_enable            : std_logic                                    := '0';
182   SIGNAL srin_write_ack          : std_logic                                    := '0';
183   SIGNAL srin_write_ready        : std_logic                                    := '0';
184   SIGNAL start_srin_write_8b     : std_logic;
185   SIGNAL time                    : std_logic_vector(31 DOWNTO 0);
186   SIGNAL trigger1                : std_logic;
187   SIGNAL trigger_enable          : std_logic;
188   SIGNAL trigger_id              : std_logic_vector(31 DOWNTO 0);
189   SIGNAL trigger_out             : std_logic;
190   SIGNAL trigger_type1           : std_logic_vector(7 DOWNTO 0);
191   SIGNAL trigger_type2           : std_logic_vector(7 DOWNTO 0);
192   SIGNAL wiz_ack                 : std_logic;
193   SIGNAL wiz_busy                : std_logic;
194   SIGNAL wiz_number_of_channels  : std_logic_vector(3 DOWNTO 0)                 := (others => '0');
195   SIGNAL wiz_ram_start_addr      : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0) := (others => '0');
196   SIGNAL wiz_write_ea            : std_logic                                    := '0';
197   SIGNAL wiz_write_end           : std_logic                                    := '0';
198   SIGNAL wiz_write_header        : std_logic                                    := '0';
199   SIGNAL wiz_write_length        : std_logic_vector(16 DOWNTO 0)                := (others => '0');
200   SIGNAL write_ea                : std_logic_vector(0 DOWNTO 0)                 := "0";
201
202   -- Implicit buffer signal declarations
203   SIGNAL CLK_25_PS_internal             : std_logic;
204   SIGNAL CLK_50_internal                : std_logic;
205   SIGNAL alarm_refclk_too_high_internal : std_logic;
206   SIGNAL alarm_refclk_too_low_internal  : std_logic;
207   SIGNAL counter_result_internal        : std_logic_vector (11 DOWNTO 0);
208
209
210   -- Component Declarations
211   COMPONENT REFCLK_counter
212   PORT (
213      clk                   : IN     std_logic;
214      refclk_in             : IN     std_logic;
215      alarm_refclk_too_high : OUT    std_logic                      := '0';
216      alarm_refclk_too_low  : OUT    std_logic                      := '0';
217      counter_result        : OUT    std_logic_vector (11 DOWNTO 0) := (others => '0')
218   );
219   END COMPONENT;
220   COMPONENT RS485_receiver_fake
221   PORT (
222      crc           : IN     std_logic_vector (7 DOWNTO 0);
223      trigger_no    : IN     std_logic_vector (31 DOWNTO 0);
224      trigger_type1 : IN     std_logic_vector (7 DOWNTO 0);
225      trigger_type2 : IN     std_logic_vector (7 DOWNTO 0);
226      rs465_data    : OUT    std_logic_vector (55 DOWNTO 0);
227      rs485_ready   : OUT    std_logic
228   );
229   END COMPONENT;
230   COMPONENT adc_buffer
231   PORT (
232      adc_data_array     : IN     adc_data_array_type;
233      adc_otr_array      : IN     std_logic_vector (3 DOWNTO 0);
234      clk_ps             : IN     std_logic;
235      adc_data_array_int : OUT    adc_data_array_type;
236      adc_otr            : OUT    std_logic_vector (3 DOWNTO 0)
237   );
238   END COMPONENT;
239   COMPONENT clock_generator_var_ps
240   PORT (
241      CLK       : IN     std_logic ;
242      RST_IN    : IN     std_logic ;
243      direction : IN     std_logic ;
244      do_shift  : IN     std_logic ;
245      CLK_25    : OUT    std_logic ;
246      CLK_25_PS : OUT    std_logic ;
247      CLK_50    : OUT    std_logic ;
248      offset    : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0')
249   );
250   END COMPONENT;
251   COMPONENT continous_pulser
252   GENERIC (
253      MINIMAL_TRIGGER_WAIT_TIME : integer := 250000;
254      TRIGGER_WIDTH             : integer := 5
255   );
256   PORT (
257      CLK        : IN     std_logic;
258      enable     : IN     std_logic;
259      multiplier : IN     std_logic_vector (15 DOWNTO 0);
260      trigger    : OUT    std_logic
261   );
262   END COMPONENT;
263   COMPONENT control_unit
264   PORT (
265      clk               : IN     STD_LOGIC ;
266      config_addr       : IN     std_logic_vector (7 DOWNTO 0);
267      config_rd_en      : IN     std_logic ;
268      config_start      : IN     std_logic ;
269      config_wr_en      : IN     std_logic ;
270      config_busy       : OUT    std_logic ;
271      config_data_valid : OUT    std_logic ;
272      config_ready      : OUT    std_logic ;
273      -- --
274      config_rw_ack     : OUT    std_logic  := '0';
275      -- --
276      config_rw_ready   : OUT    std_logic  := '0';
277      config_started    : OUT    std_logic  := '0';
278      dac_array         : OUT    dac_array_type ;
279      roi_array         : OUT    roi_array_type ;
280      config_data       : INOUT  std_logic_vector (15 DOWNTO 0)
281   );
282   END COMPONENT;
283   COMPONENT dataRAM_64b_16b_width14_5
284   PORT (
285      clka  : IN     std_logic ;
286      dina  : IN     std_logic_VECTOR (63 DOWNTO 0);
287      addra : IN     std_logic_VECTOR (14 DOWNTO 0);
288      wea   : IN     std_logic_VECTOR (0 DOWNTO 0);
289      clkb  : IN     std_logic ;
290      addrb : IN     std_logic_VECTOR (16 DOWNTO 0);
291      doutb : OUT    std_logic_VECTOR (15 DOWNTO 0)
292   );
293   END COMPONENT;
294   COMPONENT data_generator
295   GENERIC (
296      RAM_ADDR_WIDTH : integer := 12
297   );
298   PORT (
299      clk                        : IN     std_logic ;                                     -- CLK_25.
300      data_out                   : OUT    std_logic_vector (63 DOWNTO 0);
301      addr_out                   : OUT    std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
302      dataRAM_write_ea_o         : OUT    std_logic_vector (0 DOWNTO 0) := "0";
303      ram_start_addr             : IN     std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
304      ram_write_ea               : IN     std_logic ;
305      ram_write_ready            : OUT    std_logic                     := '0';
306      ram_write_ready_ack        : IN     std_logic ;
307      config_start_mm            : OUT    std_logic                     := '0';
308      config_start_cm            : OUT    std_logic                     := '0';
309      config_start_spi           : OUT    std_logic                     := '0';
310      config_ready_mm            : IN     std_logic ;
311      config_ready_cm            : IN     std_logic ;
312      config_ready_spi           : IN     std_logic ;
313      config_started_mm          : IN     std_logic ;
314      config_started_cm          : IN     std_logic ;
315      config_started_spi         : IN     std_logic ;
316      roi_array                  : IN     roi_array_type ;
317      roi_max                    : IN     roi_max_type ;
318      sensor_array               : IN     sensor_array_type ;
319      sensor_ready               : IN     std_logic ;
320      dac_array                  : IN     dac_array_type ;
321      mode                       : IN     std_logic                     := '0';           -- 0: config mode | 1: run mode
322      idling                     : OUT    std_logic ;
323      -- EVT HEADER - part 1
324      package_length             : IN     std_logic_vector (15 DOWNTO 0);
325      pll_lock                   : IN     std_logic_vector ( 3 DOWNTO 0);
326      -- EVT HEADER - part 2  --> FTM trigger informaton, comes in late ...
327      -- during EVT header wrinting, this field is left out ... and only written into event header,
328      -- when the DRS chip were read out already.
329      FTM_RS485_ready            : IN     std_logic ;
330      FTM_trigger_info           : IN     std_logic_vector (55 DOWNTO 0);                 --7 byte
331      -- EVT HEADER - part 3
332      fad_event_counter          : IN     std_logic_vector (31 DOWNTO 0);
333      refclk_counter             : IN     std_logic_vector (11 DOWNTO 0);
334      refclk_too_high            : IN     std_logic ;
335      refclk_too_low             : IN     std_logic ;
336      -- EVT HEADER - part 4
337      board_id                   : IN     std_logic_vector (3 DOWNTO 0);
338      crate_id                   : IN     std_logic_vector (1 DOWNTO 0);
339      DCM_PS_status              : IN     std_logic_vector (7 DOWNTO 0);
340      TRG_GEN_div                : IN     std_logic_vector (15 DOWNTO 0);
341      -- EVT HEADER - part 5
342      dna                        : IN     std_logic_vector (63 DOWNTO 0);
343      -- EVT HEADER - part 6
344      timer_value                : IN     std_logic_vector (31 DOWNTO 0);                 -- time in units of 100us
345      trigger                    : IN     std_logic ;
346      start_config_chain         : IN     std_logic ;                                     -- here W5300_MODUL can start the whole config chain
347      config_chain_done          : OUT    std_logic ;
348      adc_data_array             : IN     adc_data_array_type ;
349      adc_output_enable_inverted : OUT    std_logic                     := '1';
350      adc_clk_en                 : OUT    std_logic                     := '0';
351      adc_otr                    : IN     std_logic_vector (3 DOWNTO 0);
352      drs_channel_id             : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
353      --drs_dwrite : out std_logic := '1';
354      drs_readout_ready          : OUT    std_logic                     := '0';
355      drs_readout_ready_ack      : IN     std_logic ;
356      drs_clk_en                 : OUT    std_logic                     := '0';
357      start_read_drs_stop_cell   : OUT    std_logic                     := '0';
358      drs_srin_write_8b          : OUT    std_logic                     := '0';
359      drs_srin_write_ack         : IN     std_logic ;
360      drs_srin_data              : OUT    std_logic_vector (7 DOWNTO 0) := (others => '0');
361      drs_srin_write_ready       : IN     std_logic ;
362      drs_read_s_cell_ready      : IN     std_logic ;
363      drs_s_cell_array           : IN     drs_s_cell_array_type ;
364      drs_readout_started        : OUT    std_logic                     := '0'
365   );
366   END COMPONENT;
367   COMPONENT dna_gen
368   PORT (
369      clk   : IN     STD_LOGIC ;
370      dna   : OUT    STD_LOGIC_VECTOR (63 DOWNTO 0) := (others => '0');
371      ready : OUT    STD_LOGIC                      := '0'
372   );
373   END COMPONENT;
374   COMPONENT drs_pulser
375   PORT (
376      CLK                      : IN     std_logic;
377      SROUT_in_0               : IN     std_logic;
378      SROUT_in_1               : IN     std_logic;
379      SROUT_in_2               : IN     std_logic;
380      SROUT_in_3               : IN     std_logic;
381      srin_data                : IN     std_logic_vector (7 DOWNTO 0);
382      start_endless_mode       : IN     std_logic;
383      start_read_stop_pos_mode : IN     std_logic;
384      start_srin_write_8b      : IN     std_logic;
385      RSRLOAD                  : OUT    std_logic  := '0';
386      SRCLK                    : OUT    std_logic  := '0';
387      SRIN_out                 : OUT    std_logic  := '0';
388      srin_write_ack           : OUT    std_logic  := '0';
389      srin_write_ready         : OUT    std_logic  := '0';
390      stop_pos                 : OUT    drs_s_cell_array_type;
391      stop_pos_valid           : OUT    std_logic  := '0'
392   );
393   END COMPONENT;
394   COMPONENT led_controller
395   GENERIC (
396      HEARTBEAT_PWM_DIVIDER : integer := 500;
397      MAX_DELAY             : integer := 100;      --not used anymore at all :-(
398      WAITING_DIVIDER       : integer := 500000000
399   );
400   PORT (
401      CLK                    : IN     std_logic;
402      socks_connected        : IN     std_logic;
403      socks_waiting          : IN     std_logic;
404      trigger                : IN     std_logic;
405      additional_flasher_out : OUT    std_logic;
406      amber                  : OUT    std_logic;
407      green                  : OUT    std_logic;
408      red                    : OUT    std_logic
409   );
410   END COMPONENT;
411   COMPONENT memory_manager
412   GENERIC (
413      RAM_ADDR_WIDTH_64B : integer := 12;
414      RAM_ADDR_WIDTH_16B : integer := 14
415   );
416   PORT (
417      clk                    : IN     std_logic ;
418      config_start           : IN     std_logic ;
419      ram_write_ready        : IN     std_logic ;
420      -- --
421      ram_write_ready_ack    : OUT    std_logic                                        := '0';
422      -- --
423      roi_array              : IN     roi_array_type ;
424      ram_write_ea           : OUT    std_logic                                        := '0';
425      config_ready           : OUT    std_logic                                        := '0';
426      config_started         : OUT    std_logic                                        := '0';
427      roi_max                : OUT    roi_max_type                                     := (others => conv_std_logic_vector (0, 11));
428      package_length         : OUT    std_logic_vector (15 DOWNTO 0)                   := (others => '0');
429      wiz_ram_start_addr     : OUT    std_logic_vector (RAM_ADDR_WIDTH_16B-1 DOWNTO 0) := (others => '0');
430      wiz_write_length       : OUT    std_logic_vector (16 DOWNTO 0)                   := (others => '0');
431      wiz_number_of_channels : OUT    std_logic_vector (3 DOWNTO 0)                    := (others => '0');
432      wiz_write_ea           : OUT    std_logic                                        := '0';
433      wiz_write_header       : OUT    std_logic                                        := '0';
434      wiz_write_end          : OUT    std_logic                                        := '0';
435      wiz_busy               : IN     std_logic ;
436      wiz_ack                : IN     std_logic ;
437      buffer_ram_empty       : OUT    std_logic ;
438      ram_start_addr         : OUT    std_logic_vector (RAM_ADDR_WIDTH_64B-1 DOWNTO 0) := (others => '0')
439   );
440   END COMPONENT;
441   COMPONENT spi_interface
442   PORT (
443      clk_50MHz      : IN     std_logic ;
444      config_start   : IN     std_logic ;
445      dac_array      : IN     dac_array_type ;
446      config_ready   : OUT    std_logic ;
447      config_started : OUT    std_logic  := '0';
448      dac_cs         : OUT    std_logic ;
449      mosi           : OUT    std_logic  := '0';
450      sclk           : OUT    std_logic ;
451      sensor_array   : OUT    sensor_array_type ;
452      sensor_cs      : OUT    std_logic_vector (3 DOWNTO 0);
453      sensor_ready   : OUT    std_logic ;
454      miso           : INOUT  std_logic 
455   );
456   END COMPONENT;
457   COMPONENT timer
458   GENERIC (
459      TIMER_WIDTH : integer := 32;
460      PRESCALER   : integer := 5000
461   );
462   PORT (
463      clk           : IN     std_logic;
464      enable_i      : IN     std_logic;
465      reset_synch_i : IN     std_logic;
466      synch_i       : IN     std_logic;
467      synched_o     : OUT    std_logic  := '0';
468      time_o        : OUT    std_logic_vector ( TIMER_WIDTH-1 DOWNTO 0)
469   );
470   END COMPONENT;
471   COMPONENT trigger_counter
472   PORT (
473      trigger_id : OUT    std_logic_vector (31 DOWNTO 0);
474      trigger    : IN     std_logic ;
475      clk        : IN     std_logic 
476   );
477   END COMPONENT;
478   COMPONENT trigger_manager
479   PORT (
480      clk                   : IN     std_logic;
481      drs_readout_ready     : IN     std_logic;
482      trigger_in            : IN     std_logic;
483      drs_readout_ready_ack : OUT    std_logic  := '0';
484      drs_write             : OUT    std_logic  := '1';
485      trigger_out           : OUT    std_logic  := '0'
486   );
487   END COMPONENT;
488   COMPONENT w5300_modul
489   GENERIC (
490      RAM_ADDR_WIDTH : integer := 14
491   );
492   PORT (
493      clk                     : IN     std_logic ;
494      wiz_reset               : OUT    std_logic                      := '1';
495      addr                    : OUT    std_logic_vector (9 DOWNTO 0);
496      data                    : INOUT  std_logic_vector (15 DOWNTO 0);
497      cs                      : OUT    std_logic                      := '1';
498      wr                      : OUT    std_logic                      := '1';
499      led                     : OUT    std_logic_vector (7 DOWNTO 0)  := (OTHERS => '0');
500      rd                      : OUT    std_logic                      := '1';
501      int                     : IN     std_logic ;
502      write_length            : IN     std_logic_vector (16 DOWNTO 0);
503      ram_start_addr          : IN     std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
504      ram_data                : IN     std_logic_vector (15 DOWNTO 0);
505      ram_addr                : OUT    std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
506      data_valid              : IN     std_logic ;
507      data_valid_ack          : OUT    std_logic                      := '0';
508      busy                    : OUT    std_logic                      := '1';
509      write_header_flag       : IN     std_logic ;
510      write_end_flag          : IN     std_logic ;
511      fifo_channels           : IN     std_logic_vector (3 DOWNTO 0);
512      -- softtrigger:
513      s_trigger               : OUT    std_logic                      := '0';
514      c_trigger_enable        : OUT    std_logic                      := '0';
515      c_trigger_mult          : OUT    std_logic_vector (15 DOWNTO 0) := conv_std_logic_vector(100 ,16); --subject TO changes
516      -- FAD configuration signals:
517      ------------------------------------------------------------------------------
518      -- start entire configuration chain
519      new_config              : OUT    std_logic                      := '0';
520      config_chain_done       : IN     std_logic ;
521      -- read/write configRAM
522      config_addr             : OUT    std_logic_vector (7 DOWNTO 0);
523      config_data             : INOUT  std_logic_vector (15 DOWNTO 0) := (others => 'Z');
524      config_wr_en            : OUT    std_logic                      := '0';
525      config_rd_en            : OUT    std_logic                      := '0';
526      config_rw_ack           : IN     std_logic ;
527      config_rw_ready         : IN     std_logic ;
528      config_busy             : IN     std_logic ;
529      ------------------------------------------------------------------------------
530     
531      -- MAC/IP calculation signals:
532      ------------------------------------------------------------------------------
533      MAC_jumper              : IN     std_logic_vector (1 DOWNTO 0);
534      BoardID                 : IN     std_logic_vector (3 DOWNTO 0);
535      CrateID                 : IN     std_logic_vector (1 DOWNTO 0);
536      ------------------------------------------------------------------------------
537     
538      -- user controllable enable signals
539      ------------------------------------------------------------------------------
540      trigger_enable          : OUT    std_logic                      := '0';                            -- default triggers are NOT accepted
541      data_generator_run_mode : OUT    std_logic                      := '0';                            -- default triggers are NOT accepted
542      denable                 : OUT    std_logic                      := '0';                            -- default domino wave off
543      dwrite_enable           : OUT    std_logic                      := '0';                            -- default DWRITE low.
544      sclk_enable             : OUT    std_logic                      := '1';                            -- default DWRITE HIGH.
545      srclk_enable            : OUT    std_logic                      := '1';                            -- default SRCLK on.
546      ------------------------------------------------------------------------------
547     
548      -- ADC CLK generator, is able to shift phase with respect to X_50M
549      -- these signals control the behavior of the digital clock manager (DCM)
550      ------------------------------------------------------------------------------
551      ps_direction            : OUT    std_logic                      := '1';                            -- default phase shift upwards
552      ps_do_phase_shift       : OUT    std_logic                      := '0';                            --pulse this TO phase shift once
553      ps_reset                : OUT    std_logic                      := '0';                            -- pulse this TO reset the variable phase shift
554      ------------------------------------------------------------------------------
555     
556      -- signals used to control FAD LED bahavior:
557      -- one of the three LEDs is used for com-status info
558      ------------------------------------------------------------------------------
559      socks_waiting           : OUT    std_logic ;
560      socks_connected         : OUT    std_logic 
561      ------------------------------------------------------------------------------
562   );
563   END COMPONENT;
564
565   -- Optional embedded configurations
566   -- pragma synthesis_off
567   FOR ALL : REFCLK_counter USE ENTITY FACT_FAD_lib.REFCLK_counter;
568   FOR ALL : RS485_receiver_fake USE ENTITY FACT_FAD_lib.RS485_receiver_fake;
569   FOR ALL : adc_buffer USE ENTITY FACT_FAD_lib.adc_buffer;
570   FOR ALL : clock_generator_var_ps USE ENTITY FACT_FAD_lib.clock_generator_var_ps;
571   FOR ALL : continous_pulser USE ENTITY FACT_FAD_lib.continous_pulser;
572   FOR ALL : control_unit USE ENTITY FACT_FAD_lib.control_unit;
573   FOR ALL : dataRAM_64b_16b_width14_5 USE ENTITY FACT_FAD_lib.dataRAM_64b_16b_width14_5;
574   FOR ALL : data_generator USE ENTITY FACT_FAD_lib.data_generator;
575   FOR ALL : dna_gen USE ENTITY FACT_FAD_lib.dna_gen;
576   FOR ALL : drs_pulser USE ENTITY FACT_FAD_lib.drs_pulser;
577   FOR ALL : led_controller USE ENTITY FACT_FAD_lib.led_controller;
578   FOR ALL : memory_manager USE ENTITY FACT_FAD_lib.memory_manager;
579   FOR ALL : spi_interface USE ENTITY FACT_FAD_lib.spi_interface;
580   FOR ALL : timer USE ENTITY FACT_FAD_lib.timer;
581   FOR ALL : trigger_counter USE ENTITY FACT_FAD_lib.trigger_counter;
582   FOR ALL : trigger_manager USE ENTITY FACT_FAD_lib.trigger_manager;
583   FOR ALL : w5300_modul USE ENTITY FACT_FAD_lib.w5300_modul;
584   -- pragma synthesis_on
585
586
587BEGIN
588   -- Architecture concurrent statements
589   -- HDL Embedded Text Block 1 eb1
590   trigger_type1 <= "00000010";
591   trigger_type2 <= "00000000";
592   crc <= X"5A";
593
594
595   -- ModuleWare code(v1.9) for instance 'I5' of 'and'
596   drs_dwrite <= dwrite AND dwrite_enable;
597
598   -- ModuleWare code(v1.9) for instance 'I6' of 'and'
599   SRCLK <= SRCLK1 AND srclk_enable;
600
601   -- ModuleWare code(v1.9) for instance 'U_1' of 'and'
602   sclk <= sclk_enable AND sclk1;
603
604   -- ModuleWare code(v1.9) for instance 'U_5' of 'and'
605   denable <= denable_prim AND din1;
606
607   -- ModuleWare code(v1.9) for instance 'U_11' of 'and'
608   dout1 <= dout AND trigger_enable;
609
610   -- ModuleWare code(v1.9) for instance 'U_15' of 'gnd'
611   reset_synch_i <= '0';
612
613   -- ModuleWare code(v1.9) for instance 'U_7' of 'inv'
614   din1 <= NOT(denable_inhibit);
615
616   -- ModuleWare code(v1.9) for instance 'U_6' of 'or'
617   denable_inhibit <= alarm_refclk_too_low_internal
618                      OR alarm_refclk_too_high_internal;
619
620   -- ModuleWare code(v1.9) for instance 'U_9' of 'or'
621   dout <= s_trigger OR trigger;
622
623   -- ModuleWare code(v1.9) for instance 'U_13' of 'or'
624   s_trigger <= s_trigger_0 OR trigger1;
625
626   -- ModuleWare code(v1.9) for instance 'U_14' of 'vdd'
627   enable_i <= '1';
628
629   -- Instance port mappings.
630   REFCLK_counter_main : REFCLK_counter
631      PORT MAP (
632         clk                   => CLK_50_internal,
633         refclk_in             => drs_refclk_in,
634         counter_result        => counter_result_internal,
635         alarm_refclk_too_high => alarm_refclk_too_high_internal,
636         alarm_refclk_too_low  => alarm_refclk_too_low_internal
637      );
638   U_16 : RS485_receiver_fake
639      PORT MAP (
640         trigger_no    => trigger_id,
641         trigger_type1 => trigger_type1,
642         trigger_type2 => trigger_type2,
643         crc           => crc,
644         rs465_data    => rs465_data,
645         rs485_ready   => FTM_RS485_ready
646      );
647   I_main_adc_buffer : adc_buffer
648      PORT MAP (
649         clk_ps             => CLK_25_PS_internal,
650         adc_data_array     => adc_data_array,
651         adc_otr_array      => adc_otr_array,
652         adc_data_array_int => adc_data_array_int,
653         adc_otr            => adc_otr
654      );
655   U_2 : clock_generator_var_ps
656      PORT MAP (
657         CLK       => CLK,
658         RST_IN    => ps_reset,
659         direction => ps_direction,
660         do_shift  => ps_do_phase_shift,
661         CLK_25    => CLK_25,
662         CLK_25_PS => CLK_25_PS_internal,
663         CLK_50    => CLK_50_internal,
664         offset    => DCM_PS_status
665      );
666   U_3 : continous_pulser
667      GENERIC MAP (
668         MINIMAL_TRIGGER_WAIT_TIME => 250000,
669         TRIGGER_WIDTH             => 5
670      )
671      PORT MAP (
672         CLK        => CLK_25,
673         enable     => c_trigger_enable,
674         multiplier => c_trigger_mult,
675         trigger    => trigger1
676      );
677   I_main_control_unit : control_unit
678      PORT MAP (
679         clk               => CLK_50_internal,
680         config_addr       => config_addr,
681         config_rd_en      => config_rd_en,
682         config_start      => config_start_cm,
683         config_wr_en      => config_wr_en,
684         config_busy       => config_busy,
685         config_data_valid => config_data_valid,
686         config_ready      => config_ready_cm,
687         config_rw_ack     => config_rw_ack,
688         config_rw_ready   => config_rw_ready,
689         config_started    => config_started_cu,
690         dac_array         => dac_array,
691         roi_array         => roi_array,
692         config_data       => config_data
693      );
694   U_4 : dataRAM_64b_16b_width14_5
695      PORT MAP (
696         clka  => CLK_25,
697         dina  => data_out,
698         addra => addr_out,
699         wea   => write_ea,
700         clkb  => CLK_50_internal,
701         addrb => ram_addr,
702         doutb => ram_data
703      );
704   I_main_data_generator : data_generator
705      GENERIC MAP (
706         RAM_ADDR_WIDTH => RAMADDRWIDTH64b
707      )
708      PORT MAP (
709         clk                        => CLK_25,
710         data_out                   => data_out,
711         addr_out                   => addr_out,
712         dataRAM_write_ea_o         => write_ea,
713         ram_start_addr             => ram_start_addr,
714         ram_write_ea               => ram_write_ea,
715         ram_write_ready            => ram_write_ready,
716         ram_write_ready_ack        => ram_write_ready_ack,
717         config_start_mm            => config_start,
718         config_start_cm            => config_start_cm,
719         config_start_spi           => config_start_spi,
720         config_ready_mm            => config_ready,
721         config_ready_cm            => config_ready_cm,
722         config_ready_spi           => config_ready_spi,
723         config_started_mm          => config_started_mm,
724         config_started_cm          => config_started_cu,
725         config_started_spi         => config_started_spi,
726         roi_array                  => roi_array,
727         roi_max                    => roi_max,
728         sensor_array               => sensor_array,
729         sensor_ready               => sensor_ready,
730         dac_array                  => dac_array,
731         mode                       => OPEN,
732         idling                     => OPEN,
733         package_length             => package_length,
734         pll_lock                   => plllock_in,
735         FTM_RS485_ready            => FTM_RS485_ready,
736         FTM_trigger_info           => rs465_data,
737         fad_event_counter          => trigger_id,
738         refclk_counter             => counter_result_internal,
739         refclk_too_high            => alarm_refclk_too_high_internal,
740         refclk_too_low             => alarm_refclk_too_low_internal,
741         board_id                   => board_id,
742         crate_id                   => crate_id,
743         DCM_PS_status              => DCM_PS_status,
744         TRG_GEN_div                => c_trigger_mult,
745         dna                        => dna,
746         timer_value                => time,
747         trigger                    => trigger_out,
748         start_config_chain         => new_config,
749         config_chain_done          => config_started,
750         adc_data_array             => adc_data_array_int,
751         adc_output_enable_inverted => adc_oeb,
752         adc_clk_en                 => adc_clk_en,
753         adc_otr                    => adc_otr,
754         drs_channel_id             => drs_channel_id,
755         drs_readout_ready          => drs_readout_ready,
756         drs_readout_ready_ack      => drs_readout_ready_ack,
757         drs_clk_en                 => drs_clk_en,
758         start_read_drs_stop_cell   => drs_read_s_cell,
759         drs_srin_write_8b          => start_srin_write_8b,
760         drs_srin_write_ack         => srin_write_ack,
761         drs_srin_data              => drs_srin_data,
762         drs_srin_write_ready       => srin_write_ready,
763         drs_read_s_cell_ready      => drs_read_s_cell_ready,
764         drs_s_cell_array           => drs_s_cell_array,
765         drs_readout_started        => drs_readout_started
766      );
767   U_0 : dna_gen
768      PORT MAP (
769         clk   => CLK_25,
770         dna   => dna,
771         ready => ready
772      );
773   I_main_drs_pulser : drs_pulser
774      PORT MAP (
775         CLK                      => CLK_25,
776         start_endless_mode       => drs_clk_en,
777         start_read_stop_pos_mode => drs_read_s_cell,
778         SROUT_in_0               => SROUT_in_0,
779         SROUT_in_1               => SROUT_in_1,
780         SROUT_in_2               => SROUT_in_2,
781         SROUT_in_3               => SROUT_in_3,
782         stop_pos                 => drs_s_cell_array,
783         stop_pos_valid           => drs_read_s_cell_ready,
784         start_srin_write_8b      => start_srin_write_8b,
785         srin_write_ready         => srin_write_ready,
786         srin_write_ack           => srin_write_ack,
787         srin_data                => drs_srin_data,
788         SRIN_out                 => SRIN_out,
789         RSRLOAD                  => RSRLOAD,
790         SRCLK                    => SRCLK1
791      );
792   U_10 : led_controller
793      GENERIC MAP (
794         HEARTBEAT_PWM_DIVIDER => 50000,           -- 10kHz @ 50 MHz
795         MAX_DELAY             => 100,
796         WAITING_DIVIDER       => 50000000         -- 1Hz @ 50 MHz
797      )
798      PORT MAP (
799         CLK                    => CLK_50_internal,
800         green                  => green,
801         amber                  => amber,
802         red                    => red,
803         additional_flasher_out => additional_flasher_out,
804         trigger                => drs_readout_started,
805         socks_waiting          => socks_waiting,
806         socks_connected        => socks_connected
807      );
808   I_main_memory_manager : memory_manager
809      GENERIC MAP (
810         RAM_ADDR_WIDTH_64B => RAMADDRWIDTH64b,
811         RAM_ADDR_WIDTH_16B => RAMADDRWIDTH64b+2
812      )
813      PORT MAP (
814         clk                    => CLK_25,
815         config_start           => config_start,
816         ram_write_ready        => ram_write_ready,
817         ram_write_ready_ack    => ram_write_ready_ack,
818         roi_array              => roi_array,
819         ram_write_ea           => ram_write_ea,
820         config_ready           => config_ready,
821         config_started         => config_started_mm,
822         roi_max                => roi_max,
823         package_length         => package_length,
824         wiz_ram_start_addr     => wiz_ram_start_addr,
825         wiz_write_length       => wiz_write_length,
826         wiz_number_of_channels => wiz_number_of_channels,
827         wiz_write_ea           => wiz_write_ea,
828         wiz_write_header       => wiz_write_header,
829         wiz_write_end          => wiz_write_end,
830         wiz_busy               => wiz_busy,
831         wiz_ack                => wiz_ack,
832         buffer_ram_empty       => OPEN,
833         ram_start_addr         => ram_start_addr
834      );
835   I_main_SPI_interface : spi_interface
836      PORT MAP (
837         clk_50MHz      => CLK_50_internal,
838         config_start   => config_start_spi,
839         dac_array      => dac_array,
840         config_ready   => config_ready_spi,
841         config_started => config_started_spi,
842         dac_cs         => dac_cs,
843         mosi           => mosi,
844         sclk           => sclk1,
845         sensor_array   => sensor_array,
846         sensor_cs      => sensor_cs,
847         sensor_ready   => sensor_ready,
848         miso           => sio
849      );
850   U_8 : timer
851      GENERIC MAP (
852         TIMER_WIDTH => 32,
853         PRESCALER   => 5000
854      )
855      PORT MAP (
856         clk           => CLK_50_internal,
857         time_o        => time,
858         synch_i       => trigger_out,
859         synched_o     => OPEN,
860         reset_synch_i => reset_synch_i,
861         enable_i      => enable_i
862      );
863   I_main_ext_trigger : trigger_counter
864      PORT MAP (
865         trigger_id => trigger_id,
866         trigger    => trigger_out,
867         clk        => CLK_25_PS_internal
868      );
869   U_12 : trigger_manager
870      PORT MAP (
871         clk                   => CLK_25,
872         trigger_in            => dout1,
873         trigger_out           => trigger_out,
874         drs_write             => dwrite,
875         drs_readout_ready     => drs_readout_ready,
876         drs_readout_ready_ack => drs_readout_ready_ack
877      );
878   w5300_modul_instance : w5300_modul
879      GENERIC MAP (
880         RAM_ADDR_WIDTH => RAMADDRWIDTH64b+2
881      )
882      PORT MAP (
883         clk                     => CLK_50_internal,
884         wiz_reset               => wiz_reset,
885         addr                    => wiz_addr,
886         data                    => wiz_data,
887         cs                      => wiz_cs,
888         wr                      => wiz_wr,
889         led                     => led,
890         rd                      => wiz_rd,
891         int                     => wiz_int,
892         write_length            => wiz_write_length,
893         ram_start_addr          => wiz_ram_start_addr,
894         ram_data                => ram_data,
895         ram_addr                => ram_addr,
896         data_valid              => wiz_write_ea,
897         data_valid_ack          => wiz_ack,
898         busy                    => wiz_busy,
899         write_header_flag       => wiz_write_header,
900         write_end_flag          => wiz_write_end,
901         fifo_channels           => wiz_number_of_channels,
902         s_trigger               => s_trigger_0,
903         c_trigger_enable        => c_trigger_enable,
904         c_trigger_mult          => c_trigger_mult,
905         new_config              => new_config,
906         config_chain_done       => config_started,
907         config_addr             => config_addr,
908         config_data             => config_data,
909         config_wr_en            => config_wr_en,
910         config_rd_en            => config_rd_en,
911         config_rw_ack           => config_rw_ack,
912         config_rw_ready         => config_rw_ready,
913         config_busy             => config_busy,
914         MAC_jumper              => D_T_in,
915         BoardID                 => board_id,
916         CrateID                 => crate_id,
917         trigger_enable          => trigger_enable,
918         data_generator_run_mode => data_generator_run_mode,
919         denable                 => denable_prim,
920         dwrite_enable           => dwrite_enable,
921         sclk_enable             => sclk_enable,
922         srclk_enable            => srclk_enable,
923         ps_direction            => ps_direction,
924         ps_do_phase_shift       => ps_do_phase_shift,
925         ps_reset                => ps_reset,
926         socks_waiting           => socks_waiting,
927         socks_connected         => socks_connected
928      );
929
930   -- Implicit buffered output assignments
931   CLK_25_PS             <= CLK_25_PS_internal;
932   CLK_50                <= CLK_50_internal;
933   alarm_refclk_too_high <= alarm_refclk_too_high_internal;
934   alarm_refclk_too_low  <= alarm_refclk_too_low_internal;
935   counter_result        <= counter_result_internal;
936
937END struct;
Note: See TracBrowser for help on using the repository browser.