Cuando implemento un divisor de reloj, a menudo me pregunto si debo usar un búfer o una salida regular con una señal. Considere los siguientes códigos:
Opción 1 - Salida con señal
library ieee;
use ieee.std_logic_1164.all;
entity divider is
port (Clock : in bit;
OutputFreq : out bit);
end divider;
architecture behave of divider is
signal Counter : integer range 0 to 155;
signal CurrentState : bit;
begin
process(Clock)
begin
if Clock'event and Clock = '1' then
if Counter < 155 then
Counter <= Counter + 1;
else
Counter <= 0;
CurrentState <= not CurrentState;
end if;
end if;
OutputFreq <= CurrentState;
end process;
end behave;
Opción 2 - Amortiguador
library ieee;
use ieee.std_logic_1164.all;
entity divider is
port (Clock : in bit;
OutputFreq : buffer bit);
end divider;
architecture behave of divider is
signal Counter : integer range 0 to 155;
begin
process(Clock)
begin
if Clock'event and Clock = '1' then
if Counter < 155 then
Counter <= Counter + 1;
else
Counter <= 0;
OutputFreq <= not OutputFreq;
end if;
end if;
end process;
end behave;
Ambos códigos producen la misma salida exacta. Entonces, ¿cuál debería usar y por qué?