library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- Ring Buffer stores samples in a circular buffer -- The read buffer pointer is one buffer entry ahead -- of the write buffer pointer. entity ringbuf is port ( clk_i : in std_ulogic; reset_ni : in std_ulogic; en_i : in std_ulogic; data_i : in std_ulogic_vector(15 downto 0); data_o : out std_ulogic_vector(15 downto 0)); end; architecture rtl of ringbuf is component memory is port ( clk_i : in std_ulogic; we_i : in std_ulogic; waddr_i : in unsigned(12 downto 0); raddr_i : in unsigned(12 downto 0); wdata_i : in std_ulogic_vector(15 downto 0); rdata_o : out std_ulogic_vector(15 downto 0) ); end component; signal raddr, waddr : unsigned(12 downto 0); begin mem_i0 : memory port map ( clk_i => clk_i, we_i => en_i, raddr_i => raddr, waddr_i => waddr, rdata_o => data_o, wdata_i => data_i); buffer_pointer_p : process(clk_i, reset_ni) begin if reset_ni = '0' then elsif rising_edge(clk_i) then end if; end process buffer_pointer_p; end; -- architecture