2012-01-24 3 views

Respuesta

21

La "ley general" es que

cualquier cosa que su proceso necesita saber acerca de los cambios de tiene que estar en la lista de sensibilidad.


Para un registro synthesisable típico con un restablecimiento sincrónica:

process (clk) is 
begin 
    if rising_edge(clk) then 
     if reset = '1' then 
      -- do reset things 
     else 
      -- read some signals, assign some outputs 
     end if; 
    end if; 
end process; 

Sólo el reloj tiene que estar en la lista, como todo lo demás sólo se mira cuando el reloj cambia (debido a la declaración if rising_edge(clk).


Si necesita un asíncrono reinicio:

process (clk, reset) is 
begin 
    if reset = '1' then 
     -- do reset things 
    elsif rising_edge(clk) then 
     -- read some signals, assign some outputs 
    end if; 
end process; 

entonces la señal reset también debe estar en la lista de sensibilidad, ya que su diseño tiene que comprobar el valor de la misma cada vez que se cambia, con independencia de lo que el reloj está haciendo.


para la lógica combinatoria, evito utilizando procesos completamente debido a los problemas de mantenimiento de la lista de sensibilidad-up-hasta la fecha, y el potencial para la simulación entonces comportarse de manera diferente al código sintetizada. Esto se ha aliviado con la palabra clave all en VHDL-2008, pero todavía no me he encontrado queriendo escribir lógica combinatoria larga y complicada de modo que un proceso ayudaría.

12

Si una señal está en la lista de sensibilidad de un proceso, el proceso se "activará" y se evaluará cada vez que cambie el valor de esa señal. Si no está en la lista de sensibilidad, una señal puede cambiar, pero un proceso no se volverá a evaluar para determinar cuáles deberían ser las nuevas salidas.

Para combinatoria Lógica: probable es que desea transferir todas las señales de entrada que se incluirán en la lista de sensibilidad. Si no están incluidos en la lista de sensibilidad, entonces su resultado no cambiará incluso cuando esa señal de entrada cambie. Este es un error común (debido a descuido). Tenga en cuenta que en VHDL 2008 puede usar la palabra clave "all" para incluir automáticamente todas las señales necesarias en su proceso y evitar la creación de pestillos.

Para lógica síncrona: Es probable que solo desee la señal de su reloj (y tal vez su reinicio) en la lista de sensibilidad. Esto se debe a que solo le preocupa el valor de sus señales (que no sean el reloj) cuando el reloj de su sistema ha cambiado. Esto se debe a que normalmente describe registros (compuestos por flip flops) que solo permiten cambiar su valor de salida en el borde del reloj.

Todo esto puede ser confuso en el caso de usar HDL para síntesis porque solo un subconjunto de los circuitos que describe en VHDL se puede implementar en realidad dentro de un FPGA. Por ejemplo, no puede tener un elemento de memoria primitivo que sea sensible a dos bordes de reloj independientes, aunque podría describir dicho circuito incluyendo dos relojes en una lista de sensibilidad.

1

Además, las herramientas de síntesis (hablando de Xilinx XST en este caso) no siempre respetan la lista de sensibilidad del proceso. Si no enumera todos los procesos cuyos valores se evalúan en el cuerpo del proceso, el XST emitirá una advertencia que diga que supondrá que las señales cuyos valores se evalúan están en la lista de sensibilidad. Eso puede llevar a diferencias entre las simulaciones de comportamiento y el hardware real. Tenlo en mente.

0

... también, tenga cuidado, la lista de sensibilidad no tiene influencia sobre el comportamiento de su diseño una vez que se ha sintetizado. Solo se usa durante la simulación. Por lo tanto, es bastante fácil introducir una diferencia en el comportamiento entre RTL y el código sintetizado mediante cambios en la lista de sensibilidad.

Las reglas que da Josh son buenas, pero sobre todo, lea las advertencias que le dan sus herramientas y actúe en consecuencia. Normalmente verifican que la lista de sensibilidad sea correcta y señalarán cualquier problema. El modo Emacs VHDL también tiene un comando para actualizar la lista de sensibilidad, y normalmente es bastante bueno en eso.


Hmmmm, Ninja'd

+1

¡No es correcto! _ "la lista de sensibilidad no tiene influencia sobre el comportamiento de su diseño una vez que se ha sintetizado." _ Dependiendo de la herramienta de síntesis, la lista de sensibilidad puede ignorarse, o puede deducirse un enganche. – Philippe

+1

Ok, "no tiene influencia en muchas * herramientas de síntesis", donde "muchas" son las que he usado. –

Cuestiones relacionadas