Cómo crear un proceso con una Lista de Sensibilidad en VHDL
Siempre debe usar una lista de sensibilidad para desencadenar procesos en los módulos de producción. Las listas de sensibilidad son parámetros de un proceso que enumera todas las señales a las que el proceso es sensible. Si alguna de las señales cambia, el proceso se reactivará y se ejecutará el código que contiene.
Ya hemos aprendido a usar el wait on
y wait until
Instrucciones para despertar un proceso cuando cambia una señal. Sin embargo, para ser honesto, no es así como escribo la mayoría de mis procesos.
Esta publicación de blog es parte de la serie Tutoriales básicos de VHDL.
Al escribir código VHDL, el estilo de escritura depende de si el código está destinado o no a ejecutarse solo en un simulador. Si estoy escribiendo código de simulación, como lo hemos estado haciendo en esta serie de tutoriales, siempre usa wait
declaraciones para controlar los procesos. Si estoy escribiendo código del que pretendo crear una implementación física, nunca usa wait
declaraciones.
La sintaxis para un proceso con una lista de confidencialidad es:process(<signal1>, <signal2>, ..) is
begin
<main logic here>
end process;
Una peculiaridad importante de la lista de confidencialidad es que todas las señales que se leen dentro del proceso deben estar en la lista de sensibilidad. Sin embargo, el simulador no le informará si no agrega una señal a la lista de sensibilidad, porque es legal en el lenguaje VHDL. El problema es que si no lo hace, el código se comportará de manera diferente cuando se sintetice y se use en una implementación física.
En VHDL-2008, la palabra clave all
está permitido usar en lugar de enumerar cada señal. Desafortunadamente, la mayoría del software de síntesis no es compatible con esta nueva revisión del lenguaje VHDL.
Ejercicio
En este video tutorial aprenderemos a crear un proceso usando una lista de sensibilidad en VHDL:
El código final que creamos en este tutorial:
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; -- Process triggered using Wait On process is begin if CountUp = CountDown then report "Process A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Equivalent process using a sensitivity list process(CountUp, CountDown) is begin if CountUp = CountDown then report "Process B: Jackpot!"; end if; end process; end architecture;
La salida a la consola del simulador cuando presionamos el botón ejecutar en ModelSim:
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
Podemos ver en las impresiones que los dos procesos se comportan de manera similar. Esto se debe a que un proceso con una lista de sensibilidad es, por definición, equivalente a un proceso con wait on
al final del proceso.
Los procesos con listas de sensibilidad se utilizan normalmente en el código que se pretende sintetizar. Tal código se conoce comúnmente como código de nivel de transferencia de registro (RTL). Esta es una convención, pero hay buenas razones para ello. Aunque algunos wait on
y wait until
las declaraciones se pueden sintetizar, es difícil saber qué tipo de hardware creará.
Para llevar
- Un proceso con una lista de confidencialidad es equivalente a un proceso con
wait on
al final - Todas las señales que se leen dentro de un proceso deben estar en la lista de sensibilidad
- Utilice
wait
declaraciones en código de simulación y listas de sensibilidad en código RTL
Ir al siguiente tutorial »
VHDL
- Cómo crear una lista de cadenas en VHDL
- Cómo crear un banco de pruebas controlado por Tcl para un módulo de bloqueo de código VHDL
- Cómo crear un controlador PWM en VHDL
- Cómo crear un FIFO de búfer de anillo en VHDL
- Cómo crear un banco de pruebas de autocomprobación
- Cómo crear una lista enlazada en VHDL
- Cómo usar un procedimiento en un proceso en VHDL
- Cómo usar una función impura en VHDL
- Cómo usar una función en VHDL
- Cómo crear una máquina de estados finitos en VHDL
- Cómo usar un procedimiento en VHDL