Gast
#1858509
Hallo.
Habe ein Verständnisproblem:
Ein Counter addressiert ein RAM-Baustein:
Mit der ersten steigenden Flanke wird PCinc auf 1 gesetzt.
Dadurch wird der Prozess im Counter getriggert und PCout
gesetzt.PCout ist mit dem Eingang des Memory Bausteins verbunden.
In diesem ersten Takt wird daher Address auf den Wert von PCout
gesetzt.Im Simulator geschieht das alles im ersten Takt.
Erst im 2.Takt wird im Simulator data_out mit der neuen addresse
belegt.
Das vertehe ich nicht:
Warum erhält data_out seinen neuen Wert nicht schon im ersten Takt?
Schließlich ändert sich ja auch address (in der sensitivy list)
im ersten Takt.Und damit wäre ja die Bedingung erfüllt um
den Prozess in memory zu aktivieren.
--clock generation
process
begin
clock <= '0';
wait for 5 ns; -
clock<= '1';
wait for 5 ns;
end process;
--end clock generation
--counter
entity PC is
port(
PCinc: in std_logic;
PCout: out std_logic_vector(15 downto 0)
);
end PC;
signal tmp_PC: std_logic_vector(15 downto 0);
begin
process(PCinc)
begin
if (PCinc'event and PCinc = '1') then
tmp_PC <= tmp_PC + "1";
end if;
end process;
PCout <= tmp_PC;
--end counter
--memory
entity memory is
port ( clock : in std_logic;
address : in std_logic_vector(7 downto 0);
data_out: out std_logic_vector(15 downto 0)
);
end memory;
process(clock, address)
begin
if (clock'event and clock = '1') then
data_out <= tmp_ram(to_integer(unsigned(address)));
end if;
end process;
--end memory