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

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