¿Está bien usar egde ascendente y descendente en este diseño VHDL?

4

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

    
pregunta Earlz

2 respuestas

8

Sí, puedes, pero no es recomendable. Necesitará que el hardware se sintetice al doble de la velocidad de reloj ahora; un bus de 100MHz debe configurarse a 200MHz porque los datos solo tienen la mitad del tiempo para propagarse. Lo has hecho efectivamente DDR .

Parece que en realidad no entiendes cómo funciona un proceso. Todas las salidas dentro de un proceso están programadas para ser presentadas en la salida en el ciclo de reloj siguiente . Por lo tanto, todo lo que usted codifica dentro de ese proceso está sucediendo en paralelo y debe estabilizarse antes de que llegue el próximo reloj, que es cuando se publicarán las salidas.

    
respondido por el Aaron D. Marasco
1

El código equivocado funcionará si la parte de destino tiene esta capacidad. Ya que puedes invertir el reloj y usar el flanco ascendente, lo hará. Sin embargo, el tiempo puede no ser lo que desea.

No necesita WriteEnable, DataIn en la sensibilidad del proceso.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas