TMG_TRG_ERROR_IN : in std_logic;
MAX_EVENT_SIZE_IN : in std_logic_vector(15 downto 0) := x"FFFF";
+ BUFFER_DISABLE_IN : in std_logic_vector(15 downto 0) := x"0000";
--Status
STAT_DATA_BUFFER_LEVEL : out std_logic_vector(DATA_INTERFACE_NUMBER*32-1 downto 0);
STAT_HEADER_BUFFER_LEVEL : out std_logic_vector(31 downto 0);
---------------------------------------------------------------------------
gen_fifos : for i in 0 to DATA_INTERFACE_NUMBER-1 generate
- data_buffer_write(i) <= FEE_DATA_WRITE_IN(i) and not fee_write_overflow(i) when current_buffer_state(i) = BUSY else '0';
+ data_buffer_write(i) <= FEE_DATA_WRITE_IN(i) and not fee_write_overflow(i) and not BUFFER_DISABLE_IN(i) when current_buffer_state(i) = BUSY else '0';
THE_DAT_FIFO : fifo_var_oreg
generic map(
when BUSY =>
buffer_state_bits(i) <= "010";
- if FEE_DATA_WRITE_IN(i) = '1' and fee_write_overflow(i) = '0' then
+ if FEE_DATA_WRITE_IN(i) = '1' and fee_write_overflow(i) = '0' and BUFFER_DISABLE_IN(i) = '0' then
data_counter(i) <= data_counter(i) + to_unsigned(1,1);
end if;
if FEE_DATA_FINISHED_IN(i) = '1' then
TMG_TRG_ERROR_IN : in std_logic;
MAX_EVENT_SIZE_IN : in std_logic_vector(15 downto 0) := x"FFFF";
+ BUFFER_DISABLE_IN : in std_logic_vector(15 downto 0) := x"0000";
--Status Registers
STAT_DATA_BUFFER_LEVEL : out std_logic_vector(DATA_INTERFACE_NUMBER*32-1 downto 0);
STAT_HEADER_BUFFER_LEVEL : out std_logic_vector(31 downto 0);
IPU_HDR_DATA_EMPTY_OUT => ipu_header_empty,
TMG_TRG_ERROR_IN => TMG_TRG_ERROR_IN,
MAX_EVENT_SIZE_IN => MAX_EVENT_SIZE_IN,
+ BUFFER_DISABLE_IN => BUFFER_DISABLE_IN,
-- Status
STAT_DATA_BUFFER_LEVEL => buf_STAT_DATA_BUFFER_LEVEL,
STAT_HEADER_BUFFER_LEVEL => buf_STAT_HEADER_BUFFER_LEVEL,
signal info_wr_ack : std_logic;
signal info_valid : std_logic;
signal info_invalid : std_logic;
- signal info_registers : std_logic_vector_array_32(0 to 3);
+ signal info_registers : std_logic_vector_array_32(0 to 4);
signal stat_handler_addr : std_logic_vector(15 downto 0);
signal stat_handler_data_in : std_logic_vector(31 downto 0);
signal stat_buffer_rd_nack : std_logic;
signal stat_buffer_address : std_logic_vector(15 downto 0);
signal max_event_size : std_logic_vector(15 downto 0);
+ signal buffer_disable : std_logic_vector(15 downto 0);
signal new_max_size : std_logic_vector(15 downto 0);
begin
THE_HANDLER_INFO_REGS : bus_register_handler
generic map(
- BUS_LENGTH => 4
+ BUS_LENGTH => 5
)
port map(
RESET => RESET,
& "0000000"
& std_logic_vector(to_unsigned(HEADER_BUFFER_FULL_THRESH,16))
& std_logic_vector(to_unsigned(HEADER_BUFFER_DEPTH,8));
+info_registers(4) <= x"0000" & buffer_disable;
proc_maxeventsize : process begin
wait until rising_edge(CLK);
if RESET = '1' then
max_event_size <= std_logic_vector(to_unsigned((2**DATA_BUFFER_DEPTH-DATA_BUFFER_FULL_THRESH-1),16));
+ buffer_disable <= (others => '0');
elsif info_write = '1' and info_addr(2 downto 0) = "001" then
max_event_size <= info_data_in(15 downto 0);
info_wr_ack <= '1';
info_wr_nack <= '0';
+ elsif info_write = '1' and info_addr(2 downto 0) = "100" then
+ buffer_disable <= info_data_in(15 downto 0);
+ info_wr_ack <= '1';
+ info_wr_nack <= '0';
else
info_wr_nack <= info_write;
+ info_wr_ack <= '0';
end if;
end process;
TMG_TRG_ERROR_IN => tmg_trg_error_i,
MAX_EVENT_SIZE_IN => max_event_size,
+ BUFFER_DISABLE_IN => buffer_disable,
--Status Registers
STAT_DATA_BUFFER_LEVEL => stat_data_buffer_level,
STAT_HEADER_BUFFER_LEVEL => stat_header_buffer_level,
end if;
end process;
-end architecture;
\ No newline at end of file
+end architecture;
signal stat_handler_i : std_logic_vector (127 downto 0);
signal stat_data_buffer_level : std_logic_vector (DATA_INTERFACE_NUMBER*32-1 downto 0);
signal stat_header_buffer_level: std_logic_vector (31 downto 0);
- signal iobuf_data_count : std_logic_vector (32*4-1 downto 0);
signal info_rd_nack : std_logic;
signal info_wr_nack : std_logic;
MED_STAT_OP => open,
CTRL_MPLEX => (others => '0'),
IOBUF_CTRL_GEN => (others => '0'),
- IOBUF_DATA_COUNT => iobuf_data_count,
STAT_ONEWIRE => open,
STAT_ADDR_DEBUG => open,
STAT_TRIGGER_OUT => STAT_TRIGGER_OUT,
\r
TMG_TRG_ERROR_IN : in std_logic;\r
MAX_EVENT_SIZE_IN : in std_logic_vector(15 downto 0) := x"FFFF";\r
+ BUFFER_DISABLE_IN : in std_logic_vector(15 downto 0) := x"0000"; \r
--Status\r
STAT_DATA_BUFFER_LEVEL : out std_logic_vector(DATA_INTERFACE_NUMBER*32-1 downto 0);\r
STAT_HEADER_BUFFER_LEVEL : out std_logic_vector(31 downto 0);\r
\r
TMG_TRG_ERROR_IN : in std_logic;\r
MAX_EVENT_SIZE_IN : in std_logic_vector(15 downto 0) := x"FFFF";\r
+ BUFFER_DISABLE_IN : in std_logic_vector(15 downto 0) := x"0000";\r
--Status Registers\r
STATUS_OUT : out std_logic_vector(127 downto 0);\r
STAT_DATA_BUFFER_LEVEL : out std_logic_vector(DATA_INTERFACE_NUMBER*32-1 downto 0);\r