Einsatz von Sensitivity Lists in VHDL-Prozessen für zuverlässiges RTL-Design
In der professionellen VHDL-Entwicklung werden Prozesse üblicherweise über eine Sensitivity List (Empfindlichkeitsliste) gesteuert, nicht über Während Für Simulationscode nutze ich stets Die Syntax für einen Prozess mit Sensitivity List lautet: Jedes Signal, das innerhalb des Prozesses gelesen wird, muss in der Liste auftauchen. Der VHDL-Compiler meldet ein fehlendes Signal nicht, aber das Weglassen verändert das Verhalten nach der Synthese. VHDL‑2008 führte das Schlüsselwort Im begleitenden Video-Tutorial durchlaufen wir die Erstellung eines Prozesses, der eine Sensitivity List verwendet. Der finale VHDL-Code aus dieser Lektion: Die Ausführung dieses Testbenchs in ModelSim liefert: Die Konsolenausgabe zeigt, dass sowohl der In der Praxis sind Sensitivity Lists der De-facto-Standard für synthetisierbares RTL. Sie bieten klare Intent, ermöglichen Synthese-Tools die Generierung korrekter Hardware und vermeiden die Mehrdeutigkeiten, die Weiter zum nächsten Tutorial hier.wait-Anweisungen. Eine Sensitivity List führt alle Signale auf, die den Prozess bei einer Änderung reaktivieren sollen.wait on und wait until für Simulationen praktisch sind, werden sie in synthetisierbarem RTL-Code kaum verwendet. Bei der Synthese wird ein wait-Statement oft ignoriert, was zu unvorhersehbarer Hardware führt. Im Gegensatz dazu lässt sich eine Sensitivity List direkt auf einen kombinatorischen oder taktsynchronen Block abbilden, den Synthese-Tools zuverlässig implementieren können.Grundlagen: Prozess-Sensitivity in VHDL
wait-Statements zur Zeitsteuerung. Für jedes Design, das in Silizium synthetisiert werden soll, verzichte ich vollständig auf wait und setze Sensitivity Lists ein.process( signal1, signal2, ... ) is
begin
-- Hauptlogik hier
end process;
all ein, um automatisch alle gelesenen Signale einzuschließen, z. B. process(all). Die meisten kommerziellen Synthese-Tools unterstützen diese Funktion jedoch noch nicht.Übung
entity T09_SensitivityListTb is end entity;
architecture sim of T09_SensitivityListTb is
signal CountUp : integer := 0;
signal CountDown : integer := 10;
begin
-- Prozess mit wait for
process is
begin
CountUp <= CountUp + 1;
CountDown <= CountDown - 1;
wait for 10 ns;
end process;
-- Prozess ausgelöst mit Wait On
process is
begin
if CountUp = CountDown then
report "Process A: Jackpot!";
end if;
wait on CountUp, CountDown;
end process;
-- Äquivalenter Prozess mit Sensitivity List
process(CountUp, CountDown) is
begin
if CountUp = CountDown then
report "Process B: Jackpot!";
end if;
end process;
end architecture;
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
wait on-Prozess als auch der Sensitivity-List-Prozess unter identischen Bedingungen feuern. Diese Äquivalenz besteht, weil sich eine Sensitivity List implizit wie ein wait on am Ende des Prozesses verhält.wait-Statements mit sich bringen können.
Wichtigste Erkenntnisse
wait on endet.wait-Statements für simulationsspezifischen Code verwenden; Sensitivity Lists für synthetisierbares RTL.
VHDL
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
- 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
- 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