Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

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 wait-Anweisungen. Eine Sensitivity List führt alle Signale auf, die den Prozess bei einer Änderung reaktivieren sollen.

Während 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

Für Simulationscode nutze ich stets 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.

Die Syntax für einen Prozess mit Sensitivity List lautet:

process( signal1, signal2, ... ) is
begin
  -- Hauptlogik hier
end process;

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 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

Im begleitenden Video-Tutorial durchlaufen wir die Erstellung eines Prozesses, der eine Sensitivity List verwendet.

Der finale VHDL-Code aus dieser Lektion:

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;

Die Ausführung dieses Testbenchs in ModelSim liefert:

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

Die Konsolenausgabe zeigt, dass sowohl der 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.

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 wait-Statements mit sich bringen können.

Einsatz von Sensitivity Lists in VHDL-Prozessen für zuverlässiges RTL-Design

Wichtigste Erkenntnisse

  • Ein Sensitivity-List-Prozess ist funktional identisch mit einem Prozess, der mit wait on endet.
  • Alle im Prozess gelesenen Signale müssen in der Sensitivity List stehen.
  • wait-Statements für simulationsspezifischen Code verwenden; Sensitivity Lists für synthetisierbares RTL.

Weiter zum nächsten Tutorial hier.

VHDL

  1. String-Listen in VHDL erstellen: Best Practices & Beispiel
  2. Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
  3. PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
  4. Ein robuster VHDL-Ringpuffer-FIFO im Block-RAM entwerfen
  5. Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
  6. Dynamische verkettete Liste in VHDL mit Protected Types und Access-Pointern
  7. In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
  8. Impure Functions in VHDL nutzen: FSM-Lesbarkeit und Wartbarkeit steigern
  9. VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
  10. Endlicher Automat in VHDL entwerfen: Praktisches Ampel-Beispiel