¿Cuál es la diferencia en la asignación de resultados antes del proceso final y el proceso final en VHDL?

2

He escrito un código para verificar la diferencia en la asignación de resultados antes del "proceso final" y después del "proceso final" en VHDL. Y los resultados de la simulación que he publicado con ella. Lo que encontré es asignar salida 1: Después de "finalizar el proceso" no hay retraso, el puerto de salida se refleja con el cambio en la variable. 2: Antes del "proceso final" hay un retardo de pulso. pero no puedo concluirlo.

entity signal_delay is 
port (clock_50M: in Std_logic;
        r: in std_logic;
        r_delay1, r_delay2: out std_logic);
end signal_delay;



architecture ada of signal_delay is 

 signal r_1,r_2: std_logic;

 begin 
     process(clock_50M)
     begin 
        if ( clock_50M='1') then 
            r_1<= r;
            r_2<=r_1;
        end if ;
     end process;

    r_delay1<=r_1;
    r_delay2<= r_2;

 end ada;

---- caso: 2 ---------------------------------------- ---------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity signal_delay is 
port (clock_50M: in Std_logic;
        r: in std_logic;
        r_delay1, r_delay2: out std_logic);
end signal_delay;


architecture ada of signal_delay is  

signal r_1,r_2: std_logic;

begin 
    process(clock_50M)
    begin 
        if (clock_50M 'event and clock_50M='1') then 
            r_1<= r;
            r_2<=r_1;
        end if ;
        r_delay1<=r_1;
        r_delay2<= r_2;
    end process;

end ada;
    
pregunta Anand Raj S

1 respuesta

3

En un proceso secuencial, la señal se asigna con el siguiente evento. Si no está en un proceso cronometrado, la señal se asigna de inmediato.

Pero otra cosa es que tienes este bloque en tu descripción de VHDL:

process(clock_50M)
begin 
    if (clock_50M 'event and clock_50M='1') then 
        r_1<= r;
        r_2<=r_1;
    end if ;
    r_delay1<=r_1;
    r_delay2<= r_2;
end process;

Esto no se sintetiza de la forma que desee.

  1. Debes poner r_delay1 < = r_1; y r_delay2 < = r_2; dentro del si para determinar en qué borde del reloj debe ocurrir. No hay Flip Flops reaccionando a ambos.

  2. No use clock_50M 'event y clock_50M =' 1 ' use rising_edge (clock_50M) es más legible

respondido por el TM90

Lea otras preguntas en las etiquetas