He escrito un contador simple en VHDL para un contador de programas. Todo se hace en un proceso, pero lo que no entiendo es que en la simulación, la adición del contador de programas se realiza solo en el siguiente evento de reloj, en lugar de inmediatamente después de que se haya producido PCNext
.
Aquí está el código así como 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 de bajada del reloj? ¿Por qué no se calcula inmediatamente después de PC <= PCNext
?