05.07.2013 Aufrufe

VHDL Kompakt - CES

VHDL Kompakt - CES

VHDL Kompakt - CES

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!