Bedingte Logik in VHDL meistern: If-Then-Elsif-Else erklärt
Im vorherigen Tutorial nutzten wir einen bedingten Ausdruck mit dem Wait Until-Statement, um einen Prozess nur dann auszulösen, wenn zwei Zählersignale übereinstimmten. Was aber, wenn das Programm je nach unterschiedlichen Eingaben verschiedene Aktionen ausführen soll?
Das If-Then-Elsif-Else-Konstrukt erlaubt es, die Logik zu verzweigen. Abhängig vom Wert einer Variablen oder dem Ergebnis eines Ausdrucks kann das Programm unterschiedliche Pfade einschlagen.
Dieser Artikel gehört zur Serie „Basic VHDL Tutorials“.
Grundlegende Syntax
Die kanonische Form lautet:
if <Bedingung> then elsif <Bedingung> then else end if;
Die elsif- und else-Zweige sind optional, elsif kann mehrfach vorkommen. Eine <Bedingung> kann ein boolescher Literalwert oder ein Ausdruck sein, der true oder false ergibt.
Beispiel: MyCounter < 10 ist wahr, wenn MyCounter kleiner als zehn ist.
Relationale Operatoren
| = | gleich |
| /= | ungleich |
| < | kleiner als |
| <= | kleiner oder gleich |
| > | größer als |
| >= | größer oder gleich |
Logische Operatoren
| not a | wahr, wenn a falsch ist |
| a and b | wahr, wenn a und b wahr sind |
| a or b | wahr, wenn a oder b wahr sind |
| a nand b | wahr, wenn a oder b falsch ist |
| a nor b | wahr, wenn a und b falsch sind |
| a xor b | wahr, wenn genau einer von a, b wahr ist |
| a xnor b | wahr, wenn a und b gleich sind |
Übung
Unten steht ein vollständiges VHDL-Beispiel, das das If-Then-Elsif-Else-Konstrukt in Aktion demonstriert.
Finaler Code:
entity T08_IfTb is end 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;
Simulator-Konsolenausgabe beim Ausführen in ModelSim:
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 initialisierten CountDown mit 10 und CountUp mit 0. Beide Zähler werden im ersten Prozess gleichzeitig alle 10 ns aktualisiert. Der zweite Prozess wartet auf diese Signale, wird also bei jeder Änderung ausgelöst. Der If-Then-Elsif-Else-Block wählt dann einen von drei Zweigen: CountUp > CountDown, CountUp < CountDown oder CountUp = CountDown. Zwar ist ein explizites else nicht zwingend, aber als Best Practice empfohlen, um alle Randfälle abzudecken.
Der Konsolen-Trace bestätigt, dass der zweite Prozess die Bedingung nach jedem Update auswertet und die passende Meldung ausgibt.
Zusammenfassung
- If-Then allein oder kombiniert mit Elsif und Else verwenden, um alle Szenarien abzudecken.
- Bedingungen können relationale, logische und arithmetische Ausdrücke enthalten.
Weiter zum nächsten Tutorial »
VHDL
- Wie Molybdän die moderne Industrie formt: Nutzung, Vorteile und Versorgungsdynamik
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- VHDL-Testbench-Simulation sauber beenden
- PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
- Zufallszahlen in VHDL generieren: Von Uniform zu OSVVM
- In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
- Impure Functions in VHDL nutzen: FSM-Lesbarkeit und Wartbarkeit steigern
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
- Endlicher Automat in VHDL entwerfen: Praktisches Ampel-Beispiel
- Schleiftechniken für Werkzeugschleifmaschinen meistern: Praktischer Leitfaden