値変化ダンプ(VCD)(あまり一般的ではないが「変数変化ダンプ」とも呼ばれる)は、EDAロジックシミュレーションツールによって生成されるダンプファイルのASCIIベースのフォーマットです。標準的な4値VCDフォーマットは、1996年にIEEE規格1364-1995でVerilogハードウェア記述言語とともに定義されました。 6年後にIEEE規格1364-2001で定義された拡張VCDフォーマットは、信号強度と方向性のログ記録をサポートしています。VCDフォーマットのシンプルかつコンパクトな構造により、その使用は広く普及し、VHDLシミュレータGHDLやさまざまなカーネルトレーサーなどのVerilog以外のツールにも広がっています。このフォーマットの制限は、メモリに格納されている値を記録できないことです。
VCDファイルは、日付、シミュレータ、タイムスケール情報を含むヘッダーセクション、変数定義セクション、値変更セクションの順に構成されています。これらのセクションはファイル内で明示的に区別されているわけではなく、それぞれのセクションに属するキーワードを含めることで識別されます。
VCDキーワードは先頭に$を付けて示されます。一般的に、すべてのキーワードはコマンドを開始し、コマンドは明示的な$endで終了します。変数識別子も$で始まる場合がありますが、これらは文脈によって区別されます。
すべてのVCDトークンは空白文字で区切られます。VCDファイル内のデータは大文字と小文字を区別します。
VCDファイルのヘッダーセクションには、タイムスタンプ、シミュレーターのバージョン番号、および値変更セクションに記載されている時間増分をシミュレーションの時間単位にマッピングするタイムスケールが含まれています。
VCDファイルの変数定義セクションには、スコープ情報と、特定のスコープ内でインスタンス化されたシグナルのリストが含まれています。
各変数には、値変更セクションで使用するための任意の識別子が割り当てられます。識別子は、! から ~ (10 進数 33 から 126) までの 1 つ以上の印刷可能な ASCII 文字で構成され、慣例として短く (つまり 1 文字または 2 文字) なります。シミュレータが、変数が常に同じ値を持つ、つまり全体のネットリスト の範囲内で同じワイヤであると判断すれば、複数の変数が同じ識別子を共有できます。
スコープ型の定義はVerilogの概念に厳密に従っており、module、task、function、forkといった型が含まれます。
$dumpvarsキーワードで始まるセクションには、ダンプされたすべての変数の初期値が含まれています。
値変更セクションには、指定されたシミュレーションモデル内の信号の時系列順の値変更が記述されています。現在の時刻は「#」にタイムスタンプを続けて示します。スカラー(1ビット)信号の場合、フォーマットは信号値(0または1)の後に信号識別子が続き、値と信号識別子の間にはスペースを入れません。ベクトル(マルチビット)信号の場合、フォーマットは信号値(文字「b」または「B」)の後にバイナリ形式の値が続き、スペース、信号識別子が続きます。実変数の値は文字「r」または「R」で示され、 その後に%.16g printf()形式のデータが続き、スペース、変数識別子が続きます。
$date 日付テキスト。例:2009年11月11日。 $end $version VCDジェネレーターツールのバージョン情報テキスト。 $end $コメント コメントテキスト。 $end $timescale 1ps $end $scope モジュールロジック $end $var wire 8 # データ $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 ( 空の $end $var wire 1 ) アンダーラン $end $upscope $end $enddefinitions $end $dumpvars bxxxxxxxx # x$ 0% x& x' 1( 0) $end #0 b10000001 # 0ドル 1% 0& 1' 0( 0) #2211 0' #2296 b0 # 1ドル #2302 0ドル #2303
上記のコードは、$varを使用して7つのシグナルを定義します。
$var タイプ ビット幅 ID 名前
IDは、後で値変更ダンプで使用されます。値変更ダンプは、$enddefinitions $endの後に開始され、タイムスタンプに基づいています。タイムスタンプは「#」の後に数値が続く形で表されます。各タイムスタンプで、値が変更されたシグナルのリストがリストされます。これは、値/IDのペアによって行われます。
新しい値 ID
この例は次のように表示されます
