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
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
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:
$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
- IEEE Computer Society (Hrsg.): 1364-2001 IEEE Standard Verilog Hardware Description Language. Offizieller Standard. 2001, ISBN 0-7381-2826-0, doi:10.1109/IEEESTD.2001.93352 (englisch, ieeexplore.ieee.org [abgerufen am 25. August 2010]).