VHDL Kompakt - CES
VHDL Kompakt - CES
VHDL Kompakt - CES
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
1.3 Simulation<br />
1.3 Simulation<br />
Die Simulation von <strong>VHDL</strong>-Schaltungen (Entity + Architektur) ist integraler Bestandteil der<br />
Semantik. In dem Sprachstandard wird deshalb auch ein Simulationsalgorithmus definiert,<br />
dessen Verhalten die Abarbeitung konkurrenter und sequenzieller <strong>VHDL</strong>-Codeabschnitte<br />
definiert.<br />
Für den Simulator besteht eine <strong>VHDL</strong>-Beschreibung aus einer Menge konkurrent aktiven<br />
Codes — wie bei der Hardware: Funktionseinheiten arbeiten gleichzeitig! Wie oben bei<br />
den Architekturen beschrieben, können dies Anweisungen einer Datenflussbeschreibung,<br />
Instanzen in einer hierarchischen Modellierung oder Prozesse sein. Die Prozesse wiederum,<br />
begrenzen sequenziell abzuarbeitenden Code, der in Verhaltensbeschreibungen benutzt<br />
wird. Der <strong>VHDL</strong>-Simulationsalgorithmus beschreibt jetzt das prinzipielle Verfahren, wie<br />
die konkurrenten Modelle vom Simulator behandelt werden müssen, damit das Ergebnis<br />
unabhängig von der sequenziellen Abarbeitungsreihenfolge des Programms ist.<br />
Für die Simulation wird ein ereignisgesteuerter Simulator angenommen, der eine zentrale<br />
Liste (Schedule) besitzt in der zukünftige Ereignisse stehen. Diese wurden durch den<br />
bisherigen Verlauf der Simulation erzeugt. Zwei Arten von Ereignissen sind möglich:<br />
1. Wertewechsel von Signalen (Verbindung der konkurrenten Teile untereinander):<br />
Ereignis = Zeitpunkt + Signal + Wert<br />
2. Abarbeitung von sequenziellem Code in einem Prozess:<br />
Ereignis = Zeitpunkt bzw. Bedingung + Prozess + Einsprungstelle<br />
Eine fiktive Zeiteinheit (delta-Time) erlaubt die Behandlung von Signalzuweisungen ohne<br />
Verzögerungszeit. Dadurch kann der Simulator die Grundschleife der Simulation mehrfach<br />
durchlaufen, ohne dass die simulierte Zeit fortschreitet. Um die Wirkungsweise von Signalzuweisungen<br />
besser zu verstehen, ist der Simulationszyklus hier kurz skizziert:<br />
1. Aktivierung des Zyklus zu einem Zeitpunkt t0. Alle Ereignisse, die für diesen Zeitpunkt<br />
im Schedule sind, sind abzuarbeiten. Dazu werden alle Signalzuweisungen des<br />
Schedule ausgeführt und die neu berechneten Werte der Signale gespeichert.<br />
2. Parallele Anweisungen, die diese Signale als Eingänge benutzen – zu den Signalen<br />
sensitiv sind –, müssen in diesem Zyklus ausgeführt werden. Zusammen mit Prozessen<br />
aus dem Schedule wird so eine Menge aktiver Anweisungen bestimmt.<br />
3. Jede dieser konkurrenten Anweisungen / Prozesse wird von dem Simulator abgearbeitet.<br />
Die Signalwerte werden der unter Schritt 1. berechneten Datenstruktur entnommen.<br />
Wenn die Simulation der Anweisungen neue Ereignisse erzeugt, dann werden<br />
diese in extra Datenstrukturen verwaltet.<br />
Wegen dieser Trennung können sich die Signalwerte innerhalb eines Simulationszyklus nicht<br />
ändern — die Abarbeitung ist unabhängig von der Reihenfolge.<br />
Der sequenzielle Code in Prozessen wird, beginnend an der Einsprungstelle, so lange<br />
abgearbeitet, bis der Prozess terminiert. Gerät die Abarbeitung in eine Endlosschleife,<br />
dann. . . hat man ein Problem.<br />
4. Nach der Abarbeitung aller aktiven Anweisungen ist der Zyklus für den Zeitpunkt t0<br />
abgeschlossen. Die simulierten Ereignisse werden entfernt und ” neue Ereignisse“ aus<br />
Schritt 3. werden im Schedule wirksam.<br />
9