diff --git a/src/fifo_buffer/fifo_buffer.vhd b/src/fifo_buffer/fifo_buffer.vhd index 31767f4..a018820 100644 --- a/src/fifo_buffer/fifo_buffer.vhd +++ b/src/fifo_buffer/fifo_buffer.vhd @@ -20,7 +20,8 @@ entity fifo_buffer is valid_in : in std_logic; valid_out : out std_logic; data_in : in std_logic_vector(data_width - 1 downto 0); - data_out : out std_logic_vector(data_width - 1 downto 0) + data_out : out std_logic_vector(data_width - 1 downto 0); + used_slots : out integer range 0 to buffer_size ); end entity fifo_buffer; @@ -73,6 +74,11 @@ begin comb_proc: process(write_pointer, read_pointer, buffer_full, valid_in, rst) variable write_pointer_inc : unsigned(address_bits - 1 downto 0); begin + if write_pointer >= read_pointer then + used_slots <= to_integer(unsigned(write_pointer) - unsigned(read_pointer)); + else + used_slots <= buffer_size - to_integer(unsigned(read_pointer)) + to_integer(unsigned(write_pointer)); + end if; ready_out <= not buffer_full; write_signal <= (valid_in and not buffer_full) or rst; write_pointer_inc := unsigned(write_pointer) + 1; diff --git a/src/ganimede/ganimede.vhd b/src/ganimede/ganimede.vhd index ee9318f..26592a1 100644 --- a/src/ganimede/ganimede.vhd +++ b/src/ganimede/ganimede.vhd @@ -78,6 +78,7 @@ begin fifo_buffer_to_ip_inst : entity gan_buffer.fifo_buffer generic map ( buffer_size => 1024 + --tech => 60 ) port map( in_clk => socbridge_clk, @@ -94,6 +95,7 @@ begin fifo_buffer_from_ip_inst : entity gan_buffer.fifo_buffer generic map ( buffer_size => 1024 +-- tech => 60 ) port map( in_clk => clk, @@ -104,7 +106,8 @@ begin valid_in => ip_to_ganimede.socbridge.valid, valid_out => buffer_to_socbridge_driver.valid, data_in => ip_to_ganimede.socbridge.data, - data_out => buffer_to_socbridge_driver.data + data_out => buffer_to_socbridge_driver.data, + used_slots => buffer_to_socbridge_driver.used_slots ); --- LATER WE ADD OPTIMIZATIONS HERE --- diff --git a/src/ganimede/io_type_pkg.vhd b/src/ganimede/io_type_pkg.vhd index dd8271b..e1d070c 100644 --- a/src/ganimede/io_type_pkg.vhd +++ b/src/ganimede/io_type_pkg.vhd @@ -16,6 +16,7 @@ package io_types is type fifo_interface_t is record ready, valid : std_logic; data : std_logic_vector(fifo_width - 1 downto 0); + used_slots : integer; end record fifo_interface_t; type ext_protocol_def_t is record