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

Last change on this file since 10902 was 10902, checked in by neise, 9 years ago
File size: 48.0 KB
Line 
1-- VHDL Entity FACT_FAD_lib.FAD_main.symbol
2--
3-- Created:
4--          by - dneise.UNKNOWN (E5B-LABOR6)
5--          at - 12:11:19 03.06.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      FTM_RS485_rx_d        : IN     std_logic;
23      SROUT_in_0            : IN     std_logic;
24      SROUT_in_1            : IN     std_logic;
25      SROUT_in_2            : IN     std_logic;
26      SROUT_in_3            : IN     std_logic;
27      adc_data_array        : IN     adc_data_array_type;
28      adc_otr_array         : IN     std_logic_vector (3 DOWNTO 0);
29      board_id              : IN     std_logic_vector (3 DOWNTO 0);
30      crate_id              : IN     std_logic_vector (1 DOWNTO 0);
31      drs_refclk_in         : IN     std_logic;                                         -- used to check if DRS REFCLK exsists, if not DENABLE inhibit
32      plllock_in            : IN     std_logic_vector (3 DOWNTO 0);                     -- high level, if dominowave is running and DRS PLL locked
33      trigger               : IN     std_logic;
34      wiz_int               : IN     std_logic;
35      ADC_CLK               : OUT    std_logic;
36      CLK_25_PS             : OUT    std_logic;
37      CLK_50                : OUT    std_logic;
38      -- for debugging
39      DG_state              : OUT    std_logic_vector (7 DOWNTO 0);
40      FTM_RS485_rx_en       : OUT    std_logic;
41      FTM_RS485_tx_d        : OUT    std_logic;
42      FTM_RS485_tx_en       : OUT    std_logic;
43      RSRLOAD               : OUT    std_logic                     := '0';
44      SRCLK                 : OUT    std_logic                     := '0';
45      SRIN_out              : OUT    std_logic                     := '0';
46      adc_oeb               : OUT    std_logic                     := '1';
47      alarm_refclk_too_high : OUT    std_logic;
48      alarm_refclk_too_low  : OUT    std_logic;
49      amber                 : OUT    std_logic;
50      counter_result        : OUT    std_logic_vector (11 DOWNTO 0);
51      dac_cs                : OUT    std_logic;
52      debug_data_ram_empty  : OUT    std_logic;
53      debug_data_valid      : OUT    std_logic;
54      denable               : OUT    std_logic                     := '0';              -- default domino wave off
55      drs_channel_id        : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
56      drs_dwrite            : OUT    std_logic                     := '1';
57      green                 : OUT    std_logic;
58      led                   : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
59      mem_manager_state     : OUT    std_logic_vector (3 DOWNTO 0);                     -- state is encoded here ... useful for debugging.
60      mosi                  : OUT    std_logic                     := '0';
61      red                   : OUT    std_logic;
62      sclk                  : OUT    std_logic;
63      sensor_cs             : OUT    std_logic_vector (3 DOWNTO 0);
64      socket_tx_free_out    : OUT    std_logic_vector (16 DOWNTO 0);                    -- 17bit value .. that's true
65      trigger_veto          : OUT    std_logic                     := '1';
66      w5300_state           : OUT    std_logic_vector (7 DOWNTO 0);                     -- state is encoded here ... useful for debugging.
67      wiz_addr              : OUT    std_logic_vector (9 DOWNTO 0);
68      wiz_cs                : OUT    std_logic                     := '1';
69      wiz_rd                : OUT    std_logic                     := '1';
70      wiz_reset             : OUT    std_logic                     := '1';
71      wiz_wr                : OUT    std_logic                     := '1';
72      sio                   : INOUT  std_logic;
73      wiz_data              : INOUT  std_logic_vector (15 DOWNTO 0)
74   );
75
76-- Declarations
77
78END FAD_main ;
79
80--
81-- VHDL Architecture FACT_FAD_lib.FAD_main.struct
82--
83-- Created:
84--          by - dneise.UNKNOWN (E5B-LABOR6)
85--          at - 12:11:20 03.06.2011
86--
87-- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
88--
89library ieee;
90use ieee.std_logic_1164.all;
91use IEEE.STD_LOGIC_ARITH.all;
92use ieee.STD_LOGIC_UNSIGNED.all;
93
94library fact_fad_lib;
95use fact_fad_lib.fad_definitions.all;
96
97library UNISIM;
98--use UNISIM.VComponents.all;
99USE IEEE.NUMERIC_STD.all;
100USE IEEE.std_logic_signed.all;
101USE fact_fad_lib.fad_rs485_constants.all;
102
103LIBRARY FACT_FAD_lib;
104
105ARCHITECTURE struct OF FAD_main IS
106
107   -- Architecture declarations
108
109   -- Internal signal declarations
110   SIGNAL CLK_25                       : std_logic;
111   SIGNAL DCM_PS_status                : std_logic_vector(7 DOWNTO 0)                 := (OTHERS => '0');
112   SIGNAL DCM_locked_status            : std_logic;
113   SIGNAL DCM_ready_status             : std_logic;
114   --
115
116-- EVT HEADER - part 2  --> FTM trigger informaton, comes in late ...
117-- during EVT header wrinting, this field is left out ... and only written into event header,
118-- when the DRS chip were read out already.
119   SIGNAL FTM_RS485_ready              : std_logic;
120   SIGNAL I_really_want_dwrite         : STD_LOGIC;
121   SIGNAL SRCLK1                       : std_logic                                    := '0';
122   SIGNAL adc_clk_en                   : std_logic;
123   SIGNAL adc_data_array_int           : adc_data_array_type;
124   SIGNAL adc_otr                      : std_logic_vector(3 DOWNTO 0);
125   SIGNAL addr_out                     : std_logic_vector(RAMADDRWIDTH64b-1 DOWNTO 0);
126   SIGNAL c_trigger_enable             : std_logic                                    := '0';
127   SIGNAL c_trigger_mult               : std_logic_vector(15 DOWNTO 0);
128   SIGNAL cont_trigger                 : std_logic;
129   SIGNAL current_dac_array            : dac_array_type                               := ( others => 0);
130   SIGNAL dac_setting                  : dac_array_type                               := DEFAULT_DAC;        --<<-- default defined in fad_definitions.vhd
131   SIGNAL data_out                     : std_logic_vector(63 DOWNTO 0);
132   SIGNAL data_ram_empty               : std_logic;
133   SIGNAL data_valid_ack               : std_logic                                    := '0';
134   SIGNAL denable_prim                 : std_logic                                    := '0';                -- default domino wave off
135   SIGNAL denable_sig                  : std_logic                                    := '0';                -- default domino wave off
136   SIGNAL dg_config_done               : std_logic;
137   SIGNAL dg_start_config              : std_logic                                    := '0';
138   SIGNAL din1                         : std_logic                                    := '0';                -- default domino wave off
139   SIGNAL dna                          : STD_LOGIC_VECTOR(63 DOWNTO 0)                := (others => '0');
140   SIGNAL dout                         : STD_LOGIC;
141   SIGNAL dout0                        : STD_LOGIC;
142   SIGNAL dout1                        : STD_LOGIC;
143   SIGNAL dout2                        : STD_LOGIC;
144   SIGNAL dout3                        : STD_LOGIC;
145   SIGNAL dout4                        : STD_LOGIC;
146   SIGNAL drs_clk_en                   : std_logic                                    := '0';
147   SIGNAL drs_read_s_cell              : std_logic                                    := '0';
148   SIGNAL drs_read_s_cell_ready        : std_logic;
149   -- --
150--      drs_dwrite : out std_logic := '1';
151   SIGNAL drs_readout_ready            : std_logic                                    := '0';
152   SIGNAL drs_readout_ready_ack        : std_logic;
153   SIGNAL drs_readout_started          : std_logic;
154   SIGNAL drs_s_cell_array             : drs_s_cell_array_type;
155   SIGNAL drs_srin_data                : std_logic_vector(7 DOWNTO 0)                 := (others => '0');
156   SIGNAL dwrite_enable_w5300          : std_logic                                    := '1';
157   SIGNAL dwrite_global_enable         : std_logic                                    := '1';
158   SIGNAL dwrite_trigger_manager       : std_logic                                    := '1';
159   SIGNAL enable_i                     : std_logic;
160   SIGNAL enabled_trigger_or_s_trigger : std_logic;
161   SIGNAL is_idle                      : std_logic;
162   SIGNAL memory_manager_config_start  : std_logic                                    := '0';
163   SIGNAL memory_manager_config_valid  : std_logic;
164   SIGNAL package_length               : std_logic_vector(15 DOWNTO 0);
165   SIGNAL ps_direction                 : std_logic                                    := '1';                -- default phase shift upwards
166   SIGNAL ps_do_phase_shift            : std_logic                                    := '0';                --pulse this to phase shift once
167   SIGNAL ps_reset                     : std_logic                                    := '0';                -- pulse this to reset the variable phase shift
168   SIGNAL ram_addr                     : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0);
169   SIGNAL ram_data                     : std_logic_vector(15 DOWNTO 0);
170   SIGNAL ram_start_addr               : std_logic_vector(RAMADDRWIDTH64b-1 DOWNTO 0);
171   SIGNAL ram_write_ea                 : std_logic;
172   SIGNAL ram_write_ready              : std_logic                                    := '0';
173   SIGNAL ready                        : STD_LOGIC                                    := '0';
174   SIGNAL rec_timeout_occured          : std_logic                                    := '0';
175   SIGNAL reset_synch_i                : std_logic;
176   SIGNAL reset_trigger_id             : std_logic                                    := '0';
177   SIGNAL roi_max                      : roi_max_type;
178   SIGNAL roi_setting                  : roi_array_type;
179   SIGNAL rs465_data                   : std_logic_vector(55 DOWNTO 0);                                      --7 byte
180   -- EVT HEADER - part 6
181   SIGNAL runnumber                    : std_logic_vector(31 DOWNTO 0);
182   SIGNAL s_trigger                    : std_logic;
183   SIGNAL s_trigger_or_cont_trigger    : std_logic;
184   SIGNAL sclk_enable                  : std_logic;
185   SIGNAL sensor_array                 : sensor_array_type;
186   SIGNAL sensor_ready                 : std_logic;
187   SIGNAL socks_connected              : std_logic;
188   SIGNAL socks_waiting                : std_logic;
189   SIGNAL software_trigger_in          : std_logic;
190   SIGNAL spi_interface_config_start   : std_logic                                    := '0';
191   SIGNAL spi_interface_config_valid   : std_logic;
192   SIGNAL srclk_enable                 : std_logic                                    := '0';
193   SIGNAL srin_write_ack               : std_logic                                    := '0';
194   SIGNAL srin_write_ready             : std_logic                                    := '0';
195   SIGNAL start_srin_write_8b          : std_logic;
196   SIGNAL time                         : std_logic_vector(31 DOWNTO 0);
197   SIGNAL trigger_enable               : std_logic;
198   SIGNAL trigger_id                   : std_logic_vector(31 DOWNTO 0);
199   SIGNAL trigger_or_s_trigger         : std_logic;
200   SIGNAL trigger_out                  : std_logic;
201   SIGNAL wiz_number_of_channels       : std_logic_vector(3 DOWNTO 0)                 := (others => '0');
202   SIGNAL wiz_ram_start_addr           : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0) := (others => '0');
203   SIGNAL wiz_write_ea                 : std_logic                                    := '0';
204   SIGNAL wiz_write_end                : std_logic                                    := '0';
205   SIGNAL wiz_write_header             : std_logic                                    := '0';
206   SIGNAL wiz_write_length             : std_logic_vector(16 DOWNTO 0)                := (others => '0');
207   SIGNAL write_ea                     : std_logic_vector(0 DOWNTO 0)                 := "0";
208
209   -- Implicit buffer signal declarations
210   SIGNAL CLK_25_PS_internal             : std_logic;
211   SIGNAL CLK_50_internal                : std_logic;
212   SIGNAL alarm_refclk_too_high_internal : std_logic;
213   SIGNAL alarm_refclk_too_low_internal  : std_logic;
214   SIGNAL counter_result_internal        : std_logic_vector (11 DOWNTO 0);
215
216
217   -- ModuleWare signal declarations(v1.9) for instance 'U_0' of 'split'
218   SIGNAL mw_U_0temp_din : std_logic_vector(3 DOWNTO 0);
219
220   -- Component Declarations
221   COMPONENT FAD_rs485_receiver
222   GENERIC (
223      -- defined in fad_rs485_definitions.fad_rs485_constants
224      RX_BYTES : integer := RS485_MESSAGE_LEN_BYTES;         -- no. of bytes to receive
225      RX_WIDTH : integer := RS485_MESSAGE_LEN_BYTES * 8      -- no. of bits to receive
226   );
227   PORT (
228      rec_clk             : IN     std_logic;
229      rec_start           : IN     std_logic;
230      rx_d                : IN     std_logic;
231      rec_dout            : OUT    std_logic_vector (RX_WIDTH - 1 DOWNTO 0) := (others => '0');
232      rec_timeout_occured : OUT    std_logic                                := '0';
233      rec_valid           : OUT    std_logic                                := '0';
234      rx_en               : OUT    std_logic;
235      tx_d                : OUT    std_logic;
236      tx_en               : OUT    std_logic
237   );
238   END COMPONENT;
239   COMPONENT REFCLK_counter
240   PORT (
241      clk                   : IN     std_logic;
242      refclk_in             : IN     std_logic;
243      alarm_refclk_too_high : OUT    std_logic                      := '0';
244      alarm_refclk_too_low  : OUT    std_logic                      := '0';
245      counter_result        : OUT    std_logic_vector (11 DOWNTO 0) := (others => '0')
246   );
247   END COMPONENT;
248   COMPONENT adc_buffer
249   PORT (
250      adc_data_array     : IN     adc_data_array_type;
251      adc_otr_array      : IN     std_logic_vector (3 DOWNTO 0);
252      clk_ps             : IN     std_logic;
253      adc_data_array_int : OUT    adc_data_array_type;
254      adc_otr            : OUT    std_logic_vector (3 DOWNTO 0)
255   );
256   END COMPONENT;
257   COMPONENT clock_generator_var_ps
258   PORT (
259      CLK             : IN     std_logic ;
260      RST_IN          : IN     std_logic ;
261      direction       : IN     std_logic ;
262      do_shift        : IN     std_logic ;
263      CLK_25          : OUT    std_logic ;
264      CLK_25_PS       : OUT    std_logic ;
265      CLK_50          : OUT    std_logic ;
266      locked_status_o : OUT    std_logic ;
267      offset          : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
268      ready_status_o  : OUT    std_logic 
269   );
270   END COMPONENT;
271   COMPONENT continous_pulser
272   GENERIC (
273      MINIMAL_TRIGGER_WAIT_TIME : integer := 250000;
274      TRIGGER_WIDTH             : integer := 5
275   );
276   PORT (
277      CLK        : IN     std_logic;
278      enable     : IN     std_logic;
279      multiplier : IN     std_logic_vector (15 DOWNTO 0);
280      trigger    : OUT    std_logic
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      -- for debugging
300      state                      : OUT    std_logic_vector (7 DOWNTO 0);
301      is_idle                    : OUT    std_logic ;
302      clk                        : IN     std_logic ;                                     -- CLK_25.
303      data_out                   : OUT    std_logic_vector (63 DOWNTO 0);
304      addr_out                   : OUT    std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
305      dataRAM_write_ea_o         : OUT    std_logic_vector (0 DOWNTO 0) := "0";
306      ram_start_addr             : IN     std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
307      ram_write_ea               : IN     std_logic ;
308      ram_write_ready            : OUT    std_logic                     := '0';
309      roi_array                  : IN     roi_array_type ;
310      roi_max                    : IN     roi_max_type ;
311      sensor_array               : IN     sensor_array_type ;
312      sensor_ready               : IN     std_logic ;
313      dac_array                  : IN     dac_array_type ;
314      config_start               : IN     std_logic ;
315      config_done                : OUT    std_logic                     := '0';
316      -- EVT HEADER - part 1
317      package_length             : IN     std_logic_vector (15 DOWNTO 0);
318      pll_lock                   : IN     std_logic_vector ( 3 DOWNTO 0);
319      dwrite_enable_in           : IN     std_logic ;
320      denable_enable_in          : IN     std_logic ;
321      -- EVT HEADER - part 2  --> FTM trigger informaton, comes in late ...
322      -- during EVT header wrinting, this field is left out ... and only written into event header,
323      -- when the DRS chip were read out already.
324      FTM_RS485_ready            : IN     std_logic ;
325      FTM_trigger_info           : IN     std_logic_vector (55 DOWNTO 0);                 --7 byte
326      FTM_receiver_status        : IN     std_logic ;
327      -- EVT HEADER - part 3
328      fad_event_counter          : IN     std_logic_vector (31 DOWNTO 0);
329      refclk_counter             : IN     std_logic_vector (11 DOWNTO 0);
330      refclk_too_high            : IN     std_logic ;
331      refclk_too_low             : IN     std_logic ;
332      -- EVT HEADER - part 4
333      board_id                   : IN     std_logic_vector (3 DOWNTO 0);
334      crate_id                   : IN     std_logic_vector (1 DOWNTO 0);
335      DCM_PS_status              : IN     std_logic_vector (7 DOWNTO 0);
336      DCM_locked_status          : IN     std_logic ;
337      DCM_ready_status           : IN     std_logic ;
338      SPI_SCLK_enable_status     : IN     std_logic ;
339      TRG_GEN_div                : IN     std_logic_vector (15 DOWNTO 0);
340      -- EVT HEADER - part 5
341      dna                        : IN     std_logic_vector (63 DOWNTO 0);
342      -- EVT HEADER - part 6
343      runnumber                  : IN     std_logic_vector (31 DOWNTO 0);
344      timer_value                : IN     std_logic_vector (31 DOWNTO 0);                 -- time in units of 100us
345      hardware_trigger_in        : IN     std_logic ;
346      software_trigger_in        : IN     std_logic ;
347      adc_data_array             : IN     adc_data_array_type ;
348      adc_output_enable_inverted : OUT    std_logic                     := '1';
349      adc_clk_en                 : OUT    std_logic                     := '0';
350      adc_otr                    : IN     std_logic_vector (3 DOWNTO 0);
351      drs_channel_id             : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
352      --drs_dwrite : out std_logic := '1';
353      drs_readout_ready          : OUT    std_logic                     := '0';
354      drs_readout_ready_ack      : IN     std_logic ;
355      drs_clk_en                 : OUT    std_logic                     := '0';
356      start_read_drs_stop_cell   : OUT    std_logic                     := '0';
357      drs_srin_write_8b          : OUT    std_logic                     := '0';
358      drs_srin_write_ack         : IN     std_logic ;
359      drs_srin_data              : OUT    std_logic_vector (7 DOWNTO 0) := (others => '0');
360      drs_srin_write_ready       : IN     std_logic ;
361      drs_read_s_cell_ready      : IN     std_logic ;
362      drs_s_cell_array           : IN     drs_s_cell_array_type ;
363      drs_readout_started        : OUT    std_logic                     := '0';
364      trigger_veto               : OUT    std_logic                     := '1'
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      WAITING_DIVIDER       : integer := 500000000
398   );
399   PORT (
400      CLK                    : IN     std_logic;
401      refclk_too_high        : IN     std_logic;
402      refclk_too_low         : IN     std_logic;
403      socks_connected        : IN     std_logic;
404      socks_waiting          : IN     std_logic;
405      trigger                : IN     std_logic;
406      additional_flasher_out : OUT    std_logic;
407      amber                  : OUT    std_logic;
408      green                  : OUT    std_logic;
409      red                    : OUT    std_logic
410   );
411   END COMPONENT;
412   COMPONENT memory_manager_2
413   GENERIC (
414      RAM_ADDR_WIDTH_64B : integer := 12;
415      RAM_ADDR_WIDTH_16B : integer := 14
416   );
417   PORT (
418      clk                    : IN     std_logic;
419      config_start           : IN     std_logic;
420      dg_config_done         : IN     std_logic;
421      ram_write_ready        : IN     std_logic;
422      roi_array              : IN     roi_array_type;
423      wiz_read_done          : IN     std_logic;
424      config_ready           : OUT    std_logic                                        := '1';
425      data_ram_empty         : OUT    std_logic;
426      dg_start_config        : OUT    std_logic                                        := '0';
427      package_length         : OUT    std_logic_vector (15 DOWNTO 0)                   := (others => '0');
428      ram_start_addr         : OUT    std_logic_vector (RAM_ADDR_WIDTH_64B-1 DOWNTO 0) := (others => '0');
429      ram_write_ea           : OUT    std_logic                                        := '0';
430      roi_max                : OUT    roi_max_type                                     := (others => conv_std_logic_vector (0, 11));
431      state                  : OUT    std_logic_vector (3 DOWNTO 0);
432      wiz_number_of_channels : OUT    std_logic_vector (3 DOWNTO 0)                    := (others => '0');
433      wiz_ram_start_addr     : OUT    std_logic_vector (RAM_ADDR_WIDTH_16B-1 DOWNTO 0) := (others => '0');
434      wiz_write_ea           : OUT    std_logic                                        := '0';
435      wiz_write_end          : OUT    std_logic                                        := '0';
436      wiz_write_header       : OUT    std_logic                                        := '0';
437      wiz_write_length       : OUT    std_logic_vector (16 DOWNTO 0)                   := (others => '0')
438   );
439   END COMPONENT;
440   COMPONENT spi_interface
441   PORT (
442      clk_50MHz         : IN     std_logic ;
443      config_start      : IN     std_logic ;
444      dac_array         : IN     dac_array_type ;
445      sclk_enable_i     : IN     std_logic ;
446      config_ready      : OUT    std_logic ;
447      current_dac_array : OUT    dac_array_type  := ( others => 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      reset      : IN     std_logic ;
476      clk        : IN     std_logic 
477   );
478   END COMPONENT;
479   COMPONENT trigger_manager
480   PORT (
481      clk                   : IN     std_logic;
482      drs_readout_ready     : IN     std_logic;
483      trigger_in            : IN     std_logic;
484      drs_readout_ready_ack : OUT    std_logic  := '0';
485      drs_write             : OUT    std_logic  := '1';
486      trigger_out           : OUT    std_logic  := '0'
487   );
488   END COMPONENT;
489   COMPONENT w5300_modul
490   GENERIC (
491      RAM_ADDR_WIDTH : integer := 14
492   );
493   PORT (
494      state                         : OUT    std_logic_vector (7 DOWNTO 0);                                  -- state is encoded here ... useful for debugging.
495      debug_data_ram_empty          : OUT    std_logic ;
496      debug_data_valid              : OUT    std_logic ;
497      data_generator_idle_i         : IN     std_logic ;
498      socket_tx_free_out            : OUT    std_logic_vector (16 DOWNTO 0);                                 -- 17bit value .. that's true
499      clk                           : IN     std_logic ;
500      wiz_reset                     : OUT    std_logic                      := '1';
501      addr                          : OUT    std_logic_vector (9 DOWNTO 0);
502      data                          : INOUT  std_logic_vector (15 DOWNTO 0);
503      cs                            : OUT    std_logic                      := '1';
504      wr                            : OUT    std_logic                      := '1';
505      led                           : OUT    std_logic_vector (7 DOWNTO 0)  := (OTHERS => '0');
506      rd                            : OUT    std_logic                      := '1';
507      int                           : IN     std_logic ;
508      write_length                  : IN     std_logic_vector (16 DOWNTO 0);
509      ram_start_addr                : IN     std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
510      ram_data                      : IN     std_logic_vector (15 DOWNTO 0);
511      ram_addr                      : OUT    std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
512      data_valid                    : IN     std_logic ;
513      data_valid_ack                : OUT    std_logic                      := '0';
514      busy                          : OUT    std_logic                      := '1';
515      write_header_flag             : IN     std_logic ;
516      write_end_flag                : IN     std_logic ;
517      fifo_channels                 : IN     std_logic_vector (3 DOWNTO 0);
518      -- softtrigger:
519      s_trigger                     : OUT    std_logic                      := '0';
520      c_trigger_enable              : OUT    std_logic                      := '0';
521      c_trigger_mult                : OUT    std_logic_vector (15 DOWNTO 0) := conv_std_logic_vector(0 ,16); --subject TO changes
522      -- FAD configuration signals:
523      ------------------------------------------------------------------------------
524      memory_manager_config_start_o : OUT    std_logic                      := '0';
525      memory_manager_config_valid_i : IN     std_logic ;
526      spi_interface_config_start_o  : OUT    std_logic                      := '0';
527      spi_interface_config_valid_i  : IN     std_logic ;
528      --data_generator_config_start_o   : out std_logic := '0';
529      --data_generator_config_valid_i   : in std_logic;
530      dac_setting                   : OUT    dac_array_type                 := DEFAULT_DAC;                  --<<-- default defined in fad_definitions.vhd
531      roi_setting                   : OUT    roi_array_type                 := DEFAULT_ROI;                  --<<-- default defined in fad_definitions.vhd
532      runnumber                     : OUT    std_logic_vector (31 DOWNTO 0) := conv_std_logic_vector(0 ,32);
533      reset_trigger_id              : OUT    std_logic                      := '0';
534      data_ram_empty                : IN     std_logic ;
535      ------------------------------------------------------------------------------
536     
537      -- MAC/IP calculation signals:
538      ------------------------------------------------------------------------------
539      MAC_jumper                    : IN     std_logic_vector (1 DOWNTO 0);
540      BoardID                       : IN     std_logic_vector (3 DOWNTO 0);
541      CrateID                       : IN     std_logic_vector (1 DOWNTO 0);
542      ------------------------------------------------------------------------------
543     
544      -- user controllable enable signals
545      ------------------------------------------------------------------------------
546      trigger_enable                : OUT    std_logic ;
547      denable                       : OUT    std_logic                      := '0';                          -- default domino wave on. ... in case if REFCLK error ... REFCLK counter will override.
548      dwrite_enable                 : OUT    std_logic                      := '1';                          -- default DWRITE low.
549      sclk_enable                   : OUT    std_logic                      := '1';                          -- default DWRITE HIGH.
550      srclk_enable                  : OUT    std_logic                      := '1';                          -- default SRCLK on.
551      ------------------------------------------------------------------------------
552     
553      -- ADC CLK generator, is able to shift phase with respect to X_50M
554      -- these signals control the behavior of the digital clock manager (DCM)
555      ------------------------------------------------------------------------------
556      ps_direction                  : OUT    std_logic                      := '1';                          -- default phase shift upwards
557      ps_do_phase_shift             : OUT    std_logic                      := '0';                          --pulse this TO phase shift once
558      ps_reset                      : OUT    std_logic                      := '0';                          -- pulse this TO reset the variable phase shift
559      ps_ready                      : IN     std_logic ;
560      ------------------------------------------------------------------------------
561     
562      -- signals used to control FAD LED bahavior:
563      -- one of the three LEDs is used for com-status info
564      ------------------------------------------------------------------------------
565      socks_waiting                 : OUT    std_logic ;
566      socks_connected               : OUT    std_logic 
567      ------------------------------------------------------------------------------
568   );
569   END COMPONENT;
570
571   -- Optional embedded configurations
572   -- pragma synthesis_off
573   FOR ALL : FAD_rs485_receiver USE ENTITY FACT_FAD_lib.FAD_rs485_receiver;
574   FOR ALL : REFCLK_counter USE ENTITY FACT_FAD_lib.REFCLK_counter;
575   FOR ALL : adc_buffer USE ENTITY FACT_FAD_lib.adc_buffer;
576   FOR ALL : clock_generator_var_ps USE ENTITY FACT_FAD_lib.clock_generator_var_ps;
577   FOR ALL : continous_pulser USE ENTITY FACT_FAD_lib.continous_pulser;
578   FOR ALL : dataRAM_64b_16b_width14_5 USE ENTITY FACT_FAD_lib.dataRAM_64b_16b_width14_5;
579   FOR ALL : data_generator USE ENTITY FACT_FAD_lib.data_generator;
580   FOR ALL : dna_gen USE ENTITY FACT_FAD_lib.dna_gen;
581   FOR ALL : drs_pulser USE ENTITY FACT_FAD_lib.drs_pulser;
582   FOR ALL : led_controller USE ENTITY FACT_FAD_lib.led_controller;
583   FOR ALL : memory_manager_2 USE ENTITY FACT_FAD_lib.memory_manager_2;
584   FOR ALL : spi_interface USE ENTITY FACT_FAD_lib.spi_interface;
585   FOR ALL : timer USE ENTITY FACT_FAD_lib.timer;
586   FOR ALL : trigger_counter USE ENTITY FACT_FAD_lib.trigger_counter;
587   FOR ALL : trigger_manager USE ENTITY FACT_FAD_lib.trigger_manager;
588   FOR ALL : w5300_modul USE ENTITY FACT_FAD_lib.w5300_modul;
589   -- pragma synthesis_on
590
591
592BEGIN
593
594   -- ModuleWare code(v1.9) for instance 'I6' of 'and'
595   SRCLK <= SRCLK1 AND srclk_enable;
596
597   -- ModuleWare code(v1.9) for instance 'U_1' of 'and'
598   dout <= dout0 AND dout1 AND dout2 AND dout3;
599
600   -- ModuleWare code(v1.9) for instance 'U_4' of 'and'
601   dwrite_global_enable <= dwrite_enable_w5300 AND dout4;
602
603   -- ModuleWare code(v1.9) for instance 'and_1' of 'and'
604   ADC_CLK <= adc_clk_en AND CLK_25_PS_internal;
605
606   -- ModuleWare code(v1.9) for instance 'and_2' of 'and'
607   denable_sig <= denable_prim AND din1;
608
609   -- ModuleWare code(v1.9) for instance 'and_4' of 'and'
610   enabled_trigger_or_s_trigger <= trigger_or_s_trigger
611                                   AND trigger_enable;
612
613   -- ModuleWare code(v1.9) for instance 'and_5' of 'and'
614   drs_dwrite <= dwrite_trigger_manager AND dwrite_global_enable;
615
616   -- ModuleWare code(v1.9) for instance 'U_5' of 'assignment'
617   denable <= denable_sig;
618
619   -- ModuleWare code(v1.9) for instance 'U_6' of 'gnd'
620   software_trigger_in <= '0';
621
622   -- ModuleWare code(v1.9) for instance 'U_15' of 'gnd'
623   reset_synch_i <= '0';
624
625   -- ModuleWare code(v1.9) for instance 'inverter_1' of 'inv'
626   din1 <= NOT(alarm_refclk_too_low_internal);
627
628   -- ModuleWare code(v1.9) for instance 'U_2' of 'or'
629   dout4 <= dout OR I_really_want_dwrite;
630
631   -- ModuleWare code(v1.9) for instance 'or_1' of 'or'
632   s_trigger_or_cont_trigger <= s_trigger OR cont_trigger;
633
634   -- ModuleWare code(v1.9) for instance 'or_5' of 'or'
635   trigger_or_s_trigger <= s_trigger_or_cont_trigger OR trigger;
636
637   -- ModuleWare code(v1.9) for instance 'U_0' of 'split'
638   mw_U_0temp_din <= plllock_in;
639   u_0combo_proc: PROCESS (mw_U_0temp_din)
640   VARIABLE temp_din: std_logic_vector(3 DOWNTO 0);
641   BEGIN
642      temp_din := mw_U_0temp_din(3 DOWNTO 0);
643      dout0 <= temp_din(0);
644      dout1 <= temp_din(1);
645      dout2 <= temp_din(2);
646      dout3 <= temp_din(3);
647   END PROCESS u_0combo_proc;
648
649   -- ModuleWare code(v1.9) for instance 'U_3' of 'vdd'
650   I_really_want_dwrite <= '1';
651
652   -- ModuleWare code(v1.9) for instance 'U_14' of 'vdd'
653   enable_i <= '1';
654
655   -- Instance port mappings.
656   U_7 : FAD_rs485_receiver
657      GENERIC MAP (
658         RX_BYTES => RS485_MESSAGE_LEN_BYTES,            -- no. of bytes to receive
659         RX_WIDTH => RS485_MESSAGE_LEN_BYTES * 8         -- no. of bits to receive
660      )
661      PORT MAP (
662         rec_clk             => CLK_50_internal,
663         rx_d                => FTM_RS485_rx_d,
664         rx_en               => FTM_RS485_rx_en,
665         tx_d                => FTM_RS485_tx_d,
666         tx_en               => FTM_RS485_tx_en,
667         rec_start           => drs_readout_started,
668         rec_timeout_occured => rec_timeout_occured,
669         rec_dout            => rs465_data,
670         rec_valid           => FTM_RS485_ready
671      );
672   REFCLK_counter_main : REFCLK_counter
673      PORT MAP (
674         clk                   => CLK_50_internal,
675         refclk_in             => drs_refclk_in,
676         counter_result        => counter_result_internal,
677         alarm_refclk_too_high => alarm_refclk_too_high_internal,
678         alarm_refclk_too_low  => alarm_refclk_too_low_internal
679      );
680   I_main_adc_buffer : adc_buffer
681      PORT MAP (
682         clk_ps             => CLK_25_PS_internal,
683         adc_data_array     => adc_data_array,
684         adc_otr_array      => adc_otr_array,
685         adc_data_array_int => adc_data_array_int,
686         adc_otr            => adc_otr
687      );
688   clock_generator_instance : clock_generator_var_ps
689      PORT MAP (
690         CLK             => CLK,
691         RST_IN          => ps_reset,
692         direction       => ps_direction,
693         do_shift        => ps_do_phase_shift,
694         CLK_25          => CLK_25,
695         CLK_25_PS       => CLK_25_PS_internal,
696         CLK_50          => CLK_50_internal,
697         locked_status_o => DCM_locked_status,
698         offset          => DCM_PS_status,
699         ready_status_o  => DCM_ready_status
700      );
701   continous_pulser_instance : continous_pulser
702      GENERIC MAP (
703         MINIMAL_TRIGGER_WAIT_TIME => 25000,
704         TRIGGER_WIDTH             => 5
705      )
706      PORT MAP (
707         CLK        => CLK_25,
708         enable     => c_trigger_enable,
709         multiplier => c_trigger_mult,
710         trigger    => cont_trigger
711      );
712   dataRAM_instance : dataRAM_64b_16b_width14_5
713      PORT MAP (
714         clka  => CLK_25,
715         dina  => data_out,
716         addra => addr_out,
717         wea   => write_ea,
718         clkb  => CLK_50_internal,
719         addrb => ram_addr,
720         doutb => ram_data
721      );
722   I_main_data_generator : data_generator
723      GENERIC MAP (
724         RAM_ADDR_WIDTH => RAMADDRWIDTH64b
725      )
726      PORT MAP (
727         state                      => DG_state,
728         is_idle                    => is_idle,
729         clk                        => CLK_25,
730         data_out                   => data_out,
731         addr_out                   => addr_out,
732         dataRAM_write_ea_o         => write_ea,
733         ram_start_addr             => ram_start_addr,
734         ram_write_ea               => ram_write_ea,
735         ram_write_ready            => ram_write_ready,
736         roi_array                  => roi_setting,
737         roi_max                    => roi_max,
738         sensor_array               => sensor_array,
739         sensor_ready               => sensor_ready,
740         dac_array                  => current_dac_array,
741         config_start               => dg_start_config,
742         config_done                => dg_config_done,
743         package_length             => package_length,
744         pll_lock                   => plllock_in,
745         dwrite_enable_in           => dwrite_enable_w5300,
746         denable_enable_in          => denable_sig,
747         FTM_RS485_ready            => FTM_RS485_ready,
748         FTM_trigger_info           => rs465_data,
749         FTM_receiver_status        => rec_timeout_occured,
750         fad_event_counter          => trigger_id,
751         refclk_counter             => counter_result_internal,
752         refclk_too_high            => alarm_refclk_too_high_internal,
753         refclk_too_low             => alarm_refclk_too_low_internal,
754         board_id                   => board_id,
755         crate_id                   => crate_id,
756         DCM_PS_status              => DCM_PS_status,
757         DCM_locked_status          => DCM_locked_status,
758         DCM_ready_status           => DCM_ready_status,
759         SPI_SCLK_enable_status     => sclk_enable,
760         TRG_GEN_div                => c_trigger_mult,
761         dna                        => dna,
762         runnumber                  => runnumber,
763         timer_value                => time,
764         hardware_trigger_in        => trigger_out,
765         software_trigger_in        => software_trigger_in,
766         adc_data_array             => adc_data_array_int,
767         adc_output_enable_inverted => adc_oeb,
768         adc_clk_en                 => adc_clk_en,
769         adc_otr                    => adc_otr,
770         drs_channel_id             => drs_channel_id,
771         drs_readout_ready          => drs_readout_ready,
772         drs_readout_ready_ack      => drs_readout_ready_ack,
773         drs_clk_en                 => drs_clk_en,
774         start_read_drs_stop_cell   => drs_read_s_cell,
775         drs_srin_write_8b          => start_srin_write_8b,
776         drs_srin_write_ack         => srin_write_ack,
777         drs_srin_data              => drs_srin_data,
778         drs_srin_write_ready       => srin_write_ready,
779         drs_read_s_cell_ready      => drs_read_s_cell_ready,
780         drs_s_cell_array           => drs_s_cell_array,
781         drs_readout_started        => drs_readout_started,
782         trigger_veto               => trigger_veto
783      );
784   dna_gen_instance : dna_gen
785      PORT MAP (
786         clk   => CLK_25,
787         dna   => dna,
788         ready => ready
789      );
790   I_main_drs_pulser : drs_pulser
791      PORT MAP (
792         CLK                      => CLK_25,
793         start_endless_mode       => drs_clk_en,
794         start_read_stop_pos_mode => drs_read_s_cell,
795         SROUT_in_0               => SROUT_in_0,
796         SROUT_in_1               => SROUT_in_1,
797         SROUT_in_2               => SROUT_in_2,
798         SROUT_in_3               => SROUT_in_3,
799         stop_pos                 => drs_s_cell_array,
800         stop_pos_valid           => drs_read_s_cell_ready,
801         start_srin_write_8b      => start_srin_write_8b,
802         srin_write_ready         => srin_write_ready,
803         srin_write_ack           => srin_write_ack,
804         srin_data                => drs_srin_data,
805         SRIN_out                 => SRIN_out,
806         RSRLOAD                  => RSRLOAD,
807         SRCLK                    => SRCLK1
808      );
809   led_controller_instance : led_controller
810      GENERIC MAP (
811         HEARTBEAT_PWM_DIVIDER => 50000,
812         WAITING_DIVIDER       => 50000000
813      )
814      PORT MAP (
815         CLK                    => CLK_50_internal,
816         green                  => green,
817         amber                  => amber,
818         red                    => red,
819         additional_flasher_out => OPEN,
820         trigger                => drs_readout_started,
821         refclk_too_high        => alarm_refclk_too_high_internal,
822         refclk_too_low         => alarm_refclk_too_low_internal,
823         socks_waiting          => socks_waiting,
824         socks_connected        => socks_connected
825      );
826   Inst_memory_manager_2 : memory_manager_2
827      GENERIC MAP (
828         RAM_ADDR_WIDTH_64B => RAMADDRWIDTH64b,
829         RAM_ADDR_WIDTH_16B => RAMADDRWIDTH64b+2
830      )
831      PORT MAP (
832         state                  => mem_manager_state,
833         clk                    => CLK_25,
834         config_start           => memory_manager_config_start,
835         config_ready           => memory_manager_config_valid,
836         roi_array              => roi_setting,
837         roi_max                => roi_max,
838         package_length         => package_length,
839         wiz_number_of_channels => wiz_number_of_channels,
840         dg_start_config        => dg_start_config,
841         dg_config_done         => dg_config_done,
842         ram_write_ready        => ram_write_ready,
843         ram_write_ea           => ram_write_ea,
844         ram_start_addr         => ram_start_addr,
845         wiz_read_done          => data_valid_ack,
846         wiz_write_ea           => wiz_write_ea,
847         wiz_write_length       => wiz_write_length,
848         wiz_ram_start_addr     => wiz_ram_start_addr,
849         wiz_write_header       => wiz_write_header,
850         wiz_write_end          => wiz_write_end,
851         data_ram_empty         => data_ram_empty
852      );
853   I_main_SPI_interface : spi_interface
854      PORT MAP (
855         clk_50MHz         => CLK_50_internal,
856         config_start      => spi_interface_config_start,
857         dac_array         => dac_setting,
858         sclk_enable_i     => sclk_enable,
859         config_ready      => spi_interface_config_valid,
860         current_dac_array => current_dac_array,
861         dac_cs            => dac_cs,
862         mosi              => mosi,
863         sclk              => sclk,
864         sensor_array      => sensor_array,
865         sensor_cs         => sensor_cs,
866         sensor_ready      => sensor_ready,
867         miso              => sio
868      );
869   timer_instance : timer
870      GENERIC MAP (
871         TIMER_WIDTH => 32,
872         PRESCALER   => 5000
873      )
874      PORT MAP (
875         clk           => CLK_50_internal,
876         time_o        => time,
877         synch_i       => trigger_out,
878         synched_o     => OPEN,
879         reset_synch_i => reset_synch_i,
880         enable_i      => enable_i
881      );
882   trigger_counter_instance : trigger_counter
883      PORT MAP (
884         trigger_id => trigger_id,
885         trigger    => trigger_out,
886         reset      => reset_trigger_id,
887         clk        => CLK_25_PS_internal
888      );
889   trigger_manager_instance : trigger_manager
890      PORT MAP (
891         clk                   => CLK_25,
892         trigger_in            => enabled_trigger_or_s_trigger,
893         trigger_out           => trigger_out,
894         drs_write             => dwrite_trigger_manager,
895         drs_readout_ready     => drs_readout_ready,
896         drs_readout_ready_ack => drs_readout_ready_ack
897      );
898   w5300_modul_instance : w5300_modul
899      GENERIC MAP (
900         RAM_ADDR_WIDTH => RAMADDRWIDTH64b+2
901      )
902      PORT MAP (
903         state                         => w5300_state,
904         debug_data_ram_empty          => debug_data_ram_empty,
905         debug_data_valid              => debug_data_valid,
906         data_generator_idle_i         => is_idle,
907         socket_tx_free_out            => socket_tx_free_out,
908         clk                           => CLK_50_internal,
909         wiz_reset                     => wiz_reset,
910         addr                          => wiz_addr,
911         data                          => wiz_data,
912         cs                            => wiz_cs,
913         wr                            => wiz_wr,
914         led                           => led,
915         rd                            => wiz_rd,
916         int                           => wiz_int,
917         write_length                  => wiz_write_length,
918         ram_start_addr                => wiz_ram_start_addr,
919         ram_data                      => ram_data,
920         ram_addr                      => ram_addr,
921         data_valid                    => wiz_write_ea,
922         data_valid_ack                => data_valid_ack,
923         busy                          => OPEN,
924         write_header_flag             => wiz_write_header,
925         write_end_flag                => wiz_write_end,
926         fifo_channels                 => wiz_number_of_channels,
927         s_trigger                     => s_trigger,
928         c_trigger_enable              => c_trigger_enable,
929         c_trigger_mult                => c_trigger_mult,
930         memory_manager_config_start_o => memory_manager_config_start,
931         memory_manager_config_valid_i => memory_manager_config_valid,
932         spi_interface_config_start_o  => spi_interface_config_start,
933         spi_interface_config_valid_i  => spi_interface_config_valid,
934         dac_setting                   => dac_setting,
935         roi_setting                   => roi_setting,
936         runnumber                     => runnumber,
937         reset_trigger_id              => reset_trigger_id,
938         data_ram_empty                => data_ram_empty,
939         MAC_jumper                    => D_T_in,
940         BoardID                       => board_id,
941         CrateID                       => crate_id,
942         trigger_enable                => trigger_enable,
943         denable                       => denable_prim,
944         dwrite_enable                 => dwrite_enable_w5300,
945         sclk_enable                   => sclk_enable,
946         srclk_enable                  => srclk_enable,
947         ps_direction                  => ps_direction,
948         ps_do_phase_shift             => ps_do_phase_shift,
949         ps_reset                      => ps_reset,
950         ps_ready                      => DCM_ready_status,
951         socks_waiting                 => socks_waiting,
952         socks_connected               => socks_connected
953      );
954
955   -- Implicit buffered output assignments
956   CLK_25_PS             <= CLK_25_PS_internal;
957   CLK_50                <= CLK_50_internal;
958   alarm_refclk_too_high <= alarm_refclk_too_high_internal;
959   alarm_refclk_too_low  <= alarm_refclk_too_low_internal;
960   counter_result        <= counter_result_internal;
961
962END struct;
Note: See TracBrowser for help on using the repository browser.