Soy bastante nuevo en el diseño de hardware con VHDL, y creo que estoy cometiendo un error de noob. Estoy haciendo una CPU y mi archivo de registro se está activando. Aunque tuve un problema Intentaré poner un pseudo código para borrarlo
on rising_edge {r0in <= 20; }
CLOCK CYCLE
on rising_edge {r1in <= r0out; }
CLOCK CYCLE
Mi problema es que r1in obtendría el valor antiguo de r0 en lugar del 20
apropiado. Luego procedí a cambiar mi código para usar falling_edge en lugar de rising_edge solo para el archivo de registro. A continuación se muestra una versión simplificada:
process(WriteEnable, DataIn, Clock)
begin
if falling_edge(Clock) then --note the falling_edge instead of rising_edge
if(WriteEnable = '1') then
registers <= DataIn;
end if;
end if;
end process;
DataOut <= registers;
Así que ahora mis registros se están activando para caer en lugar de para aumentar. Todos los casos de prueba que tengo pasan con esta configuración y se sintetizan sin advertencias ... ¿pero es correcto?
Estoy haciendo esta pregunta porque hace tiempo que me dijeron que solo use ambos bordes en un diseño si realmente sabes lo que estás haciendo. He estado programando en VHDL durante algunas semanas, por lo que quiero asegurarme de que este sea un caso apropiado para ues ambos bordes