~ cd 7. моделирование на уровне вентилей и переключателей в verilog hdl
В языке Verilog HDL предопределены 14 логических вентилей и 12 переключателей, что обеспечивает возможность моделирования на уровне вентилей и переключателей. Моделирование с помощью логических вентилей и переключателей имеет следующие преимущества:
- Вентили обеспечивают гораздо более тесное соответствие между реальной схемой и моделью.
- Не существует непрерывного назначения, эквивалентного двунаправленным передаточным вентилям.
Заметка Админа: В настоящем стандарте(IEEE STD 1364 -2005) описаны терминальные соединения(входные, выходные и двунаправленны). Под термином «Терминал» [Terminal] понимаются зажим, клемма на соединения на вентилях, примитивах, модулях и переключателях. Пример: «… терминальное входное соединение…» означает «входной зажим». В данном тексте используются две формы записи.
Перевод Официального Стандарта Verilog HDL
7.1 Синтаксис объявления вентилей и переключателей
Синтаксис 7-1 показывает синтаксис объявления вентилей и переключателей.
Декларация экземпляра вентиля и переключателя должна иметь следующие характеристики:
- Ключевое слово, называющее тип примитива вентиля или переключателя
- Дополнительная сила привода
- Необязательная задержка распространения
- Необязательный идентификатор, дающий имя каждому экземпляру вентиля или переключателя
- Необязательный диапазон для массива экземпляров
- Список терминальных соединений
Несколько экземпляров одного типа примитива вентиля или переключателя могут быть объявлены в виде списка, разделенного запятыми. Все такие экземпляры должны иметь одинаковые
gate_instantiation ::=
cmos_switchtype [delay3] cmos_switch_instance { , cmos_switch_instance } ;
| enable_gatetype [drive_strength] [delay3] enable_gate_instance { , enable_gate_instance } ;
| mos_switchtype [delay3] mos_switch_instance { , mos_switch_instance } ;
| n_input_gatetype [drive_strength] [delay2] n_input_gate_instance {, n_input_gate_instance };
| n_output_gatetype [drive_strength] [delay2] n_output_gate_instance { , n_output_gate_instance } ;
| pass_en_switchtype [delay2] pass_enable_switch_instance {, pass_enable_switch_instance } ;
| pass_switchtype pass_switch_instance { , pass_switch_instance } ;
| pulldown [pulldown_strength] pull_gate_instance { , pull_gate_instance } ;
| pullup [pullup_strength] pull_gate_instance { , pull_gate_instance } ;
cmos_switch_instance ::= [ name_of_gate_instance ] ( output_terminal , input_terminal , ncontrol_terminal , pcontrol_terminal )
enable_gate_instance ::= [ name_of_gate_instance ] ( output_terminal , input_terminal , enable_terminal )
mos_switch_instance ::= [ name_of_gate_instance ] ( output_terminal , input_terminal , enable_terminal )
n_input_gate_instance ::= [ name_of_gate_instance ] ( output_terminal , input_terminal { , input_terminal } )
n_output_gate_instance ::= [ name_of_gate_instance ] ( output_terminal { , output_terminal } , input_terminal )
pass_switch_instance ::= [ name_of_gate_instance ] ( inout_terminal , inout_terminal )
pass_enable_switch_instance ::= [ name_of_gate_instance ] ( inout_terminal , inout_terminal , enable_terminal )
pull_gate_instance ::= [ name_of_gate_instance ] ( output_terminal )
name_of_gate_instance ::= gate_instance_identifier [ range ]
pulldown_strength ::=
( strength0 , strength1 )
| ( strength1 , strength0 )
| ( strength0 )
pullup_strength ::=
( strength0 , strength1 )
| ( strength1 , strength0 )
| ( strength1 )
enable_terminal ::= expression
inout_terminal ::= net_lvalue
input_terminal ::= expression
ncontrol_terminal ::= expression
output_terminal ::= net_lvalue
pcontrol_terminal ::= expression
cmos_switchtype ::= cmos | rcmos
enable_gatetype ::= bufif0 | bufif1 | notif0 | notif1
mos_switchtype ::= nmos | pmos | rnmos | rpmos
n_input_gatetype ::= and | nand | or | nor | xor | xnor
n_output_gatetype ::= buf | not
pass_en_switchtype ::= tranif0 | tranif1 | rtranif1 | rtranif0
pass_switchtype ::= tran | rtran
7.1.1 Спецификация типа вентилей
Объявление экземпляра вентиля или переключателя должно начинаться с ключевого слова, которое определяет примитив вентиля или переключателя, используемый экземплярами, которые следуют в объявлении. В таблице 7-1 перечислены ключевые слова, с которых должно начинаться объявление экземпляра вентиля или переключателя.
| n_input gates | n_output gates | Three-state gates | Pull gates | MOS switches | Bidirectional switches |
|---|---|---|---|---|---|
| and | buf | bufif0 | pulldown | cmos | rtran |
| nand | not | bufif1 | pullup | nmos | rtranif0 |
| nor | notif0 | pmos | rtranif1 | ||
| or | notif1 | rcmos | tran | ||
| xnor | rnmos | tranif0 | |||
| xor | rpmos | tranif1 |
Пояснения к встроенным вентилям и переключателям, показанным в таблице 7-1, приведены в разделе 7.2.
7.1.2 Спецификация силы источника
Необязательная спецификация силы источника должна определять силу логических значений на выходных клеммах экземпляра вентиля. Только экземпляры примитивов вентилей, показанных в таблице 7-2, могут иметь спецификацию силы источника.
| and | nand | buf | not | pulldown |
|---|---|---|---|---|
| or | nor | bufif0 | notif0 | pullup |
| xor | xnor | bufif1 | notif1 |
Спецификация силы сигнала для экземпляра вентиля, за исключением pullup и pulldown, должна иметь спецификацию strength1 и спецификацию strength0. Спецификация strength1 определяет силу сигналов с логическим значением 1, а спецификация strength0 — силу сигналов с логическим значением 0. Спецификация силы должна следовать за ключевым словом типа вентиля и предшествовать любой спецификации задержки. Спецификация strength0 может предшествовать или следовать за спецификацией strength1. Спецификации strength1 и strength0 должны быть разделены запятой и заключены в пару круглых скобок.
Вентиль pullup может иметь только спецификацию strength1; спецификация strength0 является необязательной. Вентиль pullldown может иметь только спецификацию strength0; спецификация strength1 является необязательной. Более подробно см. раздел 7.8.
Спецификация strength1 должна быть одним из следующих ключевых слов: supply1, strong1, pull1 или weak1.
Спецификация strength0 должна быть одним из следующих ключевых слов: supply0, strong0, pull0 и weak0.
Указание highz1 в качестве strength1 заставит вентиль или переключатель выдать логическое значение z вместо 1. Указание highz0 заставит вентиль выдать логическое значение z вместо 0. Спецификации силы (highz0, highz1) и (highz1, highz0) считаются ошибкой.
При отсутствии спецификации силы, экземпляры должны иметь силы по умолчанию strong1 и strong0.
Например:
nor (highz1,strong0) n1(out1,in1,in2);В этом примере nor выводит z вместо 1.
Более подробно моделирование логической силы рассматривается в разделах 7.9—7.13.
7.1.3 Спецификация задержки
Необязательная спецификация задержки должна определять задержку распространения через вентили и переключатели в объявлении. Вентили и переключатели в объявлениях без спецификации задержки не должны иметь задержки распространения. Спецификация задержки может содержать до трех значений задержки, в зависимости от типа вентиля. Объявления экземпляров pullup и pulldown не должны содержать спецификаций задержки. Более подробно задержки рассматриваются в разделе 7.14.
7.1.4 Идентификатор экземпляра примитива
Экземпляру вентиля или переключателя может быть присвоено необязательное имя. Если несколько экземпляров объявлены как массив экземпляров, для наименования экземпляров должен использоваться идентификатор.
7.1.5 Спецификация диапазона
Существует множество ситуаций, когда требуются повторяющиеся экземпляры. Эти экземпляры должны отличаться друг от друга только индексом вектора, с которым они связаны.
Чтобы указать массив экземпляров, за именем экземпляра следует спецификация диапазона. Диапазон должен быть задан двумя постоянными выражениями, левым индексом (lhi) и правым индексом (rhi), разделенными двоеточием и заключенными в пару квадратных скобок.
Спецификация диапазона [lhi:rhi] должна представлять массив экземпляров abs(lhi-rhi)+1. Ни одно из двух постоянных выражений не обязательно должно быть нулевым, и lhi не обязательно должно быть больше rhi. Если оба константных выражения равны, генерируется только один экземпляр.
Массив экземпляров должен иметь непрерывный диапазон. Один идентификатор экземпляра должен быть связан только с одним диапазоном для объявления массива экземпляров.
Спецификация диапазона должна быть необязательной. Если спецификация диапазона не задана, создается один экземпляр.
Например:
nand #2 t_nand[0:3] ( ... ), t_nand[4:7] ( ... );nand #2 t_nand[0:7] ( ... );
nand #2 x_nand[0:3] ( ... ), y_nand[4:7] ( ... );7.1.6 Список соединений экземпляра примитивов
Список выводов описывает, как вентиль или переключатель соединяются с остальной частью модели. Тип вентиля или переключателя может ограничивать эти выражения. Список соединений должен быть заключен в пару круглых скобок, а клеммы должны быть разделены запятыми.
Выходные или двунаправленные клеммы всегда должны стоять первыми в списке клемм, за ними должны следовать входные клеммы.
Терминальные соединения для массива экземпляров должны соответствовать этим правилам:
- Длина бита каждого выражения порта в объявленном массиве экземпляров должна быть сравнена с длиной бита каждого отдельного экземпляра порта или терминала в экземпляре модуле или примитиве.
- Для каждого порта или клеммы, где длина бита выражения порта массива экземпляров такая же, как длина бита порта единичного экземпляра, выражение порта массива экземпляров должно быть подключено к каждому порту единичного экземпляра.
- Если длины битов различны, каждый экземпляр должен получить частичную выборку выражения порта, как указано в диапазоне, начиная с правого индекса.
- Слишком большое или слишком малое количество битов для подключения ко всем экземплярам считается ошибкой.
Ссылка на отдельный экземпляр из массива экземпляров осуществляется так же, как и ссылка на элемент массива регистров.
Например:
nand #2 nand_array[1:4]( ... ) ;module driver (in, out, en);
input [3:0] in;
output [3:0] out;
input en;
bufif0 ar[3:0] (out, in, en); // массив буфферов третьего состояния
endmodule
module driver_equiv (in, out, en);
input [3:0] in;
output [3:0] out;
input en;
bufif0 ar3 (out[3], in[3], en); // каждый буфер объявляется отдельно
bufif0 ar2 (out[2], in[2], en);
bufif0 ar1 (out[1], in[1], en);
bufif0 ar0 (out[0], in[0], en);
endmodulemodule busdriver (busin, bushigh, buslow, enh, enl);
input [15:0] busin;
output [7:0] bushigh, buslow;
input enh, enl;
driver busar3 (busin[15:12], bushigh[7:4], enh);
driver busar2 (busin[11:8], bushigh[3:0], enh);
driver busar1 (busin[7:4], buslow[7:4], enl);
driver busar0 (busin[3:0], buslow[3:0], enl);
endmodule
module busdriver_equiv (busin, bushigh, buslow, enh, enl);
input [15:0] busin;
output [7:0] bushigh, buslow;
input enh, enl;
driver busar[3:0] (.out({bushigh, buslow}), .in(busin),
.en({enh, enh, enl, enl}));
endmoduleПример 4 — Данный пример демонстрирует, как можно соединить ряд модулей в цепочку. На рисунке 7-1 показано эквивалентное схематическое соединение экземпляров DFF.
module dffn (q, d, clk);
parameter bits = 1;
input [bits-1:0] d;
output [bits-1:0] q;
input clk ;
DFF dff[bits-1:0] (q, d, clk); // объявление столбца D-триггеров
endmodule
module MxN_pipeline (in, out, clk);
parameter M = 3, N = 4; // M=ширина, N=глубина
input [M-1:0] in;
output [M-1:0] out;
input clk;
wire [M*(N-1):1] t;
// #(M) переопределяет параметр bits для dffn
// создаем столбцы p[1:N] из строк dffn (конвейер)
dffn #(M) p[1:N] ({out, t}, {t, in}, clk);
endmodule

Рисунок 7-1 Схема взаимосвязей в массиве экземпляров
7.2 Вентили and, nand, nor, or, or, xor, и xnor
Объявление экземпляра логического вентиля с несколькими входами должно начинаться с одного из следующих ключевых слов: and, nand, nor, or, xor или xnor.
Спецификация задержки должна быть нулевой, одной или двумя задержками. Если спецификация содержит две задержки, первая задержка определяет задержку нарастания выходного сигнала, вторая задержка определяет задержку спада выходного сигнала, и меньшая из двух задержек применяется к переходам выхода в x. Если указана только одна задержка, она должна определять как задержку нарастания, так и задержку спада. Если задержка не указана, то задержка распространения через вентиль должна отсутствовать.
Эти шесть логических вентилей должны иметь один выход и один или несколько входов. Первая клемма в списке клемм должна подключаться к выходу вентиля, а все остальные клеммы подключаются к его входам.
Таблицы истинности для этих вентилей, показывающие результат двух входных показаны в таблице 7-3.
| and | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | x | x |
| x | 0 | x | x | x |
| z | 0 | x | x | x |
| or | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | 1 | x | x |
| 1 | 1 | 1 | 1 | 1 |
| x | x | 1 | x | x |
| z | x | 1 | x | x |
| xor | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | 1 | x | x |
| 1 | 1 | 0 | x | x |
| x | x | x | x | x |
| z | x | x | x | x |
| nand | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 |
| 1 | 1 | 0 | x | x |
| x | 1 | x | x | x |
| z | 1 | x | x | x |
| nor | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 1 | 0 | x | x |
| 1 | 0 | 0 | 0 | 0 |
| x | x | 0 | x | x |
| z | x | 0 | x | x |
| xnor | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 1 | 0 | x | x |
| 1 | 0 | 1 | x | x |
| x | x | x | x | x |
| z | x | x | x | x |
Версии этих шести логических вентилей, имеющие более двух входов, должны иметь естественное расширение, но количество входов не должно изменять задержки распространения.
Например:
and a1 (out, in1, in2);Входами являются in1 и in2. Выходом является out. Имя экземпляра — a1.
7.3 Вентили buf и not
Объявление экземпляра логического вентиля с несколькими выходами должно начинаться с одного из следующих ключевых слов: buf или not
Спецификация задержки должна быть нулевой, одной или двумя задержками. Если спецификация содержит две задержки, первая задержка определяет задержку нарастания выходного сигнала, вторая задержка определяет задержку спада выходного сигнала, и меньшая из двух задержек применяется к переходам выхода в x. Если указана только одна задержка, она должна определять как задержку нарастания, так и задержку спада. Если задержка не указана, то задержка распространения через вентиль должна отсутствовать.
Эти два логических вентиля должны иметь один вход и один или несколько выходов. Последняя клемма в списке клемм должна подключаться к входу логического вентиля, а остальные клеммы должны подключаться к выходам логического вентиля.
Таблицы истинности для этих логических вентилей с одним входом и одним выходом показаны в таблице 7-4.
| not input | not output |
|---|---|
| 0 | 0 |
| 1 | 1 |
| x | x |
| z | x |
| not input | not output |
|---|---|
| 0 | 1 |
| 1 | 0 |
| x | x |
| z | x |
Например:
buf b1 (out1, out2, in);Входом является in. Выходами являются out1 и out2. Имя экземпляра — b1.
7.4 Переключатели bufif1, bufif0, notif1 и notif0
Объявление экземпляра этих трехпозиционных логических вентилей должно начинаться с одного из следующих ключевых слов: bufif0, bufif1, notif1 или notif0.
Эти четыре логических вентиля моделируют трехпозиционные драйверы. Помимо логических значений 1 и 0, эти вентили могут выводить z.
Спецификация задержки должна быть нулевой, одной, двумя или тремя задержками. Если спецификация задержки содержит три задержки, то первая задержка определяет задержку нарастания, вторая — задержку спада, третья — задержку перехода в z, а наименьшая из трех задержек определяет задержку перехода в x. Если спецификация содержит две задержки, то первая задержка определяет задержку нарастания выходного сигнала, вторая — задержку спада выходного сигнала, а меньшая из двух задержек применяется к переходам выхода в x и z. Если указана только одна задержка, то она должна определять задержку для всех переходов выхода. Если задержка не указана, то задержка распространения через вентиль должна отсутствовать.
Некоторые комбинации входных значений данных и входных значений управления могут привести к тому, что эти вентили выдадут любое из двух значений, без предпочтения одного из них (см. 7.10.2). Логические таблицы для этих вентилей включают два символа, представляющие такие неизвестные результаты. Символ L должен представлять результат, имеющий значение 0 или z. Символ H должен представлять результат, имеющий значение 1 или z. Задержки при переходе к H или L рассматриваются так же, как и задержки при переходе к x.
Эти четыре логических вентиля должны иметь один выход, один вход данных и один вход управления. Первая клемма в списке клемм должна подключаться к выходу, вторая — к входу данных, а третья — к управляющему входу.
В таблице 7-5 представлены логические таблицы для этих вентилей.
| bufif0 | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | z | L | L |
| 1 | 1 | z | H | H |
| x | x | z | x | x |
| z | x | z | x | x |
| bufif1 | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | z | 0 | L | L |
| 1 | z | 1 | H | H |
| x | z | x | x | x |
| z | z | x | x | x |
| notif0 | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 1 | z | H | H |
| 1 | 0 | z | L | L |
| x | x | z | x | x |
| z | x | z | x | x |
| notif1 | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | z | 1 | H | H |
| 1 | z | 0 | L | L |
| x | z | x | x | x |
| z | z | x | x | x |
Например:
bufif1 bf1 (outw, inw, controlw);Выход — outw, вход — inw, управление — controlw. Имя экземпляра — bf1.
7.5 МОП-переключатели
Объявление экземпляра переключателя MOS должно начинаться с одного из следующих ключевых слов: cmos, nmos, pmos, rcmos, rnmos или rpmos.
Переключатели cmos и rcmos описаны в разделе 7.7.
Ключевое слово pmos обозначает транзистор P-типа металл-оксид-полупроводник (PMOS), а ключевое слово nmos — транзистор N-типа металл-оксид-полупроводник (NMOS). Транзисторы PMOS и NMOS имеют относительно низкий импеданс между истоком и стоком, когда они проводят ток. Ключевое слово rpmos означает резистивный PMOS-транзистор, а ключевое слово rnmos — резистивный NMOS-транзистор. Резистивные PMOS и резистивные NMOS транзисторы имеют значительно большее сопротивление между истоками и стоками при проводимости, чем PMOS и NMOS транзисторы. Нагрузочные устройства в статических сетях MOS являются примерами транзисторов rpmos и rnmos. Эти четыре переключателя представляют собой однонаправленные каналы для данных, аналогичные вентилям bufif.
Спецификация задержки должна быть нулевой, одной, двумя или тремя задержками. Если спецификация задержки содержит три задержки, то первая задержка определяет задержку нарастания, вторая — задержку спада, третья — задержку перехода в z, а наименьшая из трех задержек определяет задержку перехода в x. Если спецификация содержит две задержки, то первая задержка определяет задержку нарастания выходного сигнала, вторая — задержку спада, а меньшая из двух задержек применяется к переходам выхода в x и z. Если указана только одна задержка, то она должна определять задержку для всех переходов выхода. Если задержка не указана, то задержка распространения через переключатель должна отсутствовать.
Некоторые комбинации входных значений данных и входных значений управления могут заставить эти переключатели выдать любое из двух значений, без предпочтения одного из них. Логические таблицы для этих переключателей включают два символа, представляющие такие неизвестные результаты. Символ L представляет результат, имеющий значение 0 или z. Символ H представляет результат, имеющий значение 1 или z. Задержки при переходах к H и L должны быть такими же, как задержки при переходах к x.
Эти четыре переключателя должны иметь один выход, один вход данных и один вход управления. Первая клемма в списке клемм должна подключаться к выходу, вторая — к входу данных, а третья — к входу управления.
Переключатели nmos и pmos должны пропускать сигналы со своих входов и через свои выходы с изменением силы сигнала только в одном случае, как описано в п. 7.11. Переключатели rnmos и rpmos должны уменьшать силу сигналов, проходящих через них, как описано в п. 7.12.
В таблице 7-6 представлены логические таблицы для этих переключателей.
| pmos rpmos | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | z | L | L |
| 1 | 1 | z | H | H |
| x | x | z | x | x |
| z | z | z | z | z |
| nmos rnmos | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | z | 0 | L | L |
| 1 | z | 1 | H | H |
| x | z | x | x | x |
| z | z | z | z | z |
Например:
pmos p1 (out, data, control);Выход — out, вход данных — data, вход управления — control. Имя экземпляра — p1.
7.6 Двунаправленные проходные переключатели
Объявление экземпляра двунаправленного проходного переключателя должно начинаться с одного из следующих ключевых слов: tran, tranif1, tranif0, rtran, rtranif1 или rtranif0.
Двунаправленные проходные переключатели не должны задерживать проходящие через них сигналы. Когда устройства tranif0, tranif1, rtranif0 или rtranif1 выключены, они должны блокировать сигналы, а когда они включены, они должны пропускать сигналы. Устройства tran и rtran не могут быть выключены, и они всегда должны пропускать сигналы.
Спецификация задержки для устройств tranif1, tranif0, rtranif1 и rtranif0 должна быть нулевой, одной или двумя задержками. Если спецификация содержит две задержки, то первая задержка определяет задержку включения, вторая — задержку выключения, и меньшая из двух задержек должна применяться к выходным переходам на x и z. Если указана только одна задержка, то она должна определять задержки включения и выключения. Если задержка не указана, задержка включения и выключения двунаправленного проходного переключателя должна отсутствовать.
Двунаправленные проходные переключатели tran и rtran не должны принимать спецификацию задержки.
Устройства tranif1, tranif0, rtranif1 и rtranif0 должны иметь три элемента в списках выводов. Первые два должны быть двунаправленными клеммами, которые проводят сигналы к устройствам и от них, а третья клемма должна подключаться к управляющему входу. Устройства tran и rtran должны иметь списки выводов, содержащие два двунаправленных вывода. Обе двунаправленные клеммы должны безусловно проводить сигналы к устройствам и от них, позволяя сигналам проходить через устройства в любом направлении. Двунаправленные клеммы всех шести устройств должны быть подключены только к скалярным сеткам или битовым выборкам векторных сеток.
Устройства tran, tranif0 и tranif1 должны пропускать сигналы с изменением их силы только в одном случае, как описано в п. 7.11. Устройства rtran, rtranif0 и rtranif1 должны уменьшать силу проходящих через них сигналов в соответствии с правилами, рассмотренными в п. 7.12.
Например:
tranif1 t1 (inout1,inout2,control);Двунаправленные клеммы — inout1 и inout2. Управляющий вход — control. Имя экземпляра — t1.
7.7 КМОП-переключатели
Объявление экземпляра переключателя CMOS должно начинаться с одного из следующих ключевых слов: cmos или rcmos.
Спецификация задержки должна быть нулевой, одной, двумя или тремя задержками. Если спецификация задержки содержит три задержки, первая задержка определяет задержку нарастания, вторая — задержку спада, третья — задержку перехода на z, а наименьшая из трех задержек — задержку перехода на x. Задержки при переходе на H или L такие же, как и задержки при переходе на x.
Если спецификация содержит две задержки, то первая задержка определяет задержку нарастания выходного сигнала, вторая задержка определяет задержку спада выходного сигнала, а меньшая из двух задержек применяется к выходным переходам в x и z. Если указана только одна задержка, то она должна определять задержку для всех выходных переходов. Если задержка не указана, то задержка распространения через переключатель должна отсутствовать.
Переключатели cmos и rcmos должны иметь вход данных, выход данных и два входа управления. В списке выводов первый вывод подключается к выходу данных, второй — к входу данных, третий — к входу управления n-каналом, последний — к входу управления p-каналом.
Вентиль cmos должен пропускать сигналы с изменением их силы только в одном случае, как описано в п. 7.11. Вентиль rcmos должен уменьшать силу проходящих через него сигналов в соответствии с правилами, описанными в п. 7.12.
Переключатель cmos рассматривается как комбинация переключателя pmos и переключателя nmos. Переключатель rcmos должен рассматриваться как комбинация переключателя rpmos и переключателя rnmos. Комбинированные переключатели в этих конфигурациях должны иметь общие клеммы ввода и вывода данных, но должны иметь отдельные входы управления.
Например:
cmos (w, datain, ncontrol, pcontrol);nmos (w, datain, ncontrol);
pmos (w, datain, pcontrol);7.8 Источники pullup и puldown
Объявление экземпляра источника pullup или puldown должно начинаться с одного из следующих ключевых слов: pullup или puldown.
Источник pullup должен присвоить логическое значение 1 сетям, подключенным в его списке выводов. Источник pullldown должен присвоить логическое значение 0 сетям, подключенным в его списке выводов.
Сигналы, которые эти источники подают на сети, должны иметь силу pullup в отсутствие спецификации силы. Если для источника pullup задана strength1 или для источника pulldown задана strength0, сигналы должны иметь указанную силу. Спецификация strength0 на источнике pullup и спецификация strength1 на источнике оттягивания игнорируются.
Для этих источников не должно быть спецификаций задержки. Например:
pullup (strong1) p1 (neta), p2 (netb);В этом примере экземпляр p1 управляет neta, а экземпляр p2 управляет netb с силой strong.
7.9 Моделирование логической силы
Язык Verilog HDL обеспечивает точное моделирование конкуренции сигналов, двунаправленных проходных вентилей, резистивных МОП-устройств, динамических МОП, разделения заряда и других конфигураций сети, зависящих от технологии, позволяя скалярным значениям чистого сигнала иметь полный диапазон неизвестных значений и различные уровни силы или сочетаний уровней силы. Такое многоуровневое моделирование логической силы разрешает комбинации сигналов в определенные или неопределенные значения, чтобы представить поведение аппаратуры с повышенной точностью.
Спецификация силы должна состоять из двух компонентов:
1) Сила 0 части сети значения, называемая strength0, обозначается как одно из следующих значений: supply0, strong0, pull0, weak0 или highz0.
2) Сила 1 части сети значения, называемая strength1, обозначается как одно из следующих значений: supply1, strong1, pull1, weak1 или highz1.
Комбинации (highz0, highz1) и (highz1, highz0) считаются недопустимыми.
Несмотря на такое разделение спецификации силы, для прогнозирования результатов комбинаций сигналов полезно рассматривать силу как свойство, занимающее области континуума.
Таблица 7-7 демонстрирует континуум сильных сторон. В левой колонке перечислены ключевые слова, используемые при определении сильных сторон. В правой колонке приведены коррелирующие уровни силы.
| Strength name | Strength level |
|---|---|
| supply0 | 7 |
| strong0 | 6 |
| pull0 | 5 |
| large0 | 4 |
| weak0 | 3 |
| medium0 | 2 |
| small0 | 1 |
| highz0 | 0 |
| highz1 | 0 |
| small1 | 1 |
| medium1 | 2 |
| weak1 | 3 |
| large1 | 4 |
| pull1 | 5 |
| strong1 | 6 |
| supply1 | 7 |
В таблице 7-7 представлены четыре движущие силы: supply, strong, pull или weak.
Сигналы с силой заряда должны распространяться от выходов вентилей и выходов непрерывного назначения. В таблице 7-7 приведены три силы хранения заряда: large, medium или small.
Сигналы с накопительной силой заряда должны подаваться в сети типа trireg.
Силы сигналов в таблице 7-7 можно рассматривать как места на шкале на рисунка 7-8.

Рисунок 7-2 — Шкала сильных сторон
При обсуждении комбинаций сигналов далее в этом пункте используются графики, аналогичные тем, что приведены на рисунке 7-2.
Если значение сигнала сети известно, все уровни ее силы должны находиться либо в части strength0 шкалы, представленной на рисунке 7-2, либо все уровни силы должны находиться в части strength1. Если значение сигнала сети неизвестно, она должна иметь уровни силы как в части strength0, так и в части strength1. Сеть со значением сигнала z должна иметь уровень силы только в одном из делений 0 частей шкалы.
7.10 Силы и значения сочетающихся сигналов
В дополнение к значению сигнала сеть должна иметь либо один определенный уровень силы, либо неопределенную силу, состоящую из более чем одного уровня. Когда сигналы объединяются, их силы и значения должны определять силу и значение результирующего сигнала в соответствии с принципами, изложенными в 7.10.1-7.10.4.
7.10.1 Сочетание сигналов определенной силы
В этом подпункте рассматриваются сочетания сигналов, в которых каждый сигнал имеет определенное значение и один уровень силы.
Если два или более сигналов неравной силы объединяются в конфигурации проводной сети, более сильный сигнал доминирует над всеми более слабыми и определяет результат. Сочетание двух или более сигналов одинаковой силы должно приводить к одному и тому же значению с большей из всех сил. Сочетание сигналов, одинаковых по силе и значению, приводит к одному и тому же сигналу. Сочетание сигналов с разными значениями и одинаковой силой может иметь три возможных результата. Два из этих результатов возникают при наличии проводной логики, а третий — при ее отсутствии. Проводная логика обсуждается в разделе 7.10.4. Результат при отсутствии проводной логики рассматривается на рисунке 7-3 (в разделе 7.10.2).
Например:
На рисунке 7-2 цифры в скобках указывают на относительную силу сигналов. Комбинация pull1 и strong0 приводит к появлению strong0, который является более сильным из двух сигналов.
