Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> VHDL

Uso de listas de sensibilidad en procesos VHDL para diseño RTL fiable

En VHDL de nivel producción, los procesos se controlan típicamente mediante una lista de sensibilidad en lugar de sentencias wait. Una lista de sensibilidad enumera cada señal que debe despertar el proceso cuando cambia.

Mientras que wait on y wait until son convenientes para simulación, rara vez se usan en RTL sintetizable. En síntesis, una sentencia wait a menudo se ignora, llevando a hardware impredecible. Por el contrario, una lista de sensibilidad mapea directamente a un bloque combinacional o clock-síncrono que las herramientas de síntesis pueden implementar fiablemente.

Tutoriales Básicos VHDL – Sensibilidad de Proceso

Cuando escribo código para simulador, siempre confío en sentencias wait para controlar timing. Para cualquier diseño que se sintetizará en silicio, evito wait completamente y uso listas de sensibilidad.

La sintaxis para un proceso con lista de sensibilidad es:

 process( signal1, signal2, ... ) is begin -- main logic here end process; 

Nota que toda señal leída dentro del proceso debe aparecer en la lista. El compilador VHDL no marca una señal faltante, pero omitir una cambiará el comportamiento tras síntesis.

VHDL-2008 introdujo la palabra clave all para incluir automáticamente toda señal leída, ej. process(all). Sin embargo, la mayoría de sintetizadores comerciales aún carecen de soporte para esta característica.

Ejercicio

En el tutorial de video adjunto, recorremos la construcción de un proceso que usa lista de sensibilidad.

El snippet VHDL final producido en esta lección es:

 entity T09_SensitivityListTb is end entity; architecture sim of T09_SensitivityListTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; -- Proceso disparado usando Wait On process is begin if CountUp = CountDown then report "Process A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Proceso equivalente usando lista de sensibilidad process(CountUp, CountDown) is begin if CountUp = CountDown then report "Process B: Jackpot!"; end if; end process; end architecture; 

Ejecutando este testbench en ModelSim produce:

 VSIM 2> run # ** Note: Process A: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb # ** Note: Process B: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb 

Análisis

La salida de consola demuestra que tanto el proceso wait on como el proceso con lista de sensibilidad disparan bajo condiciones idénticas. Esta equivalencia se mantiene porque una lista de sensibilidad se comporta implícitamente como un wait on colocado al final del proceso.

En práctica, las listas de sensibilidad son el estándar de facto para RTL sintetizable. Proporcionan intención clara, permiten a herramientas de síntesis generar hardware correcto y evitan ambigüedades que las sentencias wait pueden introducir.

Uso de listas de sensibilidad en procesos VHDL para diseño RTL fiable

Conclusiones clave

  • Un proceso con lista de sensibilidad es funcionalmente idéntico a un proceso terminando con wait on.
  • Todas las señales leídas dentro del proceso deben aparecer en su lista de sensibilidad.
  • Use sentencias wait para código solo-simulación; use listas de sensibilidad para RTL sintetizable.

Proceda al siguiente tutorial aquí.

VHDL

  1. Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo
  2. Creación de un testbench dirigido por Tcl para un módulo VHDL de cerradura por código
  3. Implementación de un controlador PWM en VHDL: Diseño, simulación y demo en FPGA
  4. Diseño de un búfer circular FIFO robusto en VHDL usando RAM de bloques
  5. Cómo construir un testbench de auto-comprobación en VHDL: Guía práctica
  6. Implementación de lista enlazada dinámica en VHDL con tipos protegidos y punteros de acceso
  7. Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
  8. Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
  9. Dominando funciones VHDL: Guía práctica para diseño eficiente
  10. Diseño de máquina de estados finitos en VHDL: Ejemplo práctico de semáforo
  11. Uso de procedimientos en VHDL: Simplifique su diseño con código reutilizable