62 lines
983 B
VHDL
62 lines
983 B
VHDL
LIBRARY IEEE;
|
|
USE IEEE.STD_LOGIC_1164.ALL;
|
|
USE IEEE.NUMERIC_STD.ALL;
|
|
|
|
ENTITY rom_wb IS
|
|
Port
|
|
(
|
|
CLK_I : in STD_LOGIC;
|
|
RST_I : in STD_LOGIC;
|
|
CYC_I : in STD_LOGIC;
|
|
STB_I : in STD_LOGIC;
|
|
ACK_O : out STD_LOGIC;
|
|
MRDY_I : in STD_LOGIC;
|
|
SRDY_O : out STD_LOGIC;
|
|
ADDR_I : in unsigned(31 downto 0);
|
|
DAT_O : out unsigned(31 downto 0)
|
|
);
|
|
END rom_wb;
|
|
|
|
ARCHITECTURE behavior OF rom_wb IS
|
|
|
|
COMPONENT rom
|
|
PORT
|
|
(
|
|
clk : in STD_LOGIC;
|
|
ce : in STD_LOGIC;
|
|
addr : in unsigned(31 downto 0);
|
|
dout : out unsigned(31 downto 0)
|
|
);
|
|
END COMPONENT;
|
|
|
|
signal data_en : std_logic;
|
|
|
|
begin
|
|
|
|
data_en <= CYC_I and STB_I and MRDY_I;
|
|
SRDY_O <= CYC_I;
|
|
|
|
data_valid_register:
|
|
process(CLK_I)
|
|
begin
|
|
if rising_edge(CLK_I) then
|
|
if RST_I = '1' then
|
|
ACK_O <= '0';
|
|
else
|
|
ACK_O <= data_en; -- and not WE_I;
|
|
end if;
|
|
end if;
|
|
end process;
|
|
|
|
inst_rom : rom
|
|
PORT MAP
|
|
(
|
|
clk => CLK_I,
|
|
ce => data_en,
|
|
addr => ADDR_I,
|
|
dout => DAT_O
|
|
);
|
|
|
|
|
|
end behavior;
|