DocsTech
/
VERILOG HDL
/

~ cd 18. дамп файлы изменения значений (vcd)

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

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

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

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

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

Создание 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
Главная
Курсы
Вебинары
3. Лексические правила(Синтаксис) Verilog HDL
4. Типы данных Verilog HDL
5. Выражения и Операторы Verilog HDL
6. Назначения (Assignments) в Verilog HDL
7. Моделирование на уровне вентилей и переключателей в Verilog HDL
8. Примитивы, объявляемые пользователем (UDP) Verilog HDL
9. Процедурные назначения. Поведенческое моделирование в Verilog HDL.
9. If, case for, while и repeat Verilog HDL
9. Initial, always, задержки, блоки Verilog HDL
10. Задачи(task) и функции (function) в Verilog HDL
11. Семантика планирования. Стек (stack) в Verilog HDL
12. Модули(module). Переопределение параметров(defparam).
12. Порты. Иерархические имена в Verilog HDL
12. Generate блоки Verilog HDL
12. Иерархические имена Verilog HDL
13. Конфигурирование содержимого конструкции
13. Использование библиотек. Конфигурирование содержимого конструкции в Verilog HDL
14. Specify блоки в Verilog HDL
15. Setup, hold, setuphold и recovery в Verilog HDL
15. Skew, period, width и nochange Verilog HDL
15. Проверка синхронизации сигналов в Verilog HDL
16. Бэканнотирование с использованием стандартного формата задержки (SDF) в Verilog HDL
17. Системные задачи и функции
17.2 Файлы. Запись и чтение файлов Verilog
17. Задачи временной шкалы, управления, PLA и стохастического анализа Verilog
$time, $stime и $realtime Verilog
17.8. Функции преобразования Verilog
17.9. Функции распределения вероятностей Verilog
17.10. Ввод командной строки. 17.11. Математические функции
18. Дамп файлы изменения значений (VCD)
18. Формат файла VCD расширенные и четырьмя состояниями
19. Директивы компилятора Verilog HDL
20. Обзор интерфейса языка программирования (PLI) Verilog
28. Зашифрованные оболочки
Закрыть