- 18.1 Создание файла VCD с четырьмя состояниями
- 18.1.1. Указание имени дамп файла($dumpfile)
- 18.1.2 Указание переменных для дампа ($dumpvars)
- 18.1.3. Остановка и возобновление дампа ($dumpoff and $dumpon)
- 18.1.4. Создание контрольной точки ($dumpall)
- 18.1.5. Ограничение размера файла дампа ($dumplimit)
- 18.1.6. Сброс буфера дампа во время моделирования ($dumpflush)
Файл VCD содержит информацию об изменении значений выбранных переменных в проекте, сохраненную задачами системы VCD. Существует два типа файлов VCD:
- С четырьмя состояниями: для представления изменений переменных 0, 1, x и z без информации о силе.
- Расширенный: для представления переменных изменений во всех состояниях и информации о силе.
В этом пункте описано, как генерировать оба типа файлов VCD и их формат.
18.1 Создание файла VCD с четырьмя состояниями
Ниже перечислены шаги, связанные с созданием файла VCD с четырьмя состояниями, и показаны на рисунке 18-1.
- Вставьте системные задачи VCD в исходный файл Verilog, чтобы определить имя дамп файла и указать переменные, у которых будут собираться значения.
- Запустите симуляцию.

Файл VCD — это файл ASCII, который содержит заголовочную информацию(Header Information), определения переменных(Node Information) и изменения значений(Value Changes) для всех переменных, указанных в вызовах системных задач.
В исходное описание можно вставить несколько системных задач для создания и управления файлом VCD.
18.1.1. Указание имени дамп файла($dumpfile)
Задача $dumpfile используется для указания имени файла VCD. Синтаксис задачи приведен в Синтаксисе 18-1.
dumpfile_task ::=
$dumpfile( filename );
filename ::=
literal_string
| variable
| expression
initial $dumpfile("module1.dump");
18.1.2 Указание переменных для дампа ($dumpvars)
Задача $dumpvars используется для перечисления переменных, которые необходимо сбросить в файл, указанный в $dumpfile. Задача $dumpvars может вызываться как угодно часто по всей модели (например, в пределах различных блоков), но выполнение всех задач $dumpvars должно происходить в одно и то же время моделирования.
Задача $dumpvars может использоваться как с аргументами, так и без них. Синтаксис задачи $dumpvars приведен в Синтаксис 18-3.
dumpvars_task ::=
$dumpvars ;
| $dumpvars ( levels [ , list_of_modules_or_variables ] ) ;
list_of_modules_or_variables ::=
module_or_variable { , module_or_variable }
module_or_variable ::=
module_identifier
| variable_identifier
При вызове без аргументов, $dumpvars сбрасывает все переменные модели в файл VCD.
Когда задача $dumpvars задается с аргументами, первый аргумент указывает, сколько уровней иерархии ниже каждого указанного экземпляра модуля нужно сбрасывать в файл VCD. Последующие аргументы указывают, какие области модели следует сбрасывать в VCD-файл. Эти аргументы могут указывать целые модули или отдельные переменные в модуле.
Установка первого аргумента в 0 вызывает дамп всех переменных в указанном модуле и во всех экземплярах модуля ниже указанного модуля. Аргумент 0 применяется только к последующим аргументам, указывающим экземпляры модуля, а не к отдельным переменным.
Например:
$dumpvars(1, top);
Поскольку первый аргумент равен 1, этот вызов сбрасывает все переменные в модуле top. Он не сбрасывает переменные ни в одном из модулей, экземпляров модулей top.
$dumpvars(0, top);
В этом примере задача $dumpvars должна выгрузить все переменные в модуле top и во всех экземплярах модуля, расположенных ниже модуля top в иерархии.
$dumpvars(0, top.mod1, top.mod2.net1);
Этот вызов выгружает все переменные в модуле mod1 и во всех экземплярах модуля ниже mod1, а также переменную net1 в модуле mod2. Аргумент 0 применяется только к экземпляру модуля top.mod1, но не к отдельной переменной top.mod2.net1.
18.1.3. Остановка и возобновление дампа ($dumpoff and $dumpon)
Выполнение задачи $dumpvars приводит к тому, что сохранение изменений значений начинается в конце текущей
единицы времени моделирования. Для приостановки дампа может быть вызвана задача $dumpoff. Для возобновления дампа может быть вызвана задача $dumpon. Синтаксис этих двух задач приведен в Синтаксисе 18-4.
dumpoff_task ::=
$dumpoff;
dumpon_task ::=
$dumpon;
Когда выполняется задача $dumpoff, создается контрольная точка, в которую сохраняется каждая выбранная переменная в виде значения x. Когда позже выполняется задача $dumpon, каждая переменная сохраняются с ее значением на тот момент. В интервале между задачами $dumpoff и $dumpon изменения значений не обрабатываются.
Задачи $dumpoff и $dumpon предоставляют механизм управления периодом моделирования, в течение которого будет происходить обработка.
initial begin
#10 $dumpvars( . . . );
#200 $dumpoff;
#800 $dumpon;
#900 $dumpoff;
end
Этот пример запускает VCD через 10 единиц времени, останавливает его через 200 единиц времени (в момент времени 210), снова запускает его через 800 единиц времени (в момент времени 1010) и останавливает его через 900 единиц времени (в момент времени 1910).
18.1.4. Создание контрольной точки ($dumpall)
Задача $dumpall создает контрольную точку в файле VCD, которая показывает текущее значение всех выбранных переменных. Синтаксис приведен в Синтаксис 18-5.
dumpall_task ::=
$dumpall;
Когда дампинг включен, дампер изменений значений записывает значения переменных, которые изменяются во время каждого приращения времени. Значения переменных, которые не изменяются во время приращения времени, в дамп не записываются.
18.1.5. Ограничение размера файла дампа ($dumplimit)
Задача $dumplimit может быть использована для установки размера файла VCD. Синтаксис этой задачи приведен в Синтаксис 18-6.
dumplimit_task ::=
$dumplimit ( filesize ) ;
Аргумент filesize задает максимальный размер файла VCD в байтах. Когда размер файла VCD достигает этого количества байт, дамп останавливается, и в файл VCD вставляется комментарий, указывающий на достижение предела дампа.
18.1.6. Сброс буфера дампа во время моделирования ($dumpflush)
Задачу $dumpflush можно использовать для сброса буфера файла VCD операционной системы, чтобы все данные в этом буфере были сохранены в файле VCD. После выполнения задачи $dumpflush сохранение изменений возобновляется, как и раньше, поэтому изменения значений не теряются. Синтаксис задачи приведен в Синтаксисе 18-7.
dumpflush_task ::=
$dumpflush;
Часто используется вызов $dumpflush для обновления файла дампа, чтобы прикладная программа могла прочитать файл VCD во время моделирования.
Например:
initial begin
$dumpvars ;
.
.
.
$dumpflush ;
$(applications program) ;
end
Пример 2 — Ниже приведен простой пример описания источника для создания файла VCD:
module dump;
event do_dump;
initial $dumpfile("verilog.dump");
initial @do_dump
$dumpvars; //dump variables in the design
always @do_dump //to begin the dump at event do_dump
begin
$dumpon; //no effect the first time through
repeat (500) @(posedge clock); //dump for 500 cycles
$dumpoff; //stop the dump
end
initial @(do_dump)
forever #10000 $dumpall; //checkpoint all variables
endmodule