So verwenden Sie bedingte Anweisungen in VHDL: If-Then-Elsif-Else

Im vorherigen Tutorial haben wir einen bedingten Ausdruck mit der Wait Until-Anweisung verwendet. Der Ausdruck stellte sicher, dass der Prozess nur ausgelöst wurde, wenn die beiden Zählersignale gleich waren. Aber was wäre, wenn wir wollten, dass das Programm in einem Prozess verschiedene Aktionen basierend auf verschiedenen Eingaben ausführt?

Die If-Then-Elsif-Else-Anweisungen können verwendet werden, um Verzweigungen in unserem Programm zu erstellen. Abhängig vom Wert einer Variablen oder dem Ergebnis eines Ausdrucks kann das Programm verschiedene Pfade einschlagen.

Dieser Blogbeitrag ist Teil der Basic VHDL Tutorials Serie.

Die grundlegende Syntax ist:

if <condition> then
elsif <condition> then
else
end if;

Die elsif und else sind optional und elsif kann mehrfach verwendet werden. Das <condition> kann ein boolescher true oder false sein, oder es kann ein Ausdruck sein, der zu true oder false ausgewertet wird.

Beispielausdruck, der true ist, wenn MyCounter kleiner als ist 10:

MyCounter < 10

Relationale Operatoren:

= gleich
/= nicht gleich
< weniger als
<= kleiner oder gleich
> größer als
>= größer oder gleich

Logische Operatoren:

nicht a wahr, wenn a falsch ist
a und b true wenn a und b wahr sind
a oder b true wenn a oder b wahr sind
a nand b true wenn a oder b falsch ist
a nor b true wenn a und b falsch sind
a xor b true wenn genau einer von a oder b wahr ist
a xnor b true, wenn a und b gleich sind

Übung

In diesem Video-Tutorial wir werden lernen, wie man If-Then-Elsif-Else-Anweisungen in VHDL verwendet:

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

entity T08_IfTb isend entity;architecture sim of T08_IfTb 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 is begin if CountUp > CountDown then report "CountUp is larger"; elsif CountUp < CountDown then report "CountDown is larger"; else report "They are equal"; end if; wait on CountUp, CountDown; end process;end architecture;

Die Ausgabe an die Simulatorkonsole, wenn wir in ModelSim die Schaltfläche Ausführen gedrückt haben:

VSIM 2> run# ** Note: CountDown is larger# Time: 0 ns Iteration: 0 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 0 ns Iteration: 1 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 10 ns Iteration: 1 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 20 ns Iteration: 1 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 30 ns Iteration: 1 Instance: /t08_iftb# ** Note: They are equal# Time: 40 ns Iteration: 1 Instance: /t08_iftb# ** Note: Countup is larger# Time: 50 ns Iteration: 1 Instance: /t08_iftb# ** Note: Countup is larger# Time: 60 ns Iteration: 1 Instance: /t08_iftb...

Analyse

Wir gaben CountDown einen Anfangswert von 10 und CountUp einen Wert von 0. Der erste Prozess ändert beide Zählerwerte genau zur gleichen Zeit, alle 10 ns. In diesem Fall wird der zweite Prozess ausgelöst, da das Programm immer in der Zeile wait on CountUp, CountDown; wartet. Das Programm wartet immer dort, da die If-Then-Elsif-Else-Anweisungen und die Report-Anweisungen null Simulationszeit verbrauchen.

Die If-Then-Elsif-Else-Anweisung bewirkt, dass das Programm einen der drei von uns erstellten Zweige verwendet. Die beiden ersten Zweige decken die Fälle ab, in denen die beiden Zähler unterschiedliche Werte haben. Wir hätten die Single else fallen lassen und elsif CountUp = CountDown then verwenden können, was das gleiche Ergebnis gehabt hätte. Es ist jedoch eine gute Entwurfspraxis, alle Zweige abzudecken, und die Klausel else deckt alle vorsätzlichen und unvorhergesehenen Fälle ab.

Wie wir aus dem Ausdruck sehen können, nimmt der zweite Prozess jedes Mal einen der drei Zweige, wenn sich die Zähler ändern.

Erhalten Sie exklusiven Zugang zu Übungen und Antworten!

Takeaway

  • If-Then kann allein oder in Kombination mit Elsif und Else verwendet werden.
  • Ausdrücke können relationale und logische Vergleiche und mathematische Berechnungen enthalten

Zum nächsten Tutorial „