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

none
Содержание

Статья 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. Форматы значений переменных

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

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

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

Правила расширения векторных значений влево приведены в таблице 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
Например:
$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 — Функции

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, как описано ранее.

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

Ключевое слово $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.

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

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

  • scope_list — Один или несколько идентификаторов модулей. Допускаются только модули (не переменные). Если указано более одного идентификатора модуля, они должны быть разделены запятой. Допускаются имена путей к модулям с использованием иерархического разделителя точка. Буквальные строки не допускаются для идентификатора модуля. Если значение scope_list не указано, то областью видимости будет модуль, из которого вызывается $dumpports.
  • file_pathname — Может быть именем пути в двойных кавычках (литеральная строка), переменной типа reg или выражением, обозначающим файл, который должен содержать информацию VCD порта. Если имя файла не указано, файл будет записан в текущий рабочий каталог с именем dumpports.vcd. Если такой файл уже существует, он будет перезаписан. Все проверки на запись файла должны быть выполнены симулятором (например, права на запись, правильное имя пути) и выданы соответствующие ошибки или предупреждения.

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

  • Все порты в модели с момента вызова $dumpports считаются первичными выводами ввода/вывода и должны быть включены в файл VCD. Однако любые порты, существующие в экземплярах ниже scope_list, в дамп не попадают.
  • Если для задачи не указаны аргументы, допускается использование $dumpports; и $dumpports();. В обоих случаях используются значения по умолчанию для аргументов.
  • Если первый аргумент равен нулю, то перед указанием второго аргумента в списке аргументов ставится запятая.
  • Каждая область видимости, указанная в scope_list, должна быть уникальной. Если указано несколько обращений к $dumpports, значения scope_list в этих обращениях также должны быть уникальными.
  • Задача $dumpports может использоваться в исходном коде, который также содержит задачу $dumpvars.
  • Когда выполняется $dumpports, соответствующий дамп изменений значений должен начаться в конце текущей единицы времени моделирования.
  • Задача $dumpports может быть вызвана несколько раз по всей модели, но выполнение всех задач $dumpports должны быть в одно и то же время моделирования. Указание одного и того же имени file_pathname несколько раз не допускается.

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, приостанавливаются.

Когда выполняется задание $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 симулятора.

Синтаксис для этой системной задачи приведен в Синтаксисе 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 действуют следующие правила:

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

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

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

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

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

  • var_type — порт ключевого слова. Никакое другое ключевое слово не допускается.
  • size — Десятичное число, указывающее количество битов в порту. Если порт однобитный, значение равно 1. Если порт представляет собой шину, печатается фактический индекс. msb указывает на наиболее значимый индекс; lsb — на наименее значимый индекс.
  • identifier_code — Целое число, которому предшествует <, которое начинается с нуля и увеличивается на единицу для каждого порта в порядке, указанном в объявлении модуля.
  • reference — индификатор, указывающий на имя порта.
Например:
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

Этот пример создает следующую информацию об узле в файле 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
Каждый синтаксический элемент должен разделяться по крайней мере одним пробелом. Однако форматирование информации является выбором поставщика симулятора. Применяются все правила синтаксиса VCD с четырьмя состояниями для vector_index.

Если 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 Синтаксис для раздела изменения значения

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

  • p — Ключевой символ, указывающий на порт. Между p и значением port_value нет пробела.
  • port_value — Символ состояния (описан ниже).
  • 0_strength_component — Один из восьми компонентов Verilog strengths, который указывает на специфику strength0 для порта.
  • 1_strength_component — Один из восьми компонентов Verilog strengths, который указывает на специфику strength1 для порта.

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

  • 0 — highz
  • 1 — small
  • 2 — medium
  • 3 — weak
  • 4 — large
  • 5 — pull
  • 6 — strong
  • 7 — supply
  • identifier_code — целое число, которому предшествует символ <, как определено в конструкции $var для порта.

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

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

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

  • D — низкий
  • U — высокий
  • N — неизвестно
  • Z — трехгосударственный
  • d — низкий (два или более источников активны)
  • u — высокий (два или более источников активны)

ВЫХОД (DUT):

  • L — низкий
  • H — высокий
  • X — неизвестно (не беспокоить)
  • T — трехгосударственный
  • l — низкий (два или более драйверов активны)
  • h — высокий (активны два или более драйвера)

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

  • 0 — низкий (и вход, и выход активны при значении 0)
  • 1 — высокий (и вход, и выход активны при значении 1)
  • ? — неизвестно
  • F — трехпозиционный (вход и выход не соединены)
  • A — неизвестно (вход 0 и выход 1)
  • a — неизвестный (вход 0 и выход X)
  • B — неизвестно (вход 1 и выход 0)
  • b — неизвестный (вход 1 и выход X)
  • C — неизвестный (вход X и выход 0)
  • c — неизвестный (вход X и выход 1)
  • f — неизвестно (вход и выход трехпозиционные)

18.4.3.2. Источники

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

  • Если и вход, и выход управляют одним и тем же значением с одинаковым диапазоном силы, то это конфликт. Разрешенное значение равно 0/1, а сила — более сильная из двух.
  • Если на вход подается сильная сила (диапазон), а на выход — слабая сила (диапазон), то разрешенное значение равно d/u, а сила — это сила входа.
  • Если на вход подается слабая сила (диапазон), а на выход — сильная сила (диапазон), то разрешенное значение будет l/h, а сила — это сила выхода.

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

  • Запас прочности от 7 до 5 (большой): сильная прочность
  • Сила 4 к 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