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

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

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

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

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

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

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

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

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

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

Например:
...
Копировать
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 Синтаксис для раздела изменения значения

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

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

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

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

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

ВЫХОД (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. Зашифрованные оболочки
Закрыть