DocsTech
/
VERILOG HDL
/

~ cd 18. формат файла vcd расширенные и четырьмя состояниями

Статья 1 — Ссылка на общее представление файлов VCD и системных команд Verilog.

18.2. Формат файла VCD с четырьмя состояниями

Дамп файл структурирован в свободном формате. Пробелы и табуляция используется для разделения команд также, чтобы файл легко читался текстовым редактором.

18.2.1. Структура файла VCD с четырьмя состояниями

Синтаксис файла VCD с четырьмя состояниями приведен в Синтаксисе 18-8.

...
Копировать
value_change_dump_definitions ::=
    { declaration_command }{ simulation_command }
declaration_command ::=
    declaration_keyword
    [ command_text ]
    $end
simulation_command ::=
    simulation_keyword { value_change } $end
    | $comment [ comment_text ] $end
    | simulation_time
    | value_change
declaration_keyword ::=
    $comment | $date | $enddefinitions | $scope | $timescale | $upscope
    | $var | $version
simulation_keyword ::=
    $dumpall | $dumpoff | $dumpon | $dumpvars
simulation_time ::=
    # decimal_number
value_change ::=
    scalar_value_change
    | vector_value_change
scalar_value_change ::=
    value identifier_code
value ::=
    0 | 1 | x | X | z | Z
vector_value_change ::=
    b binary_number identifier_code
    | B binary_number identifier_code
    | r real_number identifier_code
    | R real_number identifier_code
identifier_code ::=
    { ASCII character }

Синтаксис 18.8 Синтаксис вывода файла VCD с четырьмя состояниями

Файл VCD начинается с заголовочной информации, содержащей дату, номер версии симулятора, используемого для моделирования, и используемую шкалу времени. Далее в файле содержатся определения области действия и типа переменных, которые сбрасываются, а затем фактические изменения значений на каждом приращении времени моделирования. Перечисляются только те переменные, значение которых изменяется во время приращения времени.

Время моделирования, записанное в файле VCD, является абсолютным значением времени моделирования для последующих изменений значений переменных.

Изменения значений для вещественных переменных задаются вещественными числами. Изменения значений для всех других переменных задаются в двоичном формате значениями 0, 1, x или z. Информация о силе источника и память не сбрасываются.

Вещественное число выводится с помощью формата %.16g printf(). Это сохраняет точность числа, выводя все 53 бита мантиссы 64-битного числа двойной точности IEEE 754. Прикладные программы могут считывать вещественное число с помощью формата %g в scanf().

Дампер изменения значений генерирует коды идентификаторов символов для представления переменных. Код идентификатора — это код, состоящий из печатаемых символов, которые находятся в наборе символов ASCII от ! до ~ (десятичные 33 — 126).

Формат VCD не поддерживает механизм дампа части вектора. Например, биты с 8 по 15 ([8:15]) 16-битного вектора не могут быть сброшены в файл VCD. Вместо этого необходимо сбросить весь вектор ([0:15]). Кроме того, выражения, такие как a + b, не могут быть записаны в файл VCD.

Данные в файле VCD чувствительны к регистру.

18.2.2. Форматы значений переменных

Переменные могут быть скалярами или векторами. Для каждого типа используется свой формат дампа. Дампы изменений значений скалярных переменных не должны иметь пробелов между значением и кодом идентификатора.

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

Дампы изменений значений векторов не должны иметь пробелов между базовой буквой и цифрами значения, но они должны иметь один пробел между цифрами значения и кодом идентификатора.

Формат вывода для каждого значения — правостороннее выравнивание. Векторные значения отображаются в максимально короткой форме: избыточные битовые значения, возникающие в результате расширения значений влево для заполнения определенного размера вектора, устраняются.

Правила расширения векторных значений влево приведены в таблице 18.1.

Таблица 18.1 Правила расширения значений вектора влево
Когда значениеVCD расширяется влево с
10
00
ZZ
XX

В таблице 18.2 показано, как VCD может сократить значения.

Таблица 18.2 Как VCD может сократить значения
Двоичное значениеРасширяется для заполнения 4-битного регистра какПоявляется в файле VCD как
100010b10
X10XX10bX10
ZX0ZZX0bZX0
0X100X10b0X10

События выгружаются в том же формате, что и скаляры. например, 1*%. Однако для событий значение (1 в данном примере) не имеет значения. Значение имеет только код идентификатора (*% в данном примере). Он появляется в файле VCD как маркер, указывающий на то, что событие было вызвано во время временного шага.

Например:

...
Копировать
1*@ No space between the value 1 and the identifier code *@
b1100x01z (k No space between the b and 1100x01z,
but a space between b1100x01z and (k
/*
Перевод: 1*@Нет пробела между значением 1 и кодом идентификатора *@ 
b1100x01z (kНет пробела между b и 1100x01z,
но пробел между b1100x01z и (k
*/

18.2.3. Описание команд с ключевыми словами

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

В этом подпункте рассматриваются команды с ключевыми словами, приведенные в таблице 18.3.

Таблица 18.3 Команды ключевых слов
Ключевые слова декларацииКлючевые слова моделированияКлючевые слова моделирования
$comment$timescale$dumpall
$date$upscope$dumpoff
$enddefinitions$var$dumpon
$scope$version$dumpvars

18.2.3.1. $comment

Секция $comment предоставляет возможность вставить комментарий в файл VCD. Синтаксис секции приведен в Синтаксисе 18-9.

...
Копировать
vcd_declaration_comment ::=
    $comment comment_text $end

Синтаксис 18.9 Синтаксис для раздела $comment

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

Например:

...
Копировать
$comment This is a single-line comment $end
$comment This is a
multiple-line comment
$end

18.2.3.2. $date

В разделе $date указывается дата создания файла VCD. Синтаксис раздела приведен в Синтаксис 18.10.

...
Копировать
vcd_declaration_date ::=
    $date date_text $end

Синтаксис 18.10 Синтаксис для раздела $date

Например:

...
Копировать
$date
June 25, 1989 09:24:35
$end

18.2.3.3. $enddefinitions

Раздел $enddefinitions отмечает конец информации заголовка и определений. Синтаксис этого раздела приведен в Синтаксисе 18.11.

...
Копировать
vcd_declaration_enddefinitions ::=
$enddefinitions $end

Синтаксис 18.11-Синтаксис для раздела $enddefinitions

18.2.3.4. $scope

Секция $scope определяет область видимости переменных, выводимых в дамп. Синтаксис этого раздела приведен в Синтаксисе 18.12.

...
Копировать
vcd_declaration_scope ::=
    $scope scope_type scope_identifier $end
scope_type ::=
    begin
    | fork
    | function
    | module
    | task

Синтаксис 18.12 Синтаксис для раздела $scope

Тип диапазона указывает на один из следующих диапазонов:

1) module — Модуль верхнего уровня и экземпляры модуля

2) task — Задачи

3) function — Функции

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

4) begin — Именованные последовательные блоки

5) fork — Именованные параллельные блоки

Например:

...
Копировать
$scope
    module top
$end

18.2.3.5. $timescale

Ключевое слово $timescale указывает, какая шкала времени была использована для моделирования. Синтаксис ключевого слова приведен в Синтаксис 18.13.

...
Копировать
vcd_declaration_timescale ::=
    $timescale time_number time_unit $end
time_number ::=
    1 | 10 | 100
time_unit ::=
    s | ms | us | ns | ps | fs

Синтаксис 18.13 Синтаксис для $timescale

Например:

...
Копировать
$timescale 10 ns $end

18.2.3.6. $upscope

Секция $upscope указывает на изменение области видимости на следующий более высокий уровень в иерархии проектирования. Синтаксис секции приведен в Синтаксисе 18.14.

...
Копировать
vcd_declaration_upscope ::=
    $upscope $end

Синтаксис 18.14 Синтаксис для секции $upscope

18.2.3.7. $var

Секция $var печатает имена и коды идентификаторов переменных, выводимых в дамп. Синтаксис этого раздела приведен в Синтаксис 18.15.

...
Копировать
vcd_declaration_vars ::=
    $var var_type size identifier_code reference $end
var_type ::=
    event | integer | parameter | real | realtime | reg | supply0 | supply1 | time
    | tri | triand | trior | trireg | tri0 | tri1 | wand | wire | wor
size ::=
    decimal_number
reference ::=
    identifier
    | identifier [ bit_select_index ]
    | identifier [ msb_index : lsb_index ]
index ::=
    decimal_number

Синтаксис 18.15 Синтаксис для секции $var

Размер определяет, сколько бит содержится в переменной.

Код идентификатора задает имя переменной, используя печатаемые символы ASCII, как описано ранее.

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

1) Индекс msb указывает на наиболее значимый индекс. Индекс lsb указывает на наименее значимый индекс.

2) Более одного ссылочного имени может быть сопоставлено с одним и тем же кодом идентификатора. Например, net10 и net15 могут быть взаимосвязаны в схеме и, следовательно, иметь один и тот же код идентификатора.

3) Отдельные биты векторных сеток могут быть сброшены по отдельности.

4) Идентификатор — это имя переменной, которая выбрасывается в модель.

В секции $var сеть типа uwire должна иметь переменный тип wire.

Например:

...
Копировать
$var
    integer 32 (2 index
$end

18.2.3.8. $version

Секция $version указывает, какая версия программы записи VCD была использована для создания VCD-файла и $dumpfile системная задача, используемая для создания файла. Если для задания имени файла в $dumpfile использовалась переменная или выражение, то в строке $version появится неоцененный литерал переменной или выражения. Синтаксис раздела $version приведен в Синтаксисе 18.16.

...
Копировать
vcd_declaration_version ::=
$version version_text system_task $end

Синтаксис 18.16 Синтаксис для секции $version

Например:

...
Копировать
$version
    VERILOG-SIMULATOR 1.0a
    $dumpfile("dump1.dump")
$end

18.2.3.9. $dumpall

Ключевое слово $dumpall задает текущие значения всех переменных, выводимых в дамп. Синтаксис ключевого слова приведен в разделе Синтаксис 18.17.

...
Копировать
vcd_simulation_dumpall ::=
    $dumpall { value_changes } $end

Синтаксис 18.17 Синтаксис для ключевого слова $dumpall

Например:

...
Копировать
$dumpall 1*@ x*# 0*$ bx (k $end

18.2.3.10. $dumpoff

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

Ключевое слово $dumpoff указывает на все переменные, сброшенные со значениями X. Синтаксис этого ключевого слова приведен в Синтаксис 18.18.

...
Копировать
vcd_simulation_dumpoff ::=
    $dumpoff { value_changes } $end

Синтаксис 18.18 Синтаксис для ключевого слова $dumpoff

Например:

...
Копировать
$dumpoff x*@ x*# x*$ bx (k $end

18.2.3.11. $dumpon

Ключевое слово $dumpon указывает на возобновление сброса в файл и перечисляет текущие значения всех переменных, сброшенных в дамп. Синтаксис ключевого слова приведен в Синтаксисе 18.19.

...
Копировать
vcd_simulation_dumpon ::=
$dumpon { value_changes } $end

Синтаксис 18.19 Синтаксис для ключевого слова $dumpon

Например:

...
Копировать
$dumpon x*@ 0*# x*$ b1 (k $end

18.2.3.12. $dumpvars

В разделе, начинающемся с ключевого слова $dumpvars, перечисляются начальные значения всех переменных, выводимых в дамп. Синтаксис ключевого слова приведен в Синтаксис 18.20.

...
Копировать
vcd_simulation_dumpvars ::=
$dumpvars { value_changes } $end

Синтаксис 18.20 Синтаксис для ключевого слова $dumpvars

Например:

...
Копировать
$dumpvars x*@ z*$ b0 (k $end

18.2.4. Пример формата файла VCD с четырьмя состояниями

Следующий пример иллюстрирует формат файла VCD с четырьмя состояниями.

...
Копировать
$date June 26, 1989 10:05:41
$end
$version VERILOG-SIMULATOR 1.0a
$end
$timescale 1 ns
$end
$scope module top $end
$scope module m1 $end
$var trireg 1 *@ net1 $end
$var trireg 1 *# net2 $end
$var trireg 1 *$ net3 $end
$upscope $end
$scope task t1 $end
$var reg 32 (k accumulator[31:0] $end
$var integer 32 {2 index $end
$upscope $end
$upscope $end
$enddefinitions $end
$comment
$dumpvars was executed at time '#500'.
All initial values are dumped at this time.
$end



#500
$dumpvars
x*@
x*#
x*$
bx (k
bx {2
$end
#505
0*@
1*#
1*$
b10zx1110x11100 (k
b1111000101z01x {2
#510
0*$
#520
1*$
#530
0*$
bz (k
#535
$dumpall 0*@ 1*# 0*$
bz (k
b1111000101z01x {2
$end
#540
1*$
#1000
$dumpoff
x*@
x*#
x*$
bx (k
bx {2
$end
#2000
$dumpon
z*@
1*#
0*$
b0 (k
bx {2
$end
#2010
1*$

18.3. Создание расширенного файла VCD

Шаги, связанные с созданием расширенного файла VCD, перечислены ниже и показаны на рисунке 18.2.

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

1) Вставьте расширенные системные задачи VCD в исходный файл Verilog для определения имени файла дампа и указания переменных для дампа.

2) Запустите симуляцию.

18.2 Создание расширенного файла VCD
Рисунок 18.2 — Создание расширенного файла VCD

Правила и синтаксис файла VCD с четырьмя состояниями применяются к расширенному файлу VCD, если в данном подпункте не указано иное.

18.3.1. Указание имени файла дампа и портов для дампа ($dumpports)

Задача $dumpports используется для указания имени VCD-файла и портов для дампа. Синтаксис задачи приведен в Синтаксисе 18.21.

...
Копировать
dumpports_task ::=
    $dumpports ( scope_list , file_pathname ) ;
scope_list ::=
    module_identifier { , module_identfier }
file_pathname ::=
    literal_string
    | variable
    | expression

Синтаксис 18.21 Синтаксис для задачи $dumpports

Аргументы являются необязательными и определяются следующим образом:

Следующие правила применяются к использованию системной задачи $dumpports:

18.3.2. Остановка и возобновление дампа ($dumpportsoff/$dumpportson)

Системные задачи $dumpportsoff и $dumpportson позволяют управлять периодом моделирования для сброса значений портов. Синтаксис этих системных задач приведен в Синтаксисе 18.22.

...
Копировать
dumpportsoff_task ::=
    $dumpportsoff ( file_pathname ) ;
dumpportson_task ::=
    $dumpportson ( file_pathname ) ;
file_pathname ::=
    literal_string
    | variable
    | expression

Синтаксис 18.22 Синтаксис для системных задач $dumpportsoff и $dumpportson

Аргумент file_pathname может быть именем пути в двойных кавычках (литеральная строка), переменной типа reg или выражением, обозначающим имя файла, указанное в системной задаче $dumpports.

При выполнении задачи $dumpportsoff в файле file_pathname создается контрольная точка, в которую сбрасывается значение X для каждого указанного порта. Начиная с этого момента моделирования значения портов больше не сбрасываются. Если имена файлов не указаны, то все дампы в файлы, открытые вызовами $dumpports, приостанавливаются.

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

Когда выполняется задание $dumpportson, все порты, указанные связанным вызовом $dumpports, должны иметь свои значения в дампе. Эта системная задача обычно используется для возобновления дампа после выполнения команды $dumpportsoff. Если имена файлов не указаны, то дампинг будет возобновлен для всех файлов, указанных вызовами $dumpports, если сброс в эти файлы был остановлен.

Если $dumpportson выполняется, когда дамп портов уже сбрасывается в file_pathname, системная задача игнорируется. Если $dumpportsoff выполняется, когда дамп портов уже приостановлен для file_pathname, системная задача игнорируется.

18.3.3. Генерация контрольной точки ($dumpportsall)

Системная задача $dumpportsall создает контрольную точку в файле VCD, которая показывает значение всех выбранных портов в данный момент моделирования, независимо от того, изменились ли значения портов с последнего временного шага. Синтаксис этой системной задачи приведен в Синтаксисе 18.23.

...
Копировать
dumpportsall_task ::=
    $dumpportsall ( file_pathname ) ;
file_pathname ::=
    literal_string
    | variable
    | expression

Синтаксис 18.23 Синтаксис для системной задачи $dumpportsall

Аргумент file_pathname может быть именем пути в двойных кавычках (литеральная строка), переменной типа reg или выражением, обозначающим имя файла, указанное в системной задаче $dumpports.

Если имя файла не указано, то контрольная точка возникает для всех файлов, открытых вызовами $dumpports.

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

Системная задача $dumpportslimit позволяет контролировать размер файла VCD. Синтаксис этой системной задачи приведен в Синтаксис 18.24.

...
Копировать
dumpportslimit_task ::=
    $dumpportslimit ( filesize , file_pathname ) ;
file_size ::=
    integer
file_pathname ::=
    literal_string
    | variable
    | expression

Синтаксис 18.24 Синтаксис для системной задачи $dumpportslimit

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

Аргумент file_pathname может быть именем пути в двойных кавычках (литеральная строка), переменной типа reg или выражением, обозначающим имя файла, указанное в системной задаче $dumpports.

Если имя файла не указано, ограничение на размер файла применяется ко всем файлам, открытым для дампа в результате вызова функции $dumpports.

18.3.5. Чтение файла дампа во время моделирования ($dumpportsflush)

Для повышения производительности симуляторы часто буферизируют вывод VCD и записывают в файл через определенные промежутки времени, а не построчно. Системная задача $dumpportsflush записывает все значения портов в связанный файл, очищая буфер VCD симулятора.

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

Синтаксис для этой системной задачи приведен в Синтаксисе 18-25.

...
Копировать
dumpportsflush_task ::=
    $dumpportsflush ( file_pathname ) ;
file_pathname ::=
    literal_string
    | variable
    | expression

Синтаксис 18.25 Синтаксис для системной задачи $dumpportsflush

Аргумент file_pathname может быть именем пути в двойных кавычках (литеральная строка), переменной типа reg или выражением, обозначающим имя файла, указанное в системной задаче $dumpports.

Если имя файла не указано, буферы VCD должны быть очищены для всех файлов, открытых вызовами функции $dumpports.

18.3.6. Описание команд с ключевыми словами

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

18.3.6.1. $vcdclose

Ключевое слово $vcdclose указывает время окончания моделирования в момент закрытия расширенного файла VCD. Это позволяет точно записать время окончания симуляции, независимо от состояния изменения сигнала, чтобы помочь синтаксическим анализаторам, которым требуется эта информация. Синтаксис ключевого слова приведен в Синтаксисе 18-26.

...
Копировать
vcdclose_task ::=
    $vcdclose final_simulation_time $end

Синтаксис 18-26 — Синтаксис для ключевого слова $vcdclose

Например:

...
Копировать
$vcdclose #13000 $end

18.3.6.2. Общие правила для расширенных задач системы VCD

Для каждой расширенной задачи системы VCD действуют следующие правила:

18.4. Формат расширенного файла VCD

Формат расширенного файла VCD похож на формат файла VCD с четырьмя состояниями, поскольку он также структурирован в свободном формате. Пробелы, пропуски и табуляции используется для разделения команд и для того, чтобы файл был легко читаем текстовым редактором.

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

18.4.1. Синтаксис расширенного файла VCD

Синтаксис расширенного файла VCD приведен в Синтаксисе 18-27. Имя конструкции VCD с четырьмя состояниями, совпадающее с расширенной конструкцией VCD, считается эквивалентным, за исключением случаев, когда ему предшествует символ *.

...
Копировать
value_change_dump_definitions ::={declaration_command} {simulation_command}
declaration_command ::= declaration_keyword [command_text] $end
simulation_command ::= (Not in the Annex A BNF)
    simulation_keyword { value_change } $end
    | $comment [comment_text] $end
    | simulation_time
    | value_change
* declaration_keyword ::=
    $comment | $date | $enddefinitions | $scope | $timescale | $upscope | $var
    | $vcdclose | $version
command_text ::=
    comment_text | close_text | date_section | scope_section | timescale_section
    | var_section | version_section
* simulation_keyword ::= $dumpports | $dumpportsoff | $dumpportson |
$dumpportsall
simulation_time ::= #decimal_number
value_change ::= value identifier_code
value ::= pport_value 0_strength_component 1_strength_component
port_value ::= input_value | output_value | unknown_direction_value
input_value ::= D | U | N | Z | d | u
output_value ::= L | H | X | T | l | h
unknown_direction_value ::= 0 | 1 | ? | F | A | a | B | b | C | c | f
strength_component ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
* identifier_code ::= <{integer}
comment_text ::= {ASCII_character}
close_text ::= final_simulation_time
date_section ::= date_text
date_text :: = day month date time year
scope_section ::= scope_type scope_identifier
* scope_type ::= module
timescale_section ::= number time_unit
number ::= 1 | 10 | 100
time_unit ::= fs | ps | ns | us | ms | s
var_section ::= var_type size identifier_code reference
* var_type ::= port
* size ::= 1 | vector_index
vector_index ::= [ msb_index : lsb_index ]
index ::= decimal_number
* reference ::= port_identifier
identifier ::= {printable_ASCII_character}
version_section ::= version_text
* version_text ::= version_identifier {dumpports_command}
dumpports_command ::=
    $dumpports (scope_identifier , string_literal
    | variable
    | expression )

Синтаксис 18-27 — Синтаксис для вывода расширенного файла VCD

Расширенный файл VCD начинается с заголовочной информации, содержащей дату, номер версии симулятора, используемого для моделирования, и используемую шкалу времени. Далее в файле содержатся определения области действия портов, по которым производится дамп, а затем фактические изменения значений на каждом шаге времени моделирования. Перечисляются только те порты, значение которых изменяется во время приращения времени.

Время моделирования, записанное в расширенном файле VCD, является абсолютным значением времени моделирования для последующих изменений значений портов.

Изменения значений для всех портов задаются в двоичном формате значениями 0, 1, x или z и включают информацию о силе.

Вещественное число выводится с помощью формата %.16g printf(). Это сохраняет точность числа, выводя все 53 бита мантиссы 64-битного числа двойной точности IEEE 754. Прикладные программы могут считывать вещественное число с помощью формата %g в scanf().

Расширенный формат VCD не поддерживает механизм дампа части вектора. Например, биты с 8 по 15 ([8:15]) 16-битного вектора не могут быть сброшены в файл VCD; вместо этого необходимо сбросить весь вектор ([0:15]). Кроме того, выражения, такие как a + b, не могут быть записаны в файл VCD.

Данные в расширенном файле VCD чувствительны к регистру.

18.4.2. Расширенная информация об узле VCD

На раздел информации об узле (также называемый разделом определений переменных) влияют задачи $dumpports, как показывает синтаксис 18.28.

...
Копировать
$var var_type size < identifier_code reference $end
var_type ::=
    port
size ::=
    1
    | vector_index
vector_index ::=
    [msb_index : lsb_index]
index ::= decimal_number
identifier_code ::= integer
reference ::= port_identifier

Синтаксис 18.28 Синтаксис для расширенной информации об узле VCD

Конструкция определяются следующим образом:

Например:

...
Копировать
module test_device(count_out, carry, data, reset)
    output count_out, carry ;
    input [0:3] data;
    input reset;
    . . .
    initial
    begin
        $dumpports(testbench.DUT, "testoutput.vcd");
        . . .
    end
Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

Этот пример создает следующую информацию об узле в файле VCD:

...
Копировать
$scope module testbench.DUT $end
$var port 1 <0 count_out $end
$var port 1 <1 carry $end
$var port [0:3] <2 data $end
$var port 1 <3 reset $end
$upscope $end

Если vector_index встречается в объявлении порта, это будет индекс, который будет сброшен. Если vector_index отсутствует в объявлении порта, то будет сброшен vector_index в объявлении net или reg, соответствующем имени порта. Если vector_index не найден, порт считается скалярным (шириной 1 бит).

Конкатенированные порты должны отображаться в расширенном файле VCD как отдельные записи. Например:

...
Копировать
module addbit ({A, b}, ci, sum, co);
    input A, b, ci;
    output sum, co;
    . . .

Выходной файл VCD выглядит следующим образом:

...
Копировать
$scope module addbit $end
$var port 1 <0 A $end
$var port 1 <1 b $end
$var port 1 <2 ci $end
$enddefinitions $end

18.4.3. Изменения значений

Как показывает синтаксис 18.29, секция изменения значений в файле VCD также подвержена влиянию $dumpports.

...
Копировать
pport_value 0_strength_component 1_strength_component identifier_code

Синтаксис 18.29 Синтаксис для раздела изменения значения

Конструкты определяются следующим образом:

Значения силы в Verilog следующие (добавьте к ключевому слову 0 или 1 в зависимости от компонента силы):

18.4.3.1. Символы состояний

Ниже перечислены входные значения от испытательного устройства, выходные значения тестируемого устройства (DUT) и состояния, представляющие неизвестное направление:

ВХОД (ИСПЫТАТЕЛЬНОЕ УСТРОЙСТВА):

Приложение SoloBit с бесплатными курсами и автоматической генерацией задач и верификацией

ВЫХОД (DUT):

НЕЗНАЧИТЕЛЬНАЯ ДИРЕКЦИЯ:

18.4.3.2. Источники

Источники рассматриваются только с точки зрения примитивов, непрерывных назначений и процедурных непрерывных назначений. Значение 0/1 означает, что при значении 0/1 активны и вход, и выход. 0 и 1 являются конфликтными состояниями. К конфликтам применяются следующие правила:

Диапазон следующий:

18.4.3.3. Пример расширенного формата файла VCD

Следующий пример иллюстрирует формат расширенного файла VCD. Объявление модуля:

...
Копировать
module adder(data0, data1, data2, data3, carry, as, rdn, reset,
    test, write);

    inout data0, data1, data2, data3;
    output carry;
    input as, rdn, reset, test, write;
. . .

и полученный фрагмент VCD:

...
Копировать
$scope module testbench.adder_instance $end
$var port 1 <0 data0 $end
$var port 1 <1 data1 $end
$var port 1 <2 data2 $end
$var port 1 <3 data3 $end
$var port 1 <4 carry $end
$var port 1 <5 as $end
$var port 1 <6 rdn $end
$var port 1 <7 reset $end
$var port 1 <8 test $end
$var port 1 <9 write $end
$upscope $end
$enddefinitions $end
#0
$dumpports
pX 6 6 <0
pX 6 6 <1
pX 6 6 <2
pX 6 6 <3
pX 6 6 <4
pN 6 6 <5
pN 6 6 <6
pU 0 6 <7
pD 6 0 <8
pN 6 6 <9
$end
#180
pH 0 6 <4
#200000
pD 6 0 <5
pU 0 6 <6
pD 6 0 <9
#200500
pf 0 0 <0
pf 0 0 <1
pf 0 0 <2
pf 0 0 <3
Главная
Курсы
Вебинары
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. Зашифрованные оболочки
Закрыть