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 Mientras que Cuando escribo código para simulador, siempre confío en sentencias La sintaxis para un proceso con lista de sensibilidad es: 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 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: Ejecutando este testbench en ModelSim produce: La salida de consola demuestra que tanto el 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 Proceda al siguiente tutorial aquí.wait. Una lista de sensibilidad enumera cada señal que debe despertar el proceso cuando cambia.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
wait para controlar timing. Para cualquier diseño que se sintetizará en silicio, evito wait completamente y uso listas de sensibilidad. process( signal1, signal2, ... ) is begin -- main logic here end process;
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
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;
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
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.wait pueden introducir.
Conclusiones clave
wait on.wait para código solo-simulación; use listas de sensibilidad para RTL sintetizable.
VHDL
- Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo
- Creación de un testbench dirigido por Tcl para un módulo VHDL de cerradura por código
- Implementación de un controlador PWM en VHDL: Diseño, simulación y demo en FPGA
- Diseño de un búfer circular FIFO robusto en VHDL usando RAM de bloques
- Cómo construir un testbench de auto-comprobación en VHDL: Guía práctica
- Implementación de lista enlazada dinámica en VHDL con tipos protegidos y punteros de acceso
- Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
- Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
- Dominando funciones VHDL: Guía práctica para diseño eficiente
- Diseño de máquina de estados finitos en VHDL: Ejemplo práctico de semáforo
- Uso de procedimientos en VHDL: Simplifique su diseño con código reutilizable