1 | --=======================================================================================
|
---|
2 | -- TITLE : Trigger generator
|
---|
3 | -- DESCRIPTION : Generates triggers from events, calibration pulses or external inputs
|
---|
4 | -- FILE : trigger_generator.vhd
|
---|
5 | -- COMPANY : Micro-Cameras & Space Exploration SA
|
---|
6 | --=======================================================================================
|
---|
7 | -- CREATION
|
---|
8 | -- DATE AUTHOR PROJECT REVISION
|
---|
9 | -- 14/03/2011 JGi 110314a
|
---|
10 | --=======================================================================================
|
---|
11 | -- MODIFICATION HISTORY
|
---|
12 | -- DATE AUTHOR PROJECT REVISION COMMENTS
|
---|
13 | -- 14/03/2011 JGi 110314a Description
|
---|
14 | -- 13/04/2011 JGi 110413a Update trigger enable management
|
---|
15 | -- 15/04/2011 JGi 110415a Update LP1 "N-out-of-40" logic detection
|
---|
16 | -- in order to allow user to reset it by
|
---|
17 | -- disabling LP1 pulse as trigger source if the
|
---|
18 | -- N is never reached and system is locked
|
---|
19 | --=======================================================================================
|
---|
20 | -- Library Definition
|
---|
21 | library ieee;
|
---|
22 | use ieee.std_logic_1164.all;
|
---|
23 | use ieee.numeric_std.all;
|
---|
24 |
|
---|
25 | library ftm_definitions;
|
---|
26 | use ftm_definitions.ftm_array_types.all;
|
---|
27 | use ftm_definitions.ftm_constants.all;
|
---|
28 |
|
---|
29 | -- Entity Definition
|
---|
30 | entity trigger_generator is
|
---|
31 | port( --clock
|
---|
32 | clk_250MHz : in std_logic;
|
---|
33 | --config inputs
|
---|
34 | start_run : in std_logic;
|
---|
35 | stop_run : in std_logic;
|
---|
36 | general_settings : in std_logic_vector(7 downto 0);
|
---|
37 | maj_coinc_n_phys : in std_logic_vector(5 downto 0);
|
---|
38 | maj_coinc_n_calib : in std_logic_vector(5 downto 0);
|
---|
39 | trigger_delay : in std_logic_vector(9 downto 0);
|
---|
40 | TIM_delay : in std_logic_vector(9 downto 0);
|
---|
41 | dead_time : in std_logic_vector(15 downto 0);
|
---|
42 | --trigger inputs
|
---|
43 | ext_trig_1 : in std_logic;
|
---|
44 | ext_trig_2 : in std_logic;
|
---|
45 | ext_veto : in std_logic;
|
---|
46 | FAD_busy_0 : in std_logic;
|
---|
47 | FAD_busy_1 : in std_logic;
|
---|
48 | FAD_busy_2 : in std_logic;
|
---|
49 | FAD_busy_3 : in std_logic;
|
---|
50 | phys_events : in std_logic_vector(5 downto 0);
|
---|
51 | calib_events : in std_logic_vector(5 downto 0);
|
---|
52 | LP1_pulse : in std_logic;
|
---|
53 | LP2_pulse : in std_logic;
|
---|
54 | PED_pulse : in std_logic;
|
---|
55 | --outputs
|
---|
56 | trigger_ID_done : out std_logic;
|
---|
57 | trigger_ID : out std_logic_vector(55 downto 0);
|
---|
58 | trigger_active : out std_logic;
|
---|
59 | trigger_signal : out std_logic;
|
---|
60 | TIM_signal : out std_logic);
|
---|
61 | end trigger_generator;
|
---|
62 |
|
---|
63 | -- Architecture Definition
|
---|
64 | architecture RTL of trigger_generator is
|
---|
65 |
|
---|
66 | component deadtime_generator is
|
---|
67 | port( clk_250MHz : in std_logic;
|
---|
68 | deadtime : in std_logic_vector(15 downto 0);
|
---|
69 | start : in std_logic;
|
---|
70 | waiting : out std_logic);
|
---|
71 | end component;
|
---|
72 |
|
---|
73 | signal i_deadtime : std_logic;
|
---|
74 |
|
---|
75 | component delayed_pulse is
|
---|
76 | generic( pulse_width : integer range 0 to 15);
|
---|
77 | port( clk_250MHz : in std_logic;
|
---|
78 | delay : in std_logic_vector(9 downto 0);
|
---|
79 | input : in std_logic;
|
---|
80 | output : out std_logic);
|
---|
81 | end component;
|
---|
82 |
|
---|
83 | signal i_trigger_signal : std_logic;
|
---|
84 | signal i_TIM_signal : std_logic;
|
---|
85 |
|
---|
86 | component trigger_ID_count is
|
---|
87 | port( clk_250MHz : in std_logic;
|
---|
88 | start_run : in std_logic;
|
---|
89 | stop_run : in std_logic;
|
---|
90 | maj_coinc_n_phys : in std_logic_vector(5 downto 0);
|
---|
91 | maj_coinc_n_calib : in std_logic_vector(5 downto 0);
|
---|
92 | trigger : in std_logic_vector(8 downto 0);
|
---|
93 | phys_trigger : in std_logic;
|
---|
94 | calib_trigger : in std_logic;
|
---|
95 | internal_trigger : in std_logic_vector(1 downto 0);
|
---|
96 | external_trigger : in std_logic_vector(1 downto 0);
|
---|
97 | trigger_ID_done : out std_logic;
|
---|
98 | trigger_ID : out std_logic_vector(55 downto 0));
|
---|
99 | end component;
|
---|
100 |
|
---|
101 | type t_reg is record
|
---|
102 | -- Internal register declaration
|
---|
103 | start_run : std_logic;
|
---|
104 | LP1_delay : std_logic_vector(2 downto 0);
|
---|
105 | LP2_delay : std_logic_vector(2 downto 0);
|
---|
106 | PED_delay : std_logic_vector(2 downto 0);
|
---|
107 | ext_trig_1 : std_logic_vector(2 downto 0);
|
---|
108 | ext_trig_2 : std_logic_vector(2 downto 0);
|
---|
109 | ext_veto : std_logic_vector(1 downto 0);
|
---|
110 | FAD_busy_0 : std_logic_vector(1 downto 0);
|
---|
111 | FAD_busy_1 : std_logic_vector(1 downto 0);
|
---|
112 | FAD_busy_2 : std_logic_vector(1 downto 0);
|
---|
113 | FAD_busy_3 : std_logic_vector(1 downto 0);
|
---|
114 | general_settings : std_logic_vector(7 downto 0);
|
---|
115 | maj_coinc_n_phys : std_logic_vector(5 downto 0);
|
---|
116 | maj_coinc_n_calib : std_logic_vector(5 downto 0);
|
---|
117 | enable_trigger : std_logic;
|
---|
118 | phys_compare : std_logic_vector(1 downto 0);
|
---|
119 | phys_trigger : std_logic;
|
---|
120 | ext_trigger : std_logic_vector(1 downto 0);
|
---|
121 | calib_compare : std_logic_vector(1 downto 0);
|
---|
122 | calib_trigger : std_logic;
|
---|
123 | wait_for_calib : std_logic;
|
---|
124 | internal_trigger : std_logic_vector(1 downto 0);
|
---|
125 | trigger : std_logic_vector(12 downto 0);
|
---|
126 | trigger_active : std_logic;
|
---|
127 | -- Ouput register declaration
|
---|
128 | end record;
|
---|
129 |
|
---|
130 | signal i_next_reg : t_reg := (start_run => '0',
|
---|
131 | LP1_delay => (others => '0'),
|
---|
132 | LP2_delay => (others => '0'),
|
---|
133 | PED_delay => (others => '0'),
|
---|
134 | ext_trig_1 => (others => '0'),
|
---|
135 | ext_trig_2 => (others => '0'),
|
---|
136 | ext_veto => (others => '0'),
|
---|
137 | FAD_busy_0 => (others => '0'),
|
---|
138 | FAD_busy_1 => (others => '0'),
|
---|
139 | FAD_busy_2 => (others => '0'),
|
---|
140 | FAD_busy_3 => (others => '0'),
|
---|
141 | general_settings => (others => '0'),
|
---|
142 | maj_coinc_n_phys => (others => '1'),
|
---|
143 | maj_coinc_n_calib => (others => '1'),
|
---|
144 | enable_trigger => '0',
|
---|
145 | phys_compare => (others => '0'),
|
---|
146 | phys_trigger => '0',
|
---|
147 | ext_trigger => (others => '0'),
|
---|
148 | calib_compare => (others => '0'),
|
---|
149 | calib_trigger => '0',
|
---|
150 | wait_for_calib => '0',
|
---|
151 | internal_trigger => (others => '0'),
|
---|
152 | trigger => (others => '0'),
|
---|
153 | trigger_active => '1');
|
---|
154 | signal i_reg : t_reg := (start_run => '0',
|
---|
155 | LP1_delay => (others => '0'),
|
---|
156 | LP2_delay => (others => '0'),
|
---|
157 | PED_delay => (others => '0'),
|
---|
158 | ext_trig_1 => (others => '0'),
|
---|
159 | ext_trig_2 => (others => '0'),
|
---|
160 | ext_veto => (others => '0'),
|
---|
161 | FAD_busy_0 => (others => '0'),
|
---|
162 | FAD_busy_1 => (others => '0'),
|
---|
163 | FAD_busy_2 => (others => '0'),
|
---|
164 | FAD_busy_3 => (others => '0'),
|
---|
165 | general_settings => (others => '0'),
|
---|
166 | maj_coinc_n_phys => (others => '1'),
|
---|
167 | maj_coinc_n_calib => (others => '1'),
|
---|
168 | enable_trigger => '0',
|
---|
169 | phys_compare => (others => '0'),
|
---|
170 | phys_trigger => '0',
|
---|
171 | ext_trigger => (others => '0'),
|
---|
172 | calib_compare => (others => '0'),
|
---|
173 | calib_trigger => '0',
|
---|
174 | wait_for_calib => '0',
|
---|
175 | internal_trigger => (others => '0'),
|
---|
176 | trigger => (others => '0'),
|
---|
177 | trigger_active => '1');
|
---|
178 |
|
---|
179 | begin
|
---|
180 |
|
---|
181 | -- Component instantiation
|
---|
182 | inst_deadtime: deadtime_generator
|
---|
183 | port map( clk_250MHz => clk_250MHz,
|
---|
184 | deadtime => dead_time,
|
---|
185 | start => i_reg.trigger(0),
|
---|
186 | waiting => i_deadtime);
|
---|
187 |
|
---|
188 | inst_phys_trig: delayed_pulse
|
---|
189 | generic map( pulse_width => TRIG_SIGNAL_PULSE_WIDTH)
|
---|
190 | port map( clk_250MHz => clk_250MHz,
|
---|
191 | delay => trigger_delay,
|
---|
192 | input => i_reg.trigger(1),
|
---|
193 | output => i_trigger_signal);
|
---|
194 |
|
---|
195 | trigger_signal <= i_trigger_signal and i_reg.start_run;
|
---|
196 |
|
---|
197 | inst_phys_TIM: delayed_pulse
|
---|
198 | generic map( pulse_width => TIM_SIGNAL_PULSE_WIDTH)
|
---|
199 | port map( clk_250MHz => clk_250MHz,
|
---|
200 | delay => TIM_delay,
|
---|
201 | input => i_reg.trigger(2),
|
---|
202 | output => i_TIM_signal);
|
---|
203 |
|
---|
204 | TIM_signal <= i_TIM_signal and i_reg.start_run;
|
---|
205 |
|
---|
206 | inst_trig_ID: trigger_ID_count
|
---|
207 | port map( clk_250MHz => clk_250MHz,
|
---|
208 | start_run => start_run,
|
---|
209 | stop_run => stop_run,
|
---|
210 | maj_coinc_n_phys => maj_coinc_n_phys,
|
---|
211 | maj_coinc_n_calib => maj_coinc_n_calib,
|
---|
212 | trigger => i_reg.trigger(12 downto 4),
|
---|
213 | phys_trigger => i_reg.phys_trigger,
|
---|
214 | calib_trigger => i_reg.calib_trigger,
|
---|
215 | internal_trigger => i_reg.internal_trigger,
|
---|
216 | external_trigger => i_reg.ext_trigger,
|
---|
217 | trigger_ID_done => trigger_ID_done,
|
---|
218 | trigger_ID => trigger_ID);
|
---|
219 |
|
---|
220 | -- Combinatorial logic
|
---|
221 | process(start_run, general_settings, maj_coinc_n_phys, maj_coinc_n_calib,
|
---|
222 | ext_trig_1, ext_trig_2, ext_veto, FAD_busy_0, FAD_busy_1, FAD_busy_2,
|
---|
223 | FAD_busy_3, phys_events, calib_events, LP1_pulse, LP2_pulse, PED_pulse,
|
---|
224 | i_deadtime, i_reg)
|
---|
225 | variable v_reg : t_reg := (start_run => '0',
|
---|
226 | LP1_delay => (others => '0'),
|
---|
227 | LP2_delay => (others => '0'),
|
---|
228 | PED_delay => (others => '0'),
|
---|
229 | ext_trig_1 => (others => '0'),
|
---|
230 | ext_trig_2 => (others => '0'),
|
---|
231 | ext_veto => (others => '0'),
|
---|
232 | FAD_busy_0 => (others => '0'),
|
---|
233 | FAD_busy_1 => (others => '0'),
|
---|
234 | FAD_busy_2 => (others => '0'),
|
---|
235 | FAD_busy_3 => (others => '0'),
|
---|
236 | general_settings => (others => '0'),
|
---|
237 | maj_coinc_n_phys => (others => '1'),
|
---|
238 | maj_coinc_n_calib => (others => '1'),
|
---|
239 | enable_trigger => '0',
|
---|
240 | phys_compare => (others => '0'),
|
---|
241 | phys_trigger => '0',
|
---|
242 | ext_trigger => (others => '0'),
|
---|
243 | calib_compare => (others => '0'),
|
---|
244 | calib_trigger => '0',
|
---|
245 | wait_for_calib => '0',
|
---|
246 | internal_trigger => (others => '0'),
|
---|
247 | trigger => (others => '0'),
|
---|
248 | trigger_active => '1');
|
---|
249 | begin
|
---|
250 | v_reg := i_reg;
|
---|
251 | --===================================================================================
|
---|
252 |
|
---|
253 | --===================================================================================
|
---|
254 | -- External inputs double-sync
|
---|
255 | --===================================================================================
|
---|
256 | v_reg.ext_trig_1(0) := ext_trig_1;
|
---|
257 | v_reg.ext_trig_1(1) := i_reg.ext_trig_1(0);
|
---|
258 | v_reg.ext_trig_1(2) := i_reg.ext_trig_1(1);
|
---|
259 | v_reg.ext_trig_2(0) := ext_trig_2;
|
---|
260 | v_reg.ext_trig_2(1) := i_reg.ext_trig_2(0);
|
---|
261 | v_reg.ext_trig_2(2) := i_reg.ext_trig_2(1);
|
---|
262 | v_reg.ext_veto(0) := ext_veto;
|
---|
263 | v_reg.ext_veto(1) := i_reg.ext_veto(0);
|
---|
264 | v_reg.FAD_busy_0(0) := FAD_busy_0;
|
---|
265 | v_reg.FAD_busy_0(1) := i_reg.FAD_busy_0(0);
|
---|
266 | v_reg.FAD_busy_1(0) := FAD_busy_1;
|
---|
267 | v_reg.FAD_busy_1(1) := i_reg.FAD_busy_1(0);
|
---|
268 | v_reg.FAD_busy_2(0) := FAD_busy_2;
|
---|
269 | v_reg.FAD_busy_2(1) := i_reg.FAD_busy_2(0);
|
---|
270 | v_reg.FAD_busy_3(0) := FAD_busy_3;
|
---|
271 | v_reg.FAD_busy_3(1) := i_reg.FAD_busy_3(0);
|
---|
272 | --===================================================================================
|
---|
273 |
|
---|
274 | --===================================================================================
|
---|
275 | -- Re-sync of calibration and pedestal triggers to the 250MHz clock
|
---|
276 | --===================================================================================
|
---|
277 | v_reg.LP1_delay(0) := LP1_pulse;
|
---|
278 | v_reg.LP1_delay(1) := i_reg.LP1_delay(0);
|
---|
279 | v_reg.LP1_delay(2) := i_reg.LP1_delay(1);
|
---|
280 | v_reg.LP2_delay(0) := LP2_pulse;
|
---|
281 | v_reg.LP2_delay(1) := i_reg.LP2_delay(0);
|
---|
282 | v_reg.LP2_delay(2) := i_reg.LP2_delay(1);
|
---|
283 | v_reg.PED_delay(0) := PED_pulse;
|
---|
284 | v_reg.PED_delay(1) := i_reg.PED_delay(0);
|
---|
285 | v_reg.PED_delay(2) := i_reg.PED_delay(1);
|
---|
286 | --===================================================================================
|
---|
287 |
|
---|
288 | --===================================================================================
|
---|
289 | -- Settings registration
|
---|
290 | --===================================================================================
|
---|
291 | v_reg.general_settings := general_settings;
|
---|
292 | v_reg.maj_coinc_n_phys := maj_coinc_n_phys;
|
---|
293 | v_reg.maj_coinc_n_calib := maj_coinc_n_calib;
|
---|
294 | --===================================================================================
|
---|
295 |
|
---|
296 | --===================================================================================
|
---|
297 | -- Master enable management
|
---|
298 | --===================================================================================
|
---|
299 | v_reg.start_run := start_run;
|
---|
300 | --===================================================================================
|
---|
301 |
|
---|
302 | --===================================================================================
|
---|
303 | -- Trigger generation
|
---|
304 | --===================================================================================
|
---|
305 | -- Enable trigger generation only if veto is not active, FAD are not busy and
|
---|
306 | -- deadtime is not enabled
|
---|
307 | if i_reg.trigger(3) = '1' or i_deadtime = '1' or
|
---|
308 | (i_reg.ext_veto(1) = '1' and i_reg.general_settings(1) = '1') or
|
---|
309 | i_reg.FAD_busy_0(1) = '1' or i_reg.FAD_busy_1(1) = '1' or
|
---|
310 | i_reg.FAD_busy_2(1) = '1' or i_reg.FAD_busy_3(1) = '1' then
|
---|
311 | v_reg.enable_trigger := '0';
|
---|
312 | else
|
---|
313 | v_reg.enable_trigger := '1';
|
---|
314 | end if;
|
---|
315 |
|
---|
316 | -- Compare number of detected physics event to the physics threshold
|
---|
317 | if phys_events >= i_reg.maj_coinc_n_phys then
|
---|
318 | v_reg.phys_compare(0) := '1';
|
---|
319 | else
|
---|
320 | v_reg.phys_compare(0) := '0';
|
---|
321 | end if;
|
---|
322 | v_reg.phys_compare(1) := i_reg.phys_compare(0);
|
---|
323 |
|
---|
324 | -- Activate physics trigger when enabled by settings and physics threhsold is reached
|
---|
325 | if i_reg.general_settings(7) = '1' and i_reg.wait_for_calib = '0' and
|
---|
326 | i_reg.phys_compare(0) = '1' and i_reg.phys_compare(1) = '0' and
|
---|
327 | i_reg.enable_trigger = '1' then
|
---|
328 | v_reg.phys_trigger := '1';
|
---|
329 | else
|
---|
330 | v_reg.phys_trigger := '0';
|
---|
331 | end if;
|
---|
332 |
|
---|
333 | -- Lock trigger generator when a pulse on LP1 is detected and wait for FTU events
|
---|
334 | -- counter reach the calibration threshold
|
---|
335 | if i_reg.LP1_delay(1) = '1' and i_reg.LP1_delay(2) = '0' and
|
---|
336 | general_settings(4) = '1' then
|
---|
337 | v_reg.wait_for_calib := '1';
|
---|
338 | -- If trigger is processed or disabled by user, reset detection logic to avoid
|
---|
339 | -- remaining in locked state
|
---|
340 | elsif i_reg.enable_trigger = '0' or general_settings(4) = '0' then
|
---|
341 | v_reg.wait_for_calib := '0';
|
---|
342 | end if;
|
---|
343 |
|
---|
344 | -- Compare number of detected physics event to the calibration threshold
|
---|
345 | if calib_events >= i_reg.maj_coinc_n_calib then
|
---|
346 | v_reg.calib_compare(0) := '1';
|
---|
347 | else
|
---|
348 | v_reg.calib_compare(0) := '0';
|
---|
349 | end if;
|
---|
350 | v_reg.calib_compare(1) := i_reg.calib_compare(0);
|
---|
351 |
|
---|
352 | -- Activate calibration trigger when enabled by settings and
|
---|
353 | -- calibration threhsold is reached
|
---|
354 | if i_reg.general_settings(4) = '1' and i_reg.wait_for_calib = '1' and
|
---|
355 | i_reg.calib_compare(0) = '1' and i_reg.calib_compare(1) = '0' and
|
---|
356 | i_reg.enable_trigger = '1' then
|
---|
357 | v_reg.calib_trigger := '1';
|
---|
358 | else
|
---|
359 | v_reg.calib_trigger := '0';
|
---|
360 | end if;
|
---|
361 |
|
---|
362 | -- Activate trigger number 1 from external NIM inputs
|
---|
363 | if i_reg.ext_trig_1(1) = '1' and i_reg.ext_trig_1(2) = '0' and
|
---|
364 | i_reg.general_settings(2) = '1' and i_reg.wait_for_calib = '0' and
|
---|
365 | i_reg.enable_trigger = '1' then
|
---|
366 | v_reg.ext_trigger(0) := '1';
|
---|
367 | else
|
---|
368 | v_reg.ext_trigger(0) := '0';
|
---|
369 | end if;
|
---|
370 |
|
---|
371 | -- Activate trigger number 2 from external NIM inputs
|
---|
372 | if i_reg.ext_trig_2(1) = '1' and i_reg.ext_trig_2(2) = '0' and
|
---|
373 | i_reg.general_settings(3) = '1' and i_reg.wait_for_calib = '0' and
|
---|
374 | i_reg.enable_trigger = '1' then
|
---|
375 | v_reg.ext_trigger(1) := '1';
|
---|
376 | else
|
---|
377 | v_reg.ext_trigger(1) := '0';
|
---|
378 | end if;
|
---|
379 |
|
---|
380 | -- Activate calibration trigger from LP2 pulse
|
---|
381 | if i_reg.LP2_delay(1) = '1' and i_reg.LP2_delay(2) = '0' and
|
---|
382 | i_reg.general_settings(5) = '1' and i_reg.wait_for_calib = '0' and
|
---|
383 | i_reg.enable_trigger = '1' then
|
---|
384 | v_reg.internal_trigger(0) := '1';
|
---|
385 | else
|
---|
386 | v_reg.internal_trigger(0) := '0';
|
---|
387 | end if;
|
---|
388 |
|
---|
389 | -- Activate calibration trigger from Pedestal signal
|
---|
390 | if i_reg.PED_delay(1) = '1' and i_reg.PED_delay(2) = '0' and
|
---|
391 | i_reg.general_settings(6) = '1' and i_reg.wait_for_calib = '0' and
|
---|
392 | i_reg.enable_trigger = '1' then
|
---|
393 | v_reg.internal_trigger(1) := '1';
|
---|
394 | else
|
---|
395 | v_reg.internal_trigger(1) := '0';
|
---|
396 | end if;
|
---|
397 |
|
---|
398 | -- Generate master trigger for deadtime, trigger and TIM signals,
|
---|
399 | -- triggers counting and ID generation
|
---|
400 | -- It is replicated to limit fanout and improve speed
|
---|
401 | v_reg.trigger(0) := i_reg.phys_trigger or i_reg.calib_trigger or
|
---|
402 | i_reg.ext_trigger(0) or i_reg.ext_trigger(1) or
|
---|
403 | i_reg.internal_trigger(0) or i_reg.internal_trigger(1);
|
---|
404 | v_reg.trigger(1) := v_reg.trigger(0);
|
---|
405 | v_reg.trigger(2) := v_reg.trigger(0);
|
---|
406 | v_reg.trigger(3) := v_reg.trigger(0);
|
---|
407 | v_reg.trigger(4) := v_reg.trigger(0);
|
---|
408 | v_reg.trigger(5) := v_reg.trigger(0);
|
---|
409 | v_reg.trigger(6) := v_reg.trigger(0);
|
---|
410 | v_reg.trigger(7) := v_reg.trigger(0);
|
---|
411 | v_reg.trigger(8) := v_reg.trigger(0);
|
---|
412 | v_reg.trigger(9) := v_reg.trigger(0);
|
---|
413 | v_reg.trigger(10) := v_reg.trigger(0);
|
---|
414 | v_reg.trigger(11) := v_reg.trigger(0);
|
---|
415 | v_reg.trigger(12) := v_reg.trigger(0);
|
---|
416 |
|
---|
417 | -- Manage trigger active signal
|
---|
418 | -- Set low when a trigger is processed or FAD are busy or veto is active
|
---|
419 | v_reg.trigger_active := i_reg.enable_trigger and not(i_reg.wait_for_calib);
|
---|
420 | --===================================================================================
|
---|
421 |
|
---|
422 | --===================================================================================
|
---|
423 | -- Drive register input
|
---|
424 | i_next_reg <= v_reg;
|
---|
425 |
|
---|
426 | --===================================================================================
|
---|
427 | -- Output assignation
|
---|
428 | trigger_active <= i_reg.trigger_active;
|
---|
429 | --===================================================================================
|
---|
430 | end process;
|
---|
431 |
|
---|
432 | -- Sequential logic
|
---|
433 | process(clk_250MHz)
|
---|
434 | begin
|
---|
435 | if rising_edge(clk_250MHz) then
|
---|
436 | i_reg <= i_next_reg;
|
---|
437 | end if;
|
---|
438 | end process;
|
---|
439 |
|
---|
440 | end RTL; |
---|