Concurrent Statements in VHDL meistern: Praktischer Leitfaden
Ein Concurrent Statement in VHDL ist eine Signalzuweisung direkt in der Architektur, außerhalb jedes process Blocks. Auch als Concurrent Assignment oder Concurrent Process bezeichnet.
Ein Concurrent Statement erzeugt implizit einen Prozess, der sensitiv auf alle Signale der rechten Seite der Zuweisung ist. Es ist syntaktischer Zucker für einen Prozess mit vollständiger Sensitivity List.
Diese Kurzschreibweise ist ideal für einfache kombinatorische Logik, die ein einzelnes Signal treibt. Statt vollem process mit Sensitivity List wird direkt im Architekturkörper zugewiesen.
Teil der Basic VHDL Tutorials Serie.
Richtig eingesetzt bleibt Code-Intent kristallklar – kein Prozess-Overhead für jedes einzelne Bit.
Übung
Video: Concurrent Statement erstellen.
Finaler Code dieses Tutorials:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity T13_ConcurrentProcsTb is
end entity;
architecture sim of T13_ConcurrentProcsTb is
signal Uns : unsigned(5 downto 0) := (others => '0');
signal Mul1 : unsigned(7 downto 0);
signal Mul2 : unsigned(7 downto 0);
signal Mul3 : unsigned(7 downto 0);
begin
process is
begin
Uns <= Uns + 1;
wait for 10 ns;
end process;
-- Prozess: Uns * 4
process is
begin
Mul1 <= Uns & "00";
wait on Uns;
end process;
-- Äquivalenter Prozess mit Sensitivity List
process(Uns) is
begin
Mul2 <= Uns & "00";
end process;
-- Concurrent Statement
Mul3 <= Uns & "00";
end architecture;
ModelSim Wellenform nach Run, Zoom auf Timeline:
Mul1, Mul2, Mul3 verhalten sich exakt gleich – Concurrent Statement und die beiden Prozesse sind voll äquivalent.
Alle Signale rechts vom <= werden implizit zur Sensitivity List. Linkes Signal aktualisiert sich bei jeder Änderung der rechten Signale.
Beispiel: Multiplikation von Uns mit 4 durch Links-Bit-Shift (Null-Anhängen). Alle Signals unsigned → Compiler behandelt als Zahlen. Zwei Null-Bits anhängen = Multiplikation mit 4.
Merksätze
- Concurrent Statement = Signalzuweisung direkt in Architektur.
- Funktional identisch zu Prozess mit allen rechten Signalen in Sensitivity List.
Nächstes Tutorial »
VHDL
- VHDL Procedure Beispiel: Inkrementieren eines Standard Logic Vectors
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
- VHDL-Testbench-Simulation sauber beenden
- PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
- Ein robuster VHDL-Ringpuffer-FIFO im Block-RAM entwerfen
- Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
- Dynamische verkettete Liste in VHDL mit Protected Types und Access-Pointern
- In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design