library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity lop is
Port (
clk : in std_logic;
read_nwrite : in std_logic;
write_data: in std_logic_vector(7 downto 0);
read_data: out std_logic_vector(7 downto 0)
);
end lop;
architecture Behavioral of lop is
component single_port_ram is
generic
(
DATA_WIDTH : natural := 8;
ADDR_WIDTH : natural := 8
);
port
(
clk : in std_logic;
addr : in natural range 0 to 2**ADDR_WIDTH - 1;
data : in std_logic_vector((DATA_WIDTH-1) downto 0);
we : in std_logic := '0';
q : out std_logic_vector((DATA_WIDTH -1) downto 0)
);
end component;
signal Address_Counter: std_logic_vector(7 downto 0);
signal Address_Counter_Unsigned: unsigned(7 downto 0) := x"00";
begin
u0: single_port_ram port map (
not clk, Address_Counter, write_data, not read_nwrite, read_data
);
Address_Counter(0) <= Address_Counter_Unsigned(0);
Address_Counter(1) <= Address_Counter_Unsigned(1);
Address_Counter(2) <= Address_Counter_Unsigned(2);
Address_Counter(3) <= Address_Counter_Unsigned(3);
Address_Counter(4) <= Address_Counter_Unsigned(4);
Address_Counter(5) <= Address_Counter_Unsigned(5);
Address_Counter(6) <= Address_Counter_Unsigned(6);
Address_Counter(7) <= Address_Counter_Unsigned(7);
process(clk)
begin
if (rising_edge(clk))then
if(read_nwrite = '1'

then
Address_Counter_Unsigned <= Address_Counter_Unsigned + 1;
end if;
end if;
end process;
end Behavioral;
--Library
library ieee;
use ieee.std_logic_1164.all;
--Single Port RAM
entity single_port_ram is
generic
(
DATA_WIDTH : natural := 8;
ADDR_WIDTH : natural := 8
);
port
(
clk : in std_logic;
addr : in natural range 0 to 2**ADDR_WIDTH - 1;
data : in std_logic_vector((DATA_WIDTH-1) downto 0);
we : in std_logic := '0';
q : out std_logic_vector((DATA_WIDTH -1) downto 0)
);
end entity;
architecture rtl of single_port_ram is
-- Build a 2-D array type for the RAM
subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0);
type memory_t is array(2**ADDR_WIDTH-1 downto 0) of word_t;
-- Declare the RAM signal.
signal ram : memory_t;
-- Register to hold the address
signal addr_reg : natural range 0 to 2**ADDR_WIDTH-1;
begin
process(clk)
begin
if(rising_edge(clk)) then
if(we = '1'

then
ram(addr) <= data;
end if;
-- Register the address for reading
addr_reg <= addr;
end if;
end process;
q <= ram(addr_reg);
end rtl;