Escribí un contador simple en VHDL para un contador de programa. Todo se hace en un proceso, pero lo que no entiendo es que en la simulación, la adición del contador del programa solo se realiza en el siguiente evento de reloj, en lugar de hacerlo inmediatamente después de que se haya generado PCNext
.
Aquí está el código y la simulación:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY dlatch IS
PORT (
Reset, Clock : IN std_logic;
PC_out : OUT std_logic_vector(31 downto 0)
);
end dlatch;
ARCHITECTURE d_arch OF dlatch IS
SIGNAL PC : std_logic_vector(31 downto 0);
SIGNAL PCNext : std_logic_vector(31 downto 0);
BEGIN
PROCESS(Clock, Reset)
BEGIN
IF Reset = '1' THEN
PC <= x"00000000";
ELSIF Clock'event and Clock = '1' THEN
PC <= PCNext;
END IF;
PCNext <= std_logic_vector(unsigned(PC) + 4);
END PROCESS;
PC_out <= PC;
END d_arch;
¿Ves cómo PCNext solo se calcula en el flanco descendente del reloj? ¿Por qué no se calcula inmediatamente después de PC <= PCNext
?