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

Last change on this file since 10155 was 10155, checked in by neise, 9 years ago
highly unstable version !!!
File size: 38.0 KB
Line 
1-- VHDL Entity FACT_FAD_lib.FAD_main.symbol
2--
3-- Created:
4--          by - dneise.UNKNOWN (E5B-LABOR6)
5--          at - 13:26:27 14.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                      := '0';              -- default domino wave off
43      alarm_refclk_too_low   : OUT    std_logic                      := '0';              -- default domino wave off
44      amber                  : OUT    std_logic;
45      counter_result         : OUT    std_logic_vector (11 DOWNTO 0) := (others => '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 - 13:26:28 14.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;
90
91LIBRARY FACT_FAD_lib;
92
93ARCHITECTURE struct OF FAD_main IS
94
95   -- Architecture declarations
96
97   -- Internal signal declarations
98   SIGNAL CLK_25                 : std_logic;
99   SIGNAL SRCLK1                 : std_logic                                    := '0';
100   SIGNAL adc_data_array_int     : adc_data_array_type;
101   SIGNAL adc_otr                : std_logic_vector(3 DOWNTO 0);
102   SIGNAL addr_out               : std_logic_vector(RAMADDRWIDTH64b-1 DOWNTO 0);
103   SIGNAL c_trigger_enable       : std_logic                                    := '0';
104   SIGNAL c_trigger_mult         : std_logic_vector(7 DOWNTO 0)                 := (OTHERS => '1');    --subject to changes
105   SIGNAL config_addr            : std_logic_vector(7 DOWNTO 0);
106   SIGNAL config_busy            : std_logic;
107   SIGNAL config_data            : std_logic_vector(15 DOWNTO 0);
108   SIGNAL config_data_valid      : std_logic;
109   SIGNAL config_rd_en           : std_logic;
110   SIGNAL config_ready           : std_logic;
111   SIGNAL config_ready_cm        : std_logic;
112   SIGNAL config_ready_spi       : std_logic;
113   -- --
114   SIGNAL config_rw_ack          : std_logic                                    := '0';
115   -- --
116   SIGNAL config_rw_ready        : std_logic                                    := '0';
117   SIGNAL config_start           : std_logic                                    := '0';
118   SIGNAL config_start_cm        : std_logic;
119   SIGNAL config_start_spi       : std_logic                                    := '0';
120   SIGNAL config_started         : std_logic;
121   SIGNAL config_started_cu      : std_logic                                    := '0';
122   SIGNAL config_started_mm      : std_logic;
123   SIGNAL config_started_spi     : std_logic                                    := '0';
124   SIGNAL config_wr_en           : std_logic;
125   SIGNAL dac_array              : dac_array_type;
126   SIGNAL data_out               : std_logic_vector(63 DOWNTO 0);
127   SIGNAL denable_inhibit        : std_logic                                    := '0';                -- default domino wave off
128   SIGNAL denable_prim           : std_logic                                    := '0';                -- default domino wave off
129   SIGNAL din1                   : std_logic                                    := '0';                -- default domino wave off
130   SIGNAL dout                   : std_logic;
131   SIGNAL dout1                  : std_logic;
132   SIGNAL drs_clk_en             : std_logic                                    := '0';
133   SIGNAL drs_read_s_cell        : std_logic                                    := '0';
134   SIGNAL drs_read_s_cell_ready  : std_logic;
135   -- --
136--      drs_dwrite : out std_logic := '1';
137   SIGNAL drs_readout_ready      : std_logic                                    := '0';
138   SIGNAL drs_readout_ready_ack  : std_logic;
139   SIGNAL drs_readout_started    : std_logic;
140   SIGNAL drs_s_cell_array       : drs_s_cell_array_type;
141   SIGNAL drs_srin_data          : std_logic_vector(7 DOWNTO 0)                 := (others => '0');
142   SIGNAL dwrite                 : std_logic                                    := '1';
143   SIGNAL dwrite_enable          : std_logic                                    := '1';
144   SIGNAL new_config             : std_logic                                    := '0';
145   SIGNAL package_length         : std_logic_vector(15 DOWNTO 0);
146   SIGNAL ps_direction           : std_logic                                    := '1';                -- default phase shift upwards
147   SIGNAL ps_do_phase_shift      : std_logic                                    := '0';                --pulse this to phase shift once
148   SIGNAL ps_reset               : std_logic                                    := '0';                -- pulse this to reset the variable phase shift
149   SIGNAL ram_addr               : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0);
150   SIGNAL ram_data               : std_logic_vector(15 DOWNTO 0);
151   SIGNAL ram_start_addr         : std_logic_vector(RAMADDRWIDTH64b-1 DOWNTO 0);
152   SIGNAL ram_write_ea           : std_logic;
153   SIGNAL ram_write_ready        : std_logic                                    := '0';
154   -- --
155   SIGNAL ram_write_ready_ack    : std_logic                                    := '0';
156   SIGNAL roi_array              : roi_array_type;
157   SIGNAL roi_max                : roi_max_type;
158   SIGNAL s_trigger              : std_logic;
159   SIGNAL s_trigger_0            : std_logic;
160   SIGNAL sclk1                  : std_logic;
161   SIGNAL sclk_enable            : std_logic;
162   SIGNAL sensor_array           : sensor_array_type;
163   SIGNAL sensor_ready           : std_logic;
164   SIGNAL socks_connected        : std_logic;
165   SIGNAL socks_waiting          : std_logic;
166   SIGNAL srclk_enable           : std_logic                                    := '0';
167   SIGNAL srin_write_ack         : std_logic                                    := '0';
168   SIGNAL srin_write_ready       : std_logic                                    := '0';
169   SIGNAL start_srin_write_8b    : std_logic;
170   SIGNAL trigger1               : std_logic;
171   SIGNAL trigger_enable         : std_logic;
172   SIGNAL trigger_id             : std_logic_vector(47 DOWNTO 0);
173   SIGNAL trigger_out            : std_logic                                    := '0';
174   SIGNAL wiz_ack                : std_logic;
175   SIGNAL wiz_busy               : std_logic;
176   SIGNAL wiz_number_of_channels : std_logic_vector(3 DOWNTO 0)                 := (others => '0');
177   SIGNAL wiz_ram_start_addr     : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0) := (others => '0');
178   SIGNAL wiz_write_ea           : std_logic                                    := '0';
179   SIGNAL wiz_write_end          : std_logic                                    := '0';
180   SIGNAL wiz_write_header       : std_logic                                    := '0';
181   SIGNAL wiz_write_length       : std_logic_vector(16 DOWNTO 0)                := (others => '0');
182   SIGNAL write_ea               : std_logic_vector(0 DOWNTO 0)                 := "0";
183
184   -- Implicit buffer signal declarations
185   SIGNAL CLK_25_PS_internal             : std_logic;
186   SIGNAL CLK_50_internal                : std_logic;
187   SIGNAL alarm_refclk_too_high_internal : std_logic;
188   SIGNAL alarm_refclk_too_low_internal  : std_logic;
189
190
191   -- Component Declarations
192   COMPONENT REFCLK_counter
193   PORT (
194      clk                   : IN     std_logic;
195      refclk_in             : IN     std_logic;
196      alarm_refclk_too_high : OUT    std_logic                      := '0';
197      alarm_refclk_too_low  : OUT    std_logic                      := '0';
198      counter_result        : OUT    std_logic_vector (11 DOWNTO 0) := (others => '0')
199   );
200   END COMPONENT;
201   COMPONENT adc_buffer
202   PORT (
203      adc_data_array     : IN     adc_data_array_type;
204      adc_otr_array      : IN     std_logic_vector (3 DOWNTO 0);
205      clk_ps             : IN     std_logic;
206      adc_data_array_int : OUT    adc_data_array_type;
207      adc_otr            : OUT    std_logic_vector (3 DOWNTO 0)
208   );
209   END COMPONENT;
210   COMPONENT clock_generator_var_ps
211   PORT (
212      CLK       : IN     std_logic ;
213      RST_IN    : IN     std_logic ;
214      direction : IN     std_logic ;
215      do_shift  : IN     std_logic ;
216      CLK_25    : OUT    std_logic ;
217      CLK_25_PS : OUT    std_logic ;
218      CLK_50    : OUT    std_logic ;
219      offset    : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0')
220   );
221   END COMPONENT;
222   COMPONENT continous_pulser
223   GENERIC (
224      MINIMAL_TRIGGER_WAIT_TIME : integer := 250000
225   );
226   PORT (
227      CLK        : IN     std_logic;
228      enable     : IN     std_logic;
229      multiplier : IN     std_logic_vector (7 DOWNTO 0);
230      trigger    : OUT    std_logic
231   );
232   END COMPONENT;
233   COMPONENT control_unit
234   PORT (
235      clk               : IN     STD_LOGIC ;
236      config_addr       : IN     std_logic_vector (7 DOWNTO 0);
237      config_rd_en      : IN     std_logic ;
238      config_start      : IN     std_logic ;
239      config_wr_en      : IN     std_logic ;
240      config_busy       : OUT    std_logic ;
241      config_data_valid : OUT    std_logic ;
242      config_ready      : OUT    std_logic ;
243      -- --
244      config_rw_ack     : OUT    std_logic  := '0';
245      -- --
246      config_rw_ready   : OUT    std_logic  := '0';
247      config_started    : OUT    std_logic  := '0';
248      dac_array         : OUT    dac_array_type ;
249      roi_array         : OUT    roi_array_type ;
250      config_data       : INOUT  std_logic_vector (15 DOWNTO 0)
251   );
252   END COMPONENT;
253   COMPONENT dataRAM_64b_16b_width14_5
254   PORT (
255      clka  : IN     std_logic ;
256      dina  : IN     std_logic_VECTOR (63 DOWNTO 0);
257      addra : IN     std_logic_VECTOR (14 DOWNTO 0);
258      wea   : IN     std_logic_VECTOR (0 DOWNTO 0);
259      clkb  : IN     std_logic ;
260      addrb : IN     std_logic_VECTOR (16 DOWNTO 0);
261      doutb : OUT    std_logic_VECTOR (15 DOWNTO 0)
262   );
263   END COMPONENT;
264   COMPONENT data_generator
265   GENERIC (
266      RAM_ADDR_WIDTH : integer := 12
267   );
268   PORT (
269      --      led            : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
270      clk                   : IN     std_logic ;
271      data_out              : OUT    std_logic_vector (63 DOWNTO 0);
272      addr_out              : OUT    std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
273      write_ea              : OUT    std_logic_vector (0 DOWNTO 0) := "0";
274      ram_start_addr        : IN     std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
275      ram_write_ea          : IN     std_logic ;
276      ram_write_ready       : OUT    std_logic                     := '0';
277      -- --
278      ram_write_ready_ack   : IN     std_logic ;
279      -- --
280      config_start_mm       : OUT    std_logic                     := '0';
281      -- --
282      config_start_cm       : OUT    std_logic                     := '0';
283      -- --
284      config_start_spi      : OUT    std_logic                     := '0';
285      config_ready_mm       : IN     std_logic ;
286      config_ready_cm       : IN     std_logic ;
287      config_ready_spi      : IN     std_logic ;
288      config_started_mm     : IN     std_logic ;
289      config_started_cm     : IN     std_logic ;
290      config_started_spi    : IN     std_logic ;
291      roi_array             : IN     roi_array_type ;
292      roi_max               : IN     roi_max_type ;
293      sensor_array          : IN     sensor_array_type ;
294      sensor_ready          : IN     std_logic ;
295      dac_array             : IN     dac_array_type ;
296      package_length        : IN     std_logic_vector (15 DOWNTO 0);
297      board_id              : IN     std_logic_vector (3 DOWNTO 0);
298      crate_id              : IN     std_logic_vector (1 DOWNTO 0);
299      trigger_id            : IN     std_logic_vector (47 DOWNTO 0);
300      trigger               : IN     std_logic ;
301      --      s_trigger      : in std_logic;
302      new_config            : IN     std_logic ;
303      config_started        : OUT    std_logic                     := '0';
304      adc_data_array        : IN     adc_data_array_type ;
305      adc_oeb               : OUT    std_logic                     := '1';
306      adc_clk_en            : OUT    std_logic                     := '0';
307      adc_otr               : IN     std_logic_vector (3 DOWNTO 0);
308      drs_channel_id        : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
309      -- --
310      --      drs_dwrite : out std_logic := '1';
311      drs_readout_ready     : OUT    std_logic                     := '0';
312      drs_readout_ready_ack : IN     std_logic ;
313      -- --
314      drs_clk_en            : OUT    std_logic                     := '0';
315      -- --
316      drs_read_s_cell       : OUT    std_logic                     := '0';
317      drs_srin_write_8b     : OUT    std_logic                     := '0';
318      drs_srin_write_ack    : IN     std_logic ;
319      drs_srin_data         : OUT    std_logic_vector (7 DOWNTO 0) := (others => '0');
320      drs_srin_write_ready  : IN     std_logic ;
321      drs_read_s_cell_ready : IN     std_logic ;
322      drs_s_cell_array      : IN     drs_s_cell_array_type ;
323      drs_readout_started   : OUT    std_logic                     := '0'
324   );
325   END COMPONENT;
326   COMPONENT drs_pulser
327   PORT (
328      CLK                      : IN     std_logic;
329      SROUT_in_0               : IN     std_logic;
330      SROUT_in_1               : IN     std_logic;
331      SROUT_in_2               : IN     std_logic;
332      SROUT_in_3               : IN     std_logic;
333      srin_data                : IN     std_logic_vector (7 DOWNTO 0);
334      start_endless_mode       : IN     std_logic;
335      start_read_stop_pos_mode : IN     std_logic;
336      start_srin_write_8b      : IN     std_logic;
337      RSRLOAD                  : OUT    std_logic  := '0';
338      SRCLK                    : OUT    std_logic  := '0';
339      SRIN_out                 : OUT    std_logic  := '0';
340      srin_write_ack           : OUT    std_logic  := '0';
341      srin_write_ready         : OUT    std_logic  := '0';
342      stop_pos                 : OUT    drs_s_cell_array_type;
343      stop_pos_valid           : OUT    std_logic  := '0'
344   );
345   END COMPONENT;
346   COMPONENT led_controller
347   GENERIC (
348      HEARTBEAT_PWM_DIVIDER : integer := 500;
349      MAX_DELAY             : integer := 100;      --not used anymore at all :-(
350      WAITING_DIVIDER       : integer := 500000000
351   );
352   PORT (
353      CLK                    : IN     std_logic;
354      socks_connected        : IN     std_logic;
355      socks_waiting          : IN     std_logic;
356      trigger                : IN     std_logic;
357      additional_flasher_out : OUT    std_logic;
358      amber                  : OUT    std_logic;
359      green                  : OUT    std_logic;
360      red                    : OUT    std_logic
361   );
362   END COMPONENT;
363   COMPONENT memory_manager
364   GENERIC (
365      RAM_ADDR_WIDTH_64B : integer := 12;
366      RAM_ADDR_WIDTH_16B : integer := 14
367   );
368   PORT (
369      clk                    : IN     std_logic ;
370      config_start           : IN     std_logic ;
371      ram_write_ready        : IN     std_logic ;
372      -- --
373      ram_write_ready_ack    : OUT    std_logic                                        := '0';
374      -- --
375      roi_array              : IN     roi_array_type ;
376      ram_write_ea           : OUT    std_logic                                        := '0';
377      config_ready           : OUT    std_logic                                        := '0';
378      config_started         : OUT    std_logic                                        := '0';
379      roi_max                : OUT    roi_max_type                                     := (others => conv_std_logic_vector (0, 11));
380      package_length         : OUT    std_logic_vector (15 DOWNTO 0)                   := (others => '0');
381      wiz_ram_start_addr     : OUT    std_logic_vector (RAM_ADDR_WIDTH_16B-1 DOWNTO 0) := (others => '0');
382      wiz_write_length       : OUT    std_logic_vector (16 DOWNTO 0)                   := (others => '0');
383      wiz_number_of_channels : OUT    std_logic_vector (3 DOWNTO 0)                    := (others => '0');
384      wiz_write_ea           : OUT    std_logic                                        := '0';
385      wiz_write_header       : OUT    std_logic                                        := '0';
386      wiz_write_end          : OUT    std_logic                                        := '0';
387      wiz_busy               : IN     std_logic ;
388      wiz_ack                : IN     std_logic ;
389      ram_start_addr         : OUT    std_logic_vector (RAM_ADDR_WIDTH_64B-1 DOWNTO 0) := (others => '0')
390   );
391   END COMPONENT;
392   COMPONENT spi_interface
393   PORT (
394      clk_50MHz      : IN     std_logic ;
395      config_start   : IN     std_logic ;
396      dac_array      : IN     dac_array_type ;
397      config_ready   : OUT    std_logic ;
398      config_started : OUT    std_logic  := '0';
399      dac_cs         : OUT    std_logic ;
400      mosi           : OUT    std_logic  := '0';
401      sclk           : OUT    std_logic ;
402      sensor_array   : OUT    sensor_array_type ;
403      sensor_cs      : OUT    std_logic_vector (3 DOWNTO 0);
404      sensor_ready   : OUT    std_logic ;
405      miso           : INOUT  std_logic 
406   );
407   END COMPONENT;
408   COMPONENT trigger_counter
409   PORT (
410      trigger_id : OUT    std_logic_vector (47 DOWNTO 0);
411      trigger    : IN     std_logic ;
412      clk        : IN     std_logic 
413   );
414   END COMPONENT;
415   COMPONENT trigger_manager
416   PORT (
417      clk                   : IN     std_logic;
418      drs_readout_ready     : IN     std_logic;
419      trigger_in            : IN     std_logic;
420      drs_readout_ready_ack : OUT    std_logic  := '0';
421      drs_write             : OUT    std_logic  := '1';
422      trigger_out           : OUT    std_logic  := '0'
423   );
424   END COMPONENT;
425   COMPONENT w5300_modul
426   GENERIC (
427      RAM_ADDR_WIDTH : integer := 14
428   );
429   PORT (
430      clk               : IN     std_logic ;
431      wiz_reset         : OUT    std_logic                      := '1';
432      addr              : OUT    std_logic_vector (9 DOWNTO 0);
433      data              : INOUT  std_logic_vector (15 DOWNTO 0);
434      cs                : OUT    std_logic                      := '1';
435      wr                : OUT    std_logic                      := '1';
436      led               : OUT    std_logic_vector (7 DOWNTO 0)  := (OTHERS => '0');
437      rd                : OUT    std_logic                      := '1';
438      int               : IN     std_logic ;
439      write_length      : IN     std_logic_vector (16 DOWNTO 0);
440      ram_start_addr    : IN     std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
441      ram_data          : IN     std_logic_vector (15 DOWNTO 0);
442      ram_addr          : OUT    std_logic_vector (RAM_ADDR_WIDTH-1 DOWNTO 0);
443      data_valid        : IN     std_logic ;
444      data_valid_ack    : OUT    std_logic                      := '0';
445      busy              : OUT    std_logic                      := '1';
446      write_header_flag : IN     std_logic ;
447      write_end_flag    : IN     std_logic ;
448      fifo_channels     : IN     std_logic_vector (3 DOWNTO 0);
449      -- softtrigger:
450      s_trigger         : OUT    std_logic                      := '0';
451      c_trigger_enable  : OUT    std_logic                      := '0';
452      c_trigger_mult    : OUT    std_logic_vector (7 DOWNTO 0)  := (OTHERS => '1'); --subject TO changes
453      -- FAD configuration signals:
454      ------------------------------------------------------------------------------
455      -- start entire configuration chain
456      new_config        : OUT    std_logic                      := '0';
457      config_started    : IN     std_logic ;
458      -- read/write configRAM
459      config_addr       : OUT    std_logic_vector (7 DOWNTO 0);
460      config_data       : INOUT  std_logic_vector (15 DOWNTO 0) := (others => 'Z');
461      config_wr_en      : OUT    std_logic                      := '0';
462      config_rd_en      : OUT    std_logic                      := '0';
463      config_rw_ack     : IN     std_logic ;
464      config_rw_ready   : IN     std_logic ;
465      config_busy       : IN     std_logic ;
466      ------------------------------------------------------------------------------
467     
468      -- MAC/IP calculation signals:
469      ------------------------------------------------------------------------------
470      MAC_jumper        : IN     std_logic_vector (1 DOWNTO 0);
471      BoardID           : IN     std_logic_vector (3 DOWNTO 0);
472      CrateID           : IN     std_logic_vector (1 DOWNTO 0);
473      ------------------------------------------------------------------------------
474     
475      -- user controllable enable signals
476      ------------------------------------------------------------------------------
477      trigger_enable    : OUT    std_logic                      := '0';             -- default triggers are NOT accepted
478      denable           : OUT    std_logic                      := '0';             -- default domino wave off
479      dwrite_enable     : OUT    std_logic                      := '0';             -- default DWRITE low.
480      sclk_enable       : OUT    std_logic                      := '1';             -- default DWRITE HIGH.
481      srclk_enable      : OUT    std_logic                      := '1';             -- default SRCLK on.
482      ------------------------------------------------------------------------------
483     
484      -- ADC CLK generator, is able to shift phase with respect to X_50M
485      -- these signals control the behavior of the digital clock manager (DCM)
486      ------------------------------------------------------------------------------
487      ps_direction      : OUT    std_logic                      := '1';             -- default phase shift upwards
488      ps_do_phase_shift : OUT    std_logic                      := '0';             --pulse this TO phase shift once
489      ps_reset          : OUT    std_logic                      := '0';             -- pulse this TO reset the variable phase shift
490      ------------------------------------------------------------------------------
491     
492      -- signals used to control FAD LED bahavior:
493      -- one of the three LEDs is used for com-status info
494      ------------------------------------------------------------------------------
495      socks_waiting     : OUT    std_logic ;
496      socks_connected   : OUT    std_logic 
497      ------------------------------------------------------------------------------
498   );
499   END COMPONENT;
500
501   -- Optional embedded configurations
502   -- pragma synthesis_off
503   FOR ALL : REFCLK_counter USE ENTITY FACT_FAD_lib.REFCLK_counter;
504   FOR ALL : adc_buffer USE ENTITY FACT_FAD_lib.adc_buffer;
505   FOR ALL : clock_generator_var_ps USE ENTITY FACT_FAD_lib.clock_generator_var_ps;
506   FOR ALL : continous_pulser USE ENTITY FACT_FAD_lib.continous_pulser;
507   FOR ALL : control_unit USE ENTITY FACT_FAD_lib.control_unit;
508   FOR ALL : dataRAM_64b_16b_width14_5 USE ENTITY FACT_FAD_lib.dataRAM_64b_16b_width14_5;
509   FOR ALL : data_generator USE ENTITY FACT_FAD_lib.data_generator;
510   FOR ALL : drs_pulser USE ENTITY FACT_FAD_lib.drs_pulser;
511   FOR ALL : led_controller USE ENTITY FACT_FAD_lib.led_controller;
512   FOR ALL : memory_manager USE ENTITY FACT_FAD_lib.memory_manager;
513   FOR ALL : spi_interface USE ENTITY FACT_FAD_lib.spi_interface;
514   FOR ALL : trigger_counter USE ENTITY FACT_FAD_lib.trigger_counter;
515   FOR ALL : trigger_manager USE ENTITY FACT_FAD_lib.trigger_manager;
516   FOR ALL : w5300_modul USE ENTITY FACT_FAD_lib.w5300_modul;
517   -- pragma synthesis_on
518
519
520BEGIN
521
522   -- ModuleWare code(v1.9) for instance 'I5' of 'and'
523   drs_dwrite <= dwrite AND dwrite_enable;
524
525   -- ModuleWare code(v1.9) for instance 'I6' of 'and'
526   SRCLK <= SRCLK1 AND srclk_enable;
527
528   -- ModuleWare code(v1.9) for instance 'U_1' of 'and'
529   sclk <= sclk_enable AND sclk1;
530
531   -- ModuleWare code(v1.9) for instance 'U_5' of 'and'
532   denable <= denable_prim AND din1;
533
534   -- ModuleWare code(v1.9) for instance 'U_11' of 'and'
535   dout1 <= dout AND trigger_enable;
536
537   -- ModuleWare code(v1.9) for instance 'U_7' of 'inv'
538   din1 <= NOT(denable_inhibit);
539
540   -- ModuleWare code(v1.9) for instance 'U_6' of 'or'
541   denable_inhibit <= alarm_refclk_too_low_internal
542                      OR alarm_refclk_too_high_internal;
543
544   -- ModuleWare code(v1.9) for instance 'U_9' of 'or'
545   dout <= s_trigger OR trigger;
546
547   -- ModuleWare code(v1.9) for instance 'U_13' of 'or'
548   s_trigger <= s_trigger_0 OR trigger1;
549
550   -- Instance port mappings.
551   REFCLK_counter_main : REFCLK_counter
552      PORT MAP (
553         clk                   => CLK_50_internal,
554         refclk_in             => drs_refclk_in,
555         counter_result        => counter_result,
556         alarm_refclk_too_high => alarm_refclk_too_high_internal,
557         alarm_refclk_too_low  => alarm_refclk_too_low_internal
558      );
559   I_main_adc_buffer : adc_buffer
560      PORT MAP (
561         clk_ps             => CLK_25_PS_internal,
562         adc_data_array     => adc_data_array,
563         adc_otr_array      => adc_otr_array,
564         adc_data_array_int => adc_data_array_int,
565         adc_otr            => adc_otr
566      );
567   U_2 : clock_generator_var_ps
568      PORT MAP (
569         CLK       => CLK,
570         RST_IN    => ps_reset,
571         direction => ps_direction,
572         do_shift  => ps_do_phase_shift,
573         CLK_25    => CLK_25,
574         CLK_25_PS => CLK_25_PS_internal,
575         CLK_50    => CLK_50_internal,
576         offset    => OPEN
577      );
578   U_3 : continous_pulser
579      GENERIC MAP (
580         MINIMAL_TRIGGER_WAIT_TIME => 250000
581      )
582      PORT MAP (
583         CLK        => CLK_25,
584         enable     => c_trigger_enable,
585         multiplier => c_trigger_mult,
586         trigger    => trigger1
587      );
588   I_main_control_unit : control_unit
589      PORT MAP (
590         clk               => CLK_50_internal,
591         config_addr       => config_addr,
592         config_rd_en      => config_rd_en,
593         config_start      => config_start_cm,
594         config_wr_en      => config_wr_en,
595         config_busy       => config_busy,
596         config_data_valid => config_data_valid,
597         config_ready      => config_ready_cm,
598         config_rw_ack     => config_rw_ack,
599         config_rw_ready   => config_rw_ready,
600         config_started    => config_started_cu,
601         dac_array         => dac_array,
602         roi_array         => roi_array,
603         config_data       => config_data
604      );
605   U_4 : dataRAM_64b_16b_width14_5
606      PORT MAP (
607         clka  => CLK_25,
608         dina  => data_out,
609         addra => addr_out,
610         wea   => write_ea,
611         clkb  => CLK_50_internal,
612         addrb => ram_addr,
613         doutb => ram_data
614      );
615   I_main_data_generator : data_generator
616      GENERIC MAP (
617         RAM_ADDR_WIDTH => RAMADDRWIDTH64b
618      )
619      PORT MAP (
620         clk                   => CLK_25,
621         data_out              => data_out,
622         addr_out              => addr_out,
623         write_ea              => write_ea,
624         ram_start_addr        => ram_start_addr,
625         ram_write_ea          => ram_write_ea,
626         ram_write_ready       => ram_write_ready,
627         ram_write_ready_ack   => ram_write_ready_ack,
628         config_start_mm       => config_start,
629         config_start_cm       => config_start_cm,
630         config_start_spi      => config_start_spi,
631         config_ready_mm       => config_ready,
632         config_ready_cm       => config_ready_cm,
633         config_ready_spi      => config_ready_spi,
634         config_started_mm     => config_started_mm,
635         config_started_cm     => config_started_cu,
636         config_started_spi    => config_started_spi,
637         roi_array             => roi_array,
638         roi_max               => roi_max,
639         sensor_array          => sensor_array,
640         sensor_ready          => sensor_ready,
641         dac_array             => dac_array,
642         package_length        => package_length,
643         board_id              => board_id,
644         crate_id              => crate_id,
645         trigger_id            => trigger_id,
646         trigger               => trigger_out,
647         new_config            => new_config,
648         config_started        => config_started,
649         adc_data_array        => adc_data_array_int,
650         adc_oeb               => adc_oeb,
651         adc_clk_en            => adc_clk_en,
652         adc_otr               => adc_otr,
653         drs_channel_id        => drs_channel_id,
654         drs_readout_ready     => drs_readout_ready,
655         drs_readout_ready_ack => drs_readout_ready_ack,
656         drs_clk_en            => drs_clk_en,
657         drs_read_s_cell       => drs_read_s_cell,
658         drs_srin_write_8b     => start_srin_write_8b,
659         drs_srin_write_ack    => srin_write_ack,
660         drs_srin_data         => drs_srin_data,
661         drs_srin_write_ready  => srin_write_ready,
662         drs_read_s_cell_ready => drs_read_s_cell_ready,
663         drs_s_cell_array      => drs_s_cell_array,
664         drs_readout_started   => drs_readout_started
665      );
666   I_main_drs_pulser : drs_pulser
667      PORT MAP (
668         CLK                      => CLK_25,
669         start_endless_mode       => drs_clk_en,
670         start_read_stop_pos_mode => drs_read_s_cell,
671         SROUT_in_0               => SROUT_in_0,
672         SROUT_in_1               => SROUT_in_1,
673         SROUT_in_2               => SROUT_in_2,
674         SROUT_in_3               => SROUT_in_3,
675         stop_pos                 => drs_s_cell_array,
676         stop_pos_valid           => drs_read_s_cell_ready,
677         start_srin_write_8b      => start_srin_write_8b,
678         srin_write_ready         => srin_write_ready,
679         srin_write_ack           => srin_write_ack,
680         srin_data                => drs_srin_data,
681         SRIN_out                 => SRIN_out,
682         RSRLOAD                  => RSRLOAD,
683         SRCLK                    => SRCLK1
684      );
685   U_10 : led_controller
686      GENERIC MAP (
687         HEARTBEAT_PWM_DIVIDER => 50000,           -- 10kHz @ 50 MHz
688         MAX_DELAY             => 100,
689         WAITING_DIVIDER       => 50000000         -- 1Hz @ 50 MHz
690      )
691      PORT MAP (
692         CLK                    => CLK_50_internal,
693         green                  => green,
694         amber                  => amber,
695         red                    => red,
696         additional_flasher_out => additional_flasher_out,
697         trigger                => drs_readout_started,
698         socks_waiting          => socks_waiting,
699         socks_connected        => socks_connected
700      );
701   I_main_memory_manager : memory_manager
702      GENERIC MAP (
703         RAM_ADDR_WIDTH_64B => RAMADDRWIDTH64b,
704         RAM_ADDR_WIDTH_16B => RAMADDRWIDTH64b+2
705      )
706      PORT MAP (
707         clk                    => CLK_25,
708         config_start           => config_start,
709         ram_write_ready        => ram_write_ready,
710         ram_write_ready_ack    => ram_write_ready_ack,
711         roi_array              => roi_array,
712         ram_write_ea           => ram_write_ea,
713         config_ready           => config_ready,
714         config_started         => config_started_mm,
715         roi_max                => roi_max,
716         package_length         => package_length,
717         wiz_ram_start_addr     => wiz_ram_start_addr,
718         wiz_write_length       => wiz_write_length,
719         wiz_number_of_channels => wiz_number_of_channels,
720         wiz_write_ea           => wiz_write_ea,
721         wiz_write_header       => wiz_write_header,
722         wiz_write_end          => wiz_write_end,
723         wiz_busy               => wiz_busy,
724         wiz_ack                => wiz_ack,
725         ram_start_addr         => ram_start_addr
726      );
727   I_main_SPI_interface : spi_interface
728      PORT MAP (
729         clk_50MHz      => CLK_50_internal,
730         config_start   => config_start_spi,
731         dac_array      => dac_array,
732         config_ready   => config_ready_spi,
733         config_started => config_started_spi,
734         dac_cs         => dac_cs,
735         mosi           => mosi,
736         sclk           => sclk1,
737         sensor_array   => sensor_array,
738         sensor_cs      => sensor_cs,
739         sensor_ready   => sensor_ready,
740         miso           => sio
741      );
742   I_main_ext_trigger : trigger_counter
743      PORT MAP (
744         trigger_id => trigger_id,
745         trigger    => trigger_out,
746         clk        => CLK_25_PS_internal
747      );
748   U_12 : trigger_manager
749      PORT MAP (
750         clk                   => CLK_25,
751         trigger_in            => dout1,
752         trigger_out           => trigger_out,
753         drs_write             => dwrite,
754         drs_readout_ready     => drs_readout_ready,
755         drs_readout_ready_ack => drs_readout_ready_ack
756      );
757   I_main_ethernet : w5300_modul
758      GENERIC MAP (
759         RAM_ADDR_WIDTH => RAMADDRWIDTH64b+2
760      )
761      PORT MAP (
762         clk               => CLK_50_internal,
763         wiz_reset         => wiz_reset,
764         addr              => wiz_addr,
765         data              => wiz_data,
766         cs                => wiz_cs,
767         wr                => wiz_wr,
768         led               => led,
769         rd                => wiz_rd,
770         int               => wiz_int,
771         write_length      => wiz_write_length,
772         ram_start_addr    => wiz_ram_start_addr,
773         ram_data          => ram_data,
774         ram_addr          => ram_addr,
775         data_valid        => wiz_write_ea,
776         data_valid_ack    => wiz_ack,
777         busy              => wiz_busy,
778         write_header_flag => wiz_write_header,
779         write_end_flag    => wiz_write_end,
780         fifo_channels     => wiz_number_of_channels,
781         s_trigger         => s_trigger_0,
782         c_trigger_enable  => c_trigger_enable,
783         c_trigger_mult    => c_trigger_mult,
784         new_config        => new_config,
785         config_started    => config_started,
786         config_addr       => config_addr,
787         config_data       => config_data,
788         config_wr_en      => config_wr_en,
789         config_rd_en      => config_rd_en,
790         config_rw_ack     => config_rw_ack,
791         config_rw_ready   => config_rw_ready,
792         config_busy       => config_busy,
793         MAC_jumper        => D_T_in,
794         BoardID           => board_id,
795         CrateID           => crate_id,
796         denable           => denable_prim,
797         dwrite_enable     => dwrite_enable,
798         sclk_enable       => sclk_enable,
799         ps_direction      => ps_direction,
800         ps_do_phase_shift => ps_do_phase_shift,
801         ps_reset          => ps_reset,
802         srclk_enable      => srclk_enable,
803         trigger_enable    => trigger_enable,
804         socks_waiting     => socks_waiting,
805         socks_connected   => socks_connected
806      );
807
808   -- Implicit buffered output assignments
809   CLK_25_PS             <= CLK_25_PS_internal;
810   CLK_50                <= CLK_50_internal;
811   alarm_refclk_too_high <= alarm_refclk_too_high_internal;
812   alarm_refclk_too_low  <= alarm_refclk_too_low_internal;
813
814END struct;
Note: See TracBrowser for help on using the repository browser.