signal timestampcontrolbits : std_logic_vector(31 downto 0) := (others => '0');
signal generatehitswait : std_logic_vector(31 downto 0) := (others => '0');
+ signal ignorehitflag : std_logic := '0';
+
signal priout_reg : std_logic := '0';
begin
--x0026: Pause Register
--x0027: Delay Counters 2
--x0028: Divider for graycounter clock
- --x0029: testoutro
+ --x0029: mask flag for (col,row) = (0,0)
+ --x0030: testoutro
-----------------------------------------------------------------------------
SLV_HANDLER : process(clk)
SLV_DATA_OUT <= graycounter_clkdiv_counter;
SLV_ACK_OUT <= '1';
when x"0029" =>
+ SLV_DATA_OUT(0) <= ignorehitflag;
+ SLV_ACK_OUT <= '1';
+ when x"0030" =>
SLV_DATA_OUT <= testoutro;
SLV_ACK_OUT <= '1';
when others =>
when x"0028" =>
graycounter_clkdiv_counter <= SLV_DATA_IN;
SLV_ACK_OUT <= '1';
+ when x"0029" =>
+ ignorehitflag <= SLV_DATA_IN(0);
+ SLV_ACK_OUT <= '1';
when others =>
SLV_UNKNOWN_ADDR_OUT <= '1';
end case;
end if;
if(std_logic_vector(delcounter) = delaycounters2(31 downto 24)) then
memdata <= "111100001111" & hit_col & hit_row & hit_time; --0xF0F
- memwren <= '1';
+ memwren <= '1';
+ if(ignorehitflag = '1' and (hit_col = "000000" and hit_row = "000000")) then
+ memwren <= '0';
+ end if;
hitcounter <= hitcounter + 1;
state <= readcol;
elsif(delcounter = "00000000" and hitcounter = "11111111111") then
architecture behavioral of TriggerHandler is
--trigger
+ signal bypass_trigger : std_logic := '0';
signal reset_trigger_state : std_logic := '0';
signal reset_trigger_state_edge : std_logic_vector(1 downto 0) := "00";
signal valid_trigger_int : std_logic := '0';
signal fifo_readout_end_int : std_logic_vector(1 downto 0) := "00";
--fee
signal fee_data_int : std_logic_vector(31 downto 0) := (others => '0');
- signal fee_data_write_int : std_logic := '0';
+ signal fee_data_write_int : std_logic := '0';
signal fee_data_finished_int : std_logic := '0';
signal fee_trg_release_int : std_logic := '0';
signal fee_trg_statusbit_int : std_logic_vector(31 downto 0) := (others => '0');
type trigger_type_type is (t_timing,
t_physics,
t_status,
+ t_ignore,
t_unknown);
signal trigger_handler_fsm : trigger_handler_type := idle;
trigger_handler_state <= x"01";
if LVL1_VALID_TIMING_TRG_IN = '1' then
wr_header_int <= '1';
- trigger_type <= t_timing;
- trigger_handler_fsm <= timing_trigger;
+ if bypass_trigger = '1' then
+ trigger_type <= t_ignore;
+ trigger_handler_fsm <= ignore;
+ else
+ trigger_type <= t_timing;
+ trigger_handler_fsm <= timing_trigger;
+ end if;
elsif(LVL1_VALID_NOTIMING_TRG_IN = '1') then
wr_header_int <= '1';
- trigger_handler_fsm <= check_trigger_type;
+ if bypass_trigger = '1' then
+ trigger_type <= t_ignore;
+ trigger_handler_fsm <= ignore;
+ else
+ trigger_handler_fsm <= check_trigger_type;
+ end if;
end if;
when check_trigger_type =>
--0x104: trigger_handler_state
--0x105: reset counters
--0x106: reset trigger state machine
+ --0x107: bypass trigger signals flag
slv_bus_handler : process(CLK_IN)
begin
when x"0106" =>
reset_trigger_state <= SLV_DATA_IN(0);
slv_ack_out <= '1';
+ when x"0107"=>
+ bypass_trigger <= SLV_DATA_IN(0);
+ slv_ack_out <= '1';
when others =>
slv_unknown_addr_out <= '1';
end case;
+
elsif slv_read_in = '1' then
case slv_addr_in is
when x"0100" =>
when x"0104" =>
slv_data_out <= x"000000" & trigger_handler_state;
slv_ack_out <= '1';
+ when x"0107" =>
+ slv_data_out(0) <= bypass_trigger;
+ slv_ack_out <= '1';
when others =>
slv_unknown_addr_out <= '1';
end case;