Value Change Dump

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Value Change Dump (VCD) ist ein ASCII-basiertes Format für sogenannte Dumpfiles, die zum Beispiel von einem EDA-Tool generiert werden. Das Standard-VCD-Format mit vierwertiger Logik wurde 1995 im Zusammenhang mit der Verilog-Hardwarebeschreibungssprache als IEEE-Standard 1364–1995 verabschiedet. Eine Erweiterung des VCD-Formats sechs Jahre später in Form des IEEE-Standards 1364–2001 unterstützt auch die Aufzeichnung von Signalstärke und -richtung. Die einfache und kompakte Struktur des VCD-Formats machte es zum universellen und unumgänglichen Dateiformat auch für Nicht-Verilog-Tools, wie z. B. VHDL, den freien Simulator GHDL und diverse Kernel-Tracer.

Struktur[Bearbeiten | Quelltext bearbeiten]

Die VCD-Datei besitzt einen Kopfteil (header), der einen Zeitstempel, die Simulator-Versionsnummer und eine Zeitskala-Definition enthält. Weiter gibt es einen Variablen-Definitionsbereich und einen Werteänderungsbereich. Die Bereiche sind nicht explizit voneinander getrennt, können aber anhand der Schlüsselwörter unterschieden werden.

Der Variablendefinitionsbereich enthält Anzeigeinformationen und die Liste der instantiierten Signale. Jeder Variable wird ein beliebiger, kompakter ASCII-Bezeichner zur Verwendung im Änderungsbereich zugewiesen. Die Anzeigetypeinstellung folgt dem Verilog-Konzept und beinhaltet die Typen module, task, function und fork.

Der Änderungsbereich enthält eine Serie von zeitgeordneten Werteänderungen der Signale des Simulationsmodells.

Syntax[Bearbeiten | Quelltext bearbeiten]

VCD-Schlüsselwörter werden mit einem $ markiert. Grundsätzlich leiten Schlüsselwörter eine Sektion ein, die durch das Schlüsselwort $end beendet wird.

Beispiel:

$timescale 1 ns $end

Ein Beispiel für eine VCD-Datei:

Anzeige der Beispieldatei
 $timescale 1ps $end
 $scope module logic $end
 $var wire 8 # data $end
 $var wire 1 $ data_valid $end
 $var wire 1 % en $end
 $var wire 1 & rx_en $end
 $var wire 1 ' tx_en $end
 $var wire 1 ( empty $end
 $var wire 1 ) underrun $end
 $upscope $end
 $enddefinitions $end
 #0
 b10000001 #
 0$
 1%
 0&
 1'
 0(
 0)
 #2211
 0'
 #2296
 b0 #
 1$
 #2302
 0$
 #2303

Der Code oben definiert sieben Signale mittels $var:

$var Typ Bitbreite ID Name

Die ID wird anschließend im Änderungsteil zur Kennzeichnung verwendet, der nach dem Schlüsselwort $enddefinitions $end beginnt. Der Bereich basiert auf Zeitstempeln (S), die mit # beginnen und den Simulationszeitpunkt (t) mithilfe der Skaladefinition (D) und festlegen, z. B. D = 1 ns, S = 500 → t = 500 ns.

Nach jedem Zeitstempel sind nur die Werte und das zugeordnete Signal gelistet, welche sich zu dem Zeitpunkt des Stempels ändern.

Die Änderung wird durch folgende Zeile beschrieben:

Neuer_Wert ID

Der Leerraum bzw. das Leerzeichen muss allerdings weggelassen werden (vgl. Codebeispiel oben).

Alle VCD-Tokens werden hingegen von einem Leerraum abgegrenzt.

Literatur[Bearbeiten | Quelltext bearbeiten]