diff --git a/src/lib/can_components.vhd b/src/lib/can_components.vhd index 252052f0a6bfeaab7946c508d7943a5ff72d9aa6..6adeb4ffbd05d10f8fe2556ad067d76ac651ac5c 100644 --- a/src/lib/can_components.vhd +++ b/src/lib/can_components.vhd @@ -326,7 +326,7 @@ package can_components is signal write_pointer :out natural range 0 to buff_size - 1; signal write_pointer_raw :out natural range 0 to buff_size - 1; signal write_pointer_extra_ts :out natural range 0 to buff_size - 1; - signal rx_mem_free_int :out natural range 0 to buff_size + signal rx_mem_free_int :out natural range -1 to buff_size + 1 ); end component; diff --git a/src/rx_buffer/rx_buffer.vhd b/src/rx_buffer/rx_buffer.vhd index 6413b69b215e81aaf2423a60d57d5d5d74b2d44b..fa522bde470bf19fe554b48ca3510ff6995e08ba 100644 --- a/src/rx_buffer/rx_buffer.vhd +++ b/src/rx_buffer/rx_buffer.vhd @@ -334,7 +334,7 @@ architecture rtl of rx_buffer is signal memory_write_data : std_logic_vector(31 downto 0); -- Number of free memory words available to SW after frame was committed. - signal rx_mem_free_int : natural range 0 to buff_size; + signal rx_mem_free_int : natural range -1 to buff_size + 1; ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- diff --git a/src/rx_buffer/rx_buffer_pointers.vhd b/src/rx_buffer/rx_buffer_pointers.vhd index d9cd467cd3dd89255991d88fe39d84ed944b7a1e..47dad4fc9d219091a9b76957a46b8ca3d7ce3733 100644 --- a/src/rx_buffer/rx_buffer_pointers.vhd +++ b/src/rx_buffer/rx_buffer_pointers.vhd @@ -134,7 +134,7 @@ entity rx_buffer_pointers is -- Mem. free outputs ------------------------------------ -- Number of free memory words available for user - signal rx_mem_free_int :out natural range 0 to buff_size + signal rx_mem_free_int :out natural range -1 to buff_size + 1 ); end entity; @@ -152,19 +152,19 @@ architecture rtl of rx_buffer_pointers is signal drv_erase_rx : std_logic; -- Raw value of number of free memory words. - signal rx_mem_free_raw : natural range 0 to buff_size; + signal rx_mem_free_raw : natural range -1 to buff_size + 1; -- Number of free memory words calculated during frame storing before commit -- combinationally incremented by 1. - signal rx_mem_free_raw_inc_1 : natural range 0 to buff_size + 1; + signal rx_mem_free_raw_inc_1 : natural range -1 to buff_size + 1; -- Number of free memory words calculated during frame storing before commit -- combinationally decremented by 1. - signal rx_mem_free_raw_dec_1 : natural range -1 to buff_size; + signal rx_mem_free_raw_dec_1 : natural range -1 to buff_size + 1; -- Number of free memory words available to SW, combinationally icnremented -- by 1. - signal rx_mem_free_int_inc_1 : natural range 0 to buff_size + 1; + signal rx_mem_free_int_inc_1 : natural range -1 to buff_size + 1; begin @@ -331,10 +331,12 @@ begin ---------------------------------------------------------------------------- -- Calculating incremented value of free memory combinationally ---------------------------------------------------------------------------- - rx_mem_free_int_inc_1 <= rx_mem_free_int + 1; - rx_mem_free_raw_inc_1 <= rx_mem_free_raw + 1; - rx_mem_free_raw_dec_1 <= rx_mem_free_raw - 1; - + mem_free_arith_proc : process(rx_mem_free_int, rx_mem_free_raw) + begin + rx_mem_free_int_inc_1 <= rx_mem_free_int + 1; + rx_mem_free_raw_inc_1 <= rx_mem_free_raw + 1; + rx_mem_free_raw_dec_1 <= rx_mem_free_raw - 1; + end process; ---------------------------------------------------------------------------- -- Calculation of Incremented Read Pointer combinationally. This is used @@ -344,7 +346,9 @@ begin -- clock cycle delay on "read_pointer" and thus allow bursts on read -- from RX_DATA register! ---------------------------------------------------------------------------- - read_pointer_inc_1 <= (read_pointer + 1) mod buff_size; - + read_pointer_inc_proc : process(read_pointer) + begin + read_pointer_inc_1 <= (read_pointer + 1) mod buff_size; + end process; end architecture;