diferencia entre la lista de sensibilidad y espera vhdl

2

Tengo un multiplexor de 2 bits de muestra implementado con procesos un poco diferentes, el primero tiene una lista de sensibilidad y el segundo implementado con espera.
Quiero saber cuál es la diferencia entre estos dos códigos y cuál de ellos es más preciso.

 ARCHITECTURE Behavior OF mux2to1 IS
BEGIN
PROCESS ( a, b, s )
BEGIN
if s = '0' then
w<=a after 1.4 ns;
else
w<=b after 1.5 ns;
end if ;
END PROCESS ;
END Behavior ;

y el segundo código:

  ARCHITECTURE Behavior OF mux2to1 IS
    BEGIN
    PROCESS
    BEGIN
    wait on  a, b, s;
     if s = '0' then
    w<=a after 1.4 ns;
    else
    w<=b after 1.5 ns;
    end if ;
    END PROCESS ;
    END Behavior ;
    
pregunta Daniel.V

2 respuestas

4

Los dos procesos como los ha escrito son casi equivalentes. Si mueve la instrucción wait al final del segundo proceso, entonces son exactamente equivalentes. La diferencia es si el cuerpo del proceso se ejecuta o no antes del primer cambio en cualquiera de las señales enumeradas.

IEEE Std 1076-2008 11.3 párrafo 4 (en parte):

  

Si aparece una lista de sensibilidad de proceso después del proceso de palabra reservada, se supone que la declaración de proceso contiene una instrucción de espera implícita como la última declaración de la parte de la declaración de proceso; esta declaración de espera implícita tiene el formato wait on sensitivity_list ; , donde la lista de sensibilidad se determina de una de las dos maneras. Si la lista de sensibilidad del proceso se especifica como una lista de sensibilidad, entonces la lista de sensibilidad de la declaración de espera es la que sigue a la palabra reservada process . ...

    
respondido por el Dave Tweed
0

edit:

Parece que Dave Tweed tiene razón y yo estaba equivocado. Solo prueba este simple ejemplo.

entity test_e is
end entity;

architecture test_a of test_e is
    signal test_s : bit;
begin
    process (test_s)
    begin
        report "process triggered";
    end process;
end architecture;

Y simular 1 paso de tiempo. Aunque test_s no tiene ningún evento, el informe seguirá apareciendo.

    
respondido por el JHBonarius

Lea otras preguntas en las etiquetas