18. Дамп файлы изменения значений (VCD)

Содержание

Файл VCD содержит информацию об изменении значений выбранных переменных в проекте, сохраненную задачами системы VCD. Существует два типа файлов VCD:

  1. С четырьмя состояниями: для представления изменений переменных 0, 1, x и z без информации о силе.
  2. Расширенный: для представления переменных изменений во всех состояниях и информации о силе.

В этом пункте описано, как генерировать оба типа файлов VCD и их формат.

18.1 Создание файла VCD с четырьмя состояниями

Ниже перечислены шаги, связанные с созданием файла VCD с четырьмя состояниями, и показаны на рисунке 18-1.

  • Вставьте системные задачи VCD в исходный файл Verilog, чтобы определить имя дамп файла и указать переменные, у которых будут собираться значения.
  • Запустите симуляцию.
Создание VCD файла
Рисунок 18.1. Создание файла VCD с четырьмя состояниями

Файл 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
Синтаксис 18.1. Синтаксис для задачи $dumpfile
Имя файла необязательно, и если оно не указано, по умолчанию используется литеральная строка dump.vcd. Например:
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
Синтаксис 18.3. Синтаксис для задачи $dumpvars

При вызове без аргументов, $dumpvars сбрасывает все переменные модели в файл VCD.

Когда задача $dumpvars задается с аргументами, первый аргумент указывает, сколько уровней иерархии ниже каждого указанного экземпляра модуля нужно сбрасывать в файл VCD. Последующие аргументы указывают, какие области модели следует сбрасывать в VCD-файл. Эти аргументы могут указывать целые модули или отдельные переменные в модуле.

Установка первого аргумента в 0 вызывает дамп всех переменных в указанном модуле и во всех экземплярах модуля ниже указанного модуля. Аргумент 0 применяется только к последующим аргументам, указывающим экземпляры модуля, а не к отдельным переменным.

Например:

Пример 1
$dumpvars(1, top);

Поскольку первый аргумент равен 1, этот вызов сбрасывает все переменные в модуле top. Он не сбрасывает переменные ни в одном из модулей, экземпляров модулей top.

Пример 2
$dumpvars(0, top);

В этом примере задача $dumpvars должна выгрузить все переменные в модуле top и во всех экземплярах модуля, расположенных ниже модуля top в иерархии.

Пример 3 — Данный пример показывает, как в задаче $dumpvars можно указать как модули, так и отдельные переменные.
$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;
Синтаксис 18.4. Синтаксис для задач $dumpoff и $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.5. Синтаксис для задачи $dumpall

Когда дампинг включен, дампер изменений значений записывает значения переменных, которые изменяются во время каждого приращения времени. Значения переменных, которые не изменяются во время приращения времени, в дамп не записываются.

18.1.5. Ограничение размера файла дампа ($dumplimit)

Задача $dumplimit может быть использована для установки размера файла VCD. Синтаксис этой задачи приведен в Синтаксис 18-6.

dumplimit_task ::= $dumplimit ( filesize ) ;
Синтаксис 18.6. Синтаксис для задачи $dumplimit

Аргумент filesize задает максимальный размер файла VCD в байтах. Когда размер файла VCD достигает этого количества байт, дамп останавливается, и в файл VCD вставляется комментарий, указывающий на достижение предела дампа.

18.1.6. Сброс буфера дампа во время моделирования ($dumpflush)

Задачу $dumpflush можно использовать для сброса буфера файла VCD операционной системы, чтобы все данные в этом буфере были сохранены в файле VCD. После выполнения задачи $dumpflush сохранение изменений возобновляется, как и раньше, поэтому изменения значений не теряются. Синтаксис задачи приведен в Синтаксисе 18-7.

dumpflush_task ::= $dumpflush;
Синтаксис 18.7. Синтаксис для задачи $dumpflush

Часто используется вызов $dumpflush для обновления файла дампа, чтобы прикладная программа могла прочитать файл VCD во время моделирования.

Например:

Пример 1 — Этот пример показывает, как задача $dumpflush может быть использована в исходном файле Verilog HDL.
initial begin $dumpvars ; . . . $dumpflush ; $(applications program) ; end

Пример 2 Ниже приведен простой пример описания источника для создания файла VCD:

В этом примере имя файла дампа — verilog.dump. В него сохраняются изменения значений для всех переменных в модели. Дампинг начинается, когда происходит событие do_dump. Дампинг продолжается в течение 500 тактовых циклов, затем останавливается и ждет повторного возникновения события do_dump. Через каждые 10000 временных единиц выполняется дамп текущих значений всех переменных 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