En Verilog si usamos
siempre @ (reloj)
podemos activar un módulo en ambos lados ascendente y descendente. ¿Hay algún método para hacer lo mismo en VHDL.
En Verilog si usamos
siempre @ (reloj)
podemos activar un módulo en ambos lados ascendente y descendente. ¿Hay algún método para hacer lo mismo en VHDL.
Verifique explícitamente los flancos de reloj ascendentes y descendentes dentro del proceso:
process (clk)
begin
if (clk'event and (clk = '1' or clk = '0')) then
null; -- Do stuff.
end if;
end process;
O usando las funciones respectivas:
process (clk)
begin
if (rising_edge(clk) or falling_edge(clk)) then
null; -- Do stuff.
end if;
end process;
Sin embargo, hay diferencias sutiles entre las dos variantes (por ejemplo, enlace ).
Tampoco esperes que esto sea sintetizable.
En VHDL, puede usar una sentencia PROCESS para hacer cosas cuando cambia una señal de entrada. Para desencadenar los bordes ascendentes y descendentes, utilizarías las funciones falling_edge () y rising_edge () junto con una instrucción OR.
es decir.
ENTITY example IS
PORT(
a, clk : IN BIT;
b : OUT BIT);
END example;
ARCHITECTURE behavior OF example IS
BEGIN
PROCESS (clk) -- Whenever the clock signal changes....
BEGIN
IF (rising_edge(clk) OR falling_edge(clk)) THEN
-- do something
END PROCESS;
END behavior;
fuente: enlace