Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

So erstellen Sie einen Prozess mit einer Sensitivitätsliste in VHDL

Sie sollten immer eine Vertraulichkeitsliste verwenden um Prozesse in Produktionsmodulen auszulösen. Empfindlichkeitslisten sind Parameter für einen Prozess, die alle Signale auflisten, auf die der Prozess empfindlich reagiert. Wenn sich eines der Signale ändert, wacht der Prozess auf und der darin enthaltene Code wird ausgeführt.

Wir haben bereits gelernt, den wait on zu verwenden und wait until Anweisungen zum Aufwecken eines Prozesses, wenn sich ein Signal ändert. Aber um ehrlich zu sein, so schreibe ich die meisten meiner Prozesse nicht.

Dieser Blogpost ist Teil der Reihe Basic VHDL Tutorials.

Beim Schreiben von VHDL-Code hängt der Schreibstil davon ab, ob der Code nur in einem Simulator ausgeführt werden soll oder nicht. Wenn ich Simulationscode schreibe, wie wir es in dieser Tutorial-Reihe getan haben, mache ich das immer Verwenden Sie wait Anweisungen zur Steuerung der Prozesse. Wenn ich Code schreibe, von dem ich beabsichtige, eine physische Implementierung zu erstellen, dann niemals Verwenden Sie wait Aussagen.

Die Syntax für einen Prozess mit einer Vertraulichkeitsliste lautet:
process(<signal1>, <signal2>, ..) is
begin
    <main logic here>
end process;

Eine wichtige Eigenart der Vertraulichkeitsliste ist, dass alle Signale, die innerhalb des Prozesses gelesen werden, müssen auf der Sensitivitätsliste stehen. Der Simulator informiert Sie jedoch nicht, wenn Sie der Sensitivitätsliste kein Signal hinzufügen, da dies in der VHDL-Sprache zulässig ist. Das Problem ist, dass sich der Code, wenn Sie dies nicht tun, anders verhält, wenn er synthetisiert und in einer physischen Implementierung verwendet wird.

In VHDL-2008 das Schlüsselwort all darf verwendet werden, anstatt jedes Signal aufzulisten. Leider unterstützen die meisten Synthesizerprogramme diese neuere Version der VHDL-Sprache nicht.

Übung

In diesem Video-Tutorial lernen wir, wie man einen Prozess mit einer Sensitivitätsliste in VHDL erstellt:

Der endgültige Code, den wir in diesem Tutorial erstellt haben:

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;

Die Ausgabe an die Simulatorkonsole, wenn wir in ModelSim die Run-Taste gedrückt haben:

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

Analyse

Wir können aus den Ausdrucken sehen, dass sich die beiden Prozesse gleich verhalten. Das liegt daran, dass ein Prozess mit einer Sensitivitätsliste per Definition einem Prozess mit wait on entspricht am Ende des Prozesses.

Prozesse mit Sensitivitätslisten werden normalerweise in Code verwendet, der synthetisiert werden soll. Ein solcher Code wird allgemein als Register-Transfer-Level(RTL)-Code bezeichnet. Dies ist eine Konvention, aber es gibt gute Gründe dafür. Obwohl einige wait on und wait until Anweisungen synthetisiert werden können, ist es schwer zu wissen, welche Art von Hardware es erstellen wird.

Imbiss

Weiter zum nächsten Tutorial »


VHDL

  1. So erstellen Sie eine Liste von Zeichenfolgen in VHDL
  2. So erstellen Sie eine Tcl-gesteuerte Testbench für ein VHDL-Code-Sperrmodul
  3. So erstellen Sie einen PWM-Controller in VHDL
  4. So erstellen Sie einen Ringpuffer-FIFO in VHDL
  5. So erstellen Sie eine selbstüberprüfende Testbench
  6. So erstellen Sie eine verknüpfte Liste in VHDL
  7. So verwenden Sie eine Prozedur in einem Prozess in VHDL
  8. So verwenden Sie eine unreine Funktion in VHDL
  9. So verwenden Sie eine Funktion in VHDL
  10. So erstellen Sie einen endlichen Automaten in VHDL