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

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