valid_trg_rdo <= busreadout_rx.valid_notiming_trg or busreadout_rx.valid_timing_trg;
-- Timing Trigger handler
- TheTriggerHandler : TriggerHandler
+ TheTriggerHandler : entity work.TriggerHandler
generic map (
TRIGGER_NUM => 1,
PHYSICAL_EVENT_TRG_NUM => 0)
RESET_TRG => reset_rdo,
RESET_RDO => reset_rdo,
RESET_TDC => reset_tdc,
- VALID_TIMING_TRG_IN => trg_handler_trg_valid,
+ VALID_TIMING_TRG_IN => busreadout_rx.valid_timing_trg,
VALID_NOTIMING_TRG_IN => busreadout_rx.valid_notiming_trg,
+ INVALID_TRG_IN => busreadout_rx.invalid_trg,
TRG_TYPE_IN => busreadout_rx.trg_type,
TRG_RELEASE_IN => busreadout_tx.busy_release,
TRG_IN(0) => trg_in,
DEBUG_OUT => trg_handler_status_registers
);
trg_in <= REFERENCE_TIME;
- trg_handler_trg_valid <= busreadout_rx.valid_timing_trg or busreadout_rx.invalid_trg;
+-- trg_handler_trg_valid <= busreadout_rx.valid_timing_trg or busreadout_rx.invalid_trg;
-------------------------------------------------------------------------------
-- Readout
RESET_TDC : in std_logic;
VALID_TIMING_TRG_IN : in std_logic;
VALID_NOTIMING_TRG_IN : in std_logic;
+ INVALID_TRG_IN : in std_logic;
TRG_TYPE_IN : in std_logic_vector(3 downto 0);
TRG_RELEASE_IN : in std_logic;
TRG_IN : in std_logic_vector(TRIGGER_NUM-1 downto 0);
signal trg_release_200 : std_logic;
signal valid_timing_200 : std_logic;
signal valid_notiming_200 : std_logic;
+ signal invalid_200 : std_logic;
signal valid_trigger_flag : std_logic := '0';
-- trigger window signals
type TrgWinCounter_FSM is (IDLE, COUNT, COUNT_CALIBRATION, VALIDATE_TRIGGER, WIN_END,
TRG_RDO_OUT <= trg_pulse_rdo when rising_edge(CLK_RDO);
TRG_TDC_OUT <= trg_pulse_tdc when rising_edge(CLK_TDC);
- ValidateTrigger : process (CLK_TDC) is
- begin
- if rising_edge(CLK_TDC) then -- rising clock edge
- if RESET_TDC = '1' then
- valid_trigger_flag <= '0';
- elsif valid_timing_200 = '1' then
- valid_trigger_flag <= '1';
- elsif trg_release_200 = '1' then
- valid_trigger_flag <= '0';
- end if;
- end if;
- end process ValidateTrigger;
+-- ValidateTrigger : process (CLK_TDC) is
+-- begin
+-- if rising_edge(CLK_TDC) then -- rising clock edge
+-- if RESET_TDC = '1' then
+-- valid_trigger_flag <= '0';
+-- elsif valid_timing_200 = '1' then
+-- valid_trigger_flag <= '1';
+-- elsif trg_release_200 = '1' then
+-- valid_trigger_flag <= '0';
+-- end if;
+-- end if;
+-- end process ValidateTrigger;
TriggerReleaseSync : entity work.pulse_sync
port map (
RESET_B_IN => RESET_TDC,
PULSE_B_OUT => valid_timing_200);
+
+ InValidTriggerSync : entity work.pulse_sync
+ port map (
+ CLK_A_IN => CLK_RDO,
+ RESET_A_IN => RESET_RDO,
+ PULSE_A_IN => INVALID_TRG_IN,
+ CLK_B_IN => CLK_TDC,
+ RESET_B_IN => RESET_TDC,
+ PULSE_B_OUT => invalid_200);
+
ValidNoTriggerSync : entity work.pulse_sync
port map (
CLK_A_IN => CLK_RDO,
DEBUG_OUT(31 downto 24) <= (others => '0');
FSM_TRIGGER_WINDOW_COMBINATIONAL : process (STATE_TW_CURRENT, trg_in_3r, TRG_WIN_EN_IN,
- valid_notiming_200, TRG_TYPE_IN, trg_win_cnt,
- TRG_WIN_POST_IN, valid_trigger_flag, trg_release_200) is
+ valid_notiming_200, TRG_TYPE_IN, trg_win_cnt, valid_timing_200,
+ TRG_WIN_POST_IN, valid_trigger_flag, trg_release_200, invalid_200) is
begin
-- Default values
STATE_TW_NEXT <= STATE_TW_CURRENT;
case STATE_TW_CURRENT is
when IDLE =>
- if valid_timing_200 = '1' and trg_in_3r(0) = '1' then
+ if valid_timing_200 = '1' then
if TRG_WIN_EN_IN = '1' then
STATE_TW_NEXT <= COUNT;
else
else
STATE_TW_NEXT <= WAIT_NEXT_TRIGGER;
end if;
- elsif valid_timing_200 = '1' then
+ elsif invalid_200 = '1' then
STATE_TW_NEXT <= MISSING_REFERENCE_TIME;
else
STATE_TW_NEXT <= IDLE;
trg_win_state_debug_f <= x"4";
when VALIDATE_TRIGGER =>
- if valid_trigger_flag = '1' then
- STATE_TW_NEXT <= WIN_END;
- else
- STATE_TW_NEXT <= VALIDATE_TRIGGER;
- end if;
+-- if valid_trigger_flag = '1' then
+ STATE_TW_NEXT <= WIN_END;
+-- else
+-- STATE_TW_NEXT <= VALIDATE_TRIGGER;
+-- end if;
trg_win_end_f <= '0';
trg_win_state_debug_f <= x"5";