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

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

Ir al siguiente tutorial »


VHDL

  1. Cómo crear una lista de cadenas en VHDL
  2. Cómo crear un banco de pruebas controlado por Tcl para un módulo de bloqueo de código VHDL
  3. Cómo crear un controlador PWM en VHDL
  4. Cómo crear un FIFO de búfer de anillo en VHDL
  5. Cómo crear un banco de pruebas de autocomprobación
  6. Cómo crear una lista enlazada en VHDL
  7. Cómo usar un procedimiento en un proceso en VHDL
  8. Cómo usar una función impura en VHDL
  9. Cómo usar una función en VHDL
  10. Cómo crear una máquina de estados finitos en VHDL
  11. Cómo usar un procedimiento en VHDL