8. Timing in VHDL

8.1 Simulationsablauf

Die nebenläufigen Anweisungen in VHDL werden streng genommen nicht parallel abgearbeitet. Durch einen speziellen Simulationsablauf wird die Nebenläufigkeit jedoch "nachgebildet". Dabei sind neben den Zusammenhängen zwischen nebenläufigen und sequentiellen Anweisungen auch die Unterschiede zwischen Signal- und Variablenzuweisungen zu beachten.

Auf Architekturebene sind alle Anweisungen "nebenläufig". Auch Prozesse gelten als nebenläufige Anweisung. Sequentielle Anweisungen stehen nur innerhalb von Prozessen, Funktionen oder Prozeduren.

Während der Simulation werden die Zeitpunkte aus der Ereignisliste nacheinander abgearbeitet. Ein Simulationszeitpunkt besteht dabei im allgemeinen aus mehreren sog. "Delta-Zyklen", die um eine infinitesimal kleine Zeit, mit "Delta" bezeichnet, versetzt sind. Jeder dieser Zyklen besteht aus zwei aufeinanderfolgenden Phasen:

1. Prozeß-Ausführungsphase ("process evaluation"):

Hier werden die aktiven Prozesse bis zur END -Anweisung bzw. bis zur nächsten WAIT -Anweisung abgearbeitet. Dies beinhaltet das Ausführen aller enthaltenen Anweisungen bis auf die Signalzuweisungen, also insbesondere auch die Zuweisung von Variablen.

2. Signalzuweisungsphase ("signal update"):

Nach Ausführung des oder der aktiven Prozesse werden die dort zugewiesenen Signaländerungen durchgeführt. Dadurch können weitere Prozesse oder nebenläufige Signalzuweisungen aktiviert werden. In diesem Fall wird der Zyklus ein "Delta" später wieder von vorne durchlaufen.

Dieser Ablauf wird zu einem Zeitpunkt solange wiederholt, bis sich ein stabiler Zustand einstellt, d.h. bis sich keine neue Signalzuweisungen mehr ergeben und kein weiterer Prozeß aktiviert wird.

 

Besondere Beachtung erfordern deshalb Prozesse, die gemischt Variablen- und Signalzuweisungen verwenden und gegenseitige Abhängigkeiten zwischen Variablen und Signalen aufweisen. Auch bei der Prozeßkommunikation ist darauf zu achten, daß sich die triggernden Signale zum richtigen Zeitpunkt ändern.

Entsprechendes wie für die Prozesse gilt auch bei der Zuweisung von Signalen durch nebeläufige Anweisungen. Durch eine solche Anweisung kann eine andere Anweisung zum gleichen Simulationszeitpunkt aktiviert werden. Diese findet entsprechend erst ein "Delta" später statt.

8.2 Verzögerungsmodelle

Bei der Beschreibung der Signalzuweisungen wurden bereits die beiden in VHDL zur Verfügung stehenden Verzögerungsmodelle "Transport-Delay" und "Inertial-Delay" erwähnt.

Beiden Verzögerungsmodellen gemein ist der sogenannte "Preemptions-Mechanismus", der ein Löschen von vorher zugewiesenen, jedoch erst nach der aktuellen Signaländerung wirksamen Ereignissen bedeutet.

8.2.1 Transport-Verzögerungsmodell

Dieses Verzögerungsmodell, daß erst durch explizite Kennzeichnung mit dem Schlüsselwort TRANSPORT wirksam wird, verwendet nur den erwähnten "Preemptions-Mechanismus". Bei folgender Signalzuweisung, die zum Zeitpunkt 2 ns ausgeführt wird, werden somit alle Einträge aus der Ereignisliste des Signals sig_x entfernt, die nach dem Zeitpunkt 7 ns stattfinden sollten, gelöscht:

   sig_x <= TRANSPORT '1' AFTER 5 ns;

8.2.2 Inertial-Verzögerungsmodell

Das "Inertial-Verzögerungsmodell" ist per default (ohne explizite Kennzeichnung) wirksam. Es verwendet neben dem "Preemption-Mechanismus" folgende Regel:

  1. Markiere eine unmittelbar vor dem neuen Eintrag stattfindende Transaktion, die den gleichen (neuen) Signalwert aufweist.
  2. Markiere die aktuelle und die neue Transaktion.
  3. Lösche alle nicht markierten Transaktionen.

Diese Vorgehensweise führt dazu, daß nur Impulse, die eine längere (oder gleichlange) Dauer als die angegebene Verzögerungszeit besitzen, auch tatsächlich auf dem Signal auftreten. Eine Zuweisung der Art:

   sig_x <= sig_y AFTER 5 ns;

führt aufgrund des "Inertial-Modells" dazu, daß alle Impulse des Signals sig_y , die weniger als 5 ns Impulsbreite aufweisen, nicht auf dem Signal sig_x auftreten.