-- trigger window
signal trg_win_pre : unsigned(10 downto 0);
- signal trg_win_post : unsigned(10 downto 0);
+ signal trg_win_post : signed(10 downto 0);
signal trg_time : std_logic_vector(38 downto 0);
signal TW_pre : std_logic_vector(38 downto 0);
signal TW_post : std_logic_vector(38 downto 0);
signal ch_data_3r : std_logic_vector_array_36(0 to CHANNEL_NUMBER-1);
signal ch_data_4r : std_logic_vector(31 downto 0);
signal ch_hit_time : std_logic_vector(38 downto 0);
+ signal ch_hit_chan : std_logic_vector( 6 downto 0);
signal ch_epoch_cntr : std_logic_vector(27 downto 0);
signal buffer_transfer_done : std_logic;
signal buffer_transfer_done_r : std_logic;
end generate DATA_FORMAT_15;
trg_win_pre <= unsigned(TRG_WIN_PRE_IN);
- trg_win_post <= unsigned(TRG_WIN_POST_IN);
+ trg_win_post <= signed(TRG_WIN_POST_IN);
-------------------------------------------------------------------------------
-- Trigger window
begin
if rising_edge(CLK_100) then
TW_pre <= std_logic_vector(unsigned(trg_time)-trg_win_pre);
- TW_post <= std_logic_vector(unsigned(trg_time)+trg_win_post);
+ TW_post <= std_logic_vector(signed('0' & trg_time)+trg_win_post)(38 downto 0);
end if;
end process TrigWinCalculation;
if ch_data_r(fifo_nr_wr)(35 downto 32) = x"1" and ch_data_r(fifo_nr_wr)(31) = '1' then
ch_hit_time <= ch_epoch_cntr & ch_data_r(fifo_nr_wr)(10 downto 0);
+ ch_hit_chan <= ch_data_r(fifo_nr_wr)(28 downto 22);
elsif ch_data_r(fifo_nr_wr)(35 downto 32) = x"1" and ch_data_r(fifo_nr_wr)(31 downto 29) = "011" then
ch_hit_time <= (others => '0');
end if;
Check_Trigger_Win_Right : process (CLK_100)
begin
if rising_edge(CLK_100) then
- if unsigned(ch_hit_time) <= unsigned(TW_post) then
+ if unsigned(ch_hit_time) <= unsigned(TW_post) or ch_hit_chan = "0000000" then
trg_win_r <= '1';
else
trg_win_r <= '0';