Unterschied zwischen Signalen und Variablen in VHDL verstehen
Im vorherigen Tutorial lernten wir, wie man eine Variable innerhalb eines Prozesses deklariert. Variablen eignen sich ideal für lokale algorithmische Arbeit, sind aber außerhalb dieses Prozesses nicht sichtbar. Wenn ein Wert mit anderen Teilen des Designs geteilt werden soll, verwendet man ein Signal.
Signale werden im deklarativen Bereich einer Architecture deklariert – also zwischen der Zeile architecture <architecture_name> of <entity_name> is und dem Schlüsselwort begin.
Dieser Beitrag gehört zur Serie „Basic VHDL Tutorials“.
Die Syntax für die Signaldeklaration lautet:signal <name> : <type>;
Ein Signal kann optional mit einem Initialwert deklariert werden:signal <name> : <type> := <initialwert>;
Übung
In diesem Video-Tutorial lernen wir, ein Signal zu deklarieren und den Kernunterschied zwischen Variable und Signal zu erkennen.
Der finale Code dieses Tutorials:
entity T06_SignalTb is end entity;
architecture sim of T06_SignalTb is
signal MySignal : integer := 0;
begin
process is
variable MyVariable : integer := 0;
begin
report "*** Process begin ***";
MyVariable := MyVariable + 1;
MySignal <= MySignal + 1;
report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal);
MyVariable := MyVariable + 1;
MySignal <= MySignal + 1;
report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal);
wait for 10 ns;
report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal);
end process;
end architecture;
Die Ausgabe in der Simulatorkonsole beim Drücken von Run in ModelSim:
VSIM 2> run # ** Note: *** Process begin *** # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=1, MySignal=0 # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=2, MySignal=0 # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=2, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: *** Process begin *** # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=3, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=4, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=4, MySignal=2 # Time: 20 ns Iteration: 0 Instance: /t06_signaltb ...
Analyse
Wir erstellten ein Signal und eine Variable mit demselben Initialwert 0. Obwohl wir sie im Prozess identisch behandelten, zeigt die Konsolenausgabe unterschiedliches Verhalten. Die wesentlichen Unterschiede sind:
- Variablen nutzen den
:=-Operator und werden innerhalb des Prozesses sofort aktualisiert. - Signale nutzen den
<=-Operator; der neue Wert wird geplant und tritt erst in Kraft, wenn der Prozess anhält (z. B. an einemwait-Statement). - Wird einem Signal mehrmals vor dem Wiederaufnehmen des Prozesses zugewiesen, „gewinnt“ nur die letzte Zuweisung, weil frühere geplante Werte überschrieben werden.
In unserem Beispiel gingen die ersten beiden Inkremente von MySignal verloren, da sie vor dem wait for 10 ns; überschrieben wurden. Der anschließende Inkrement erscheint nach der Unterbrechung, wie erwartet.
Zusammenfassung
- Variablen für temporäre Werte verwenden, die sofortige, lokale Updates benötigen.
- Signale verwenden, wenn Änderungen an andere Prozesse oder Komponenten kommuniziert werden müssen.
- Darauf achten, dass Signalzuweisungen geplant sind und nur bei Prozesspause wirksam werden; mehrfache Zuweisungen ohne Pause führen dazu, dass nur der letzte Wert überlebt.
Zum nächsten Tutorial »
VHDL
- Signed vs. Unsigned in VHDL meistern: Praktische Einblicke
- VHDL Variables erklärt: Praxisbeispiele & Regeln für zuverlässiges Design
- Cloud Computing vs. Traditional Computing: Praktischer Vergleich
- 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
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
- BeiDou Navigationssystem erklärt: Wie es sich von GPS abhebt