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

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