Допустим, есть компонент компонента RAM, как показано ниже
entity RAM is
port(
-- other port such as clk, reset, ...
en: in std_logic;
addr: in std_logic_vector(7 downto 0);
dataR: out std_logic_vector(7 downto 0));
end RAM;
Спецификация RAM такова, что когда en = '1'
, значение, хранящееся в addr
, доступно для dataR
один такт после.
Пока мой процесс, в котором я использую компонент RAM, выглядит следующим образом:
process(state)
begin
case(state) is
-- ...
when ReadMemory =>
addr <= "00000000";
en <= '1';
next_mem <= dataR;
-- ...
end case;
end process;
Этот дизайн не работает, потому что dataR
читается в том же тактовом цикле, что и когда установлены addr
и en
.
Как я могу "подождать" один цикл clck, чтобы прочитать правильное значение из памяти?