При написании Verilog-проекта необходима следующая информация о сигналах: значения, с помощью которых описывается поведение сигналов, и характер поведения (или тип) сигналов.
Как указывалось в главе 1, существуют четыре значения, которые могут принимать сигналы: 0, 1, z и х. Первые два соответствуют логическим уровням, третье — состоянию с высоким импедансом, четвертое означает неопределенное состояние и используется во всех случаях, когда симулятор не может определить значение данного сигнала (для входного сигналa х означает безразличное состояние).
В зависимости от характера (типа) сигнала порт может быть объявлен в Verilog-тексте как цепь или как регистр.
Цепи характеризуют непрерывное изменение (модифицирование) сигнала на выходе цифрового устройства относительно изменения сигналов на его входах. Цепь принимает значение источника (драйвера) сигнала. Если драйверы цепи имеют различную силу (параграф 1.4), цепь принимает значение более сильного сигнала; если сигналы по силе равнозначны, то цепь принимает неопределенное состояние х. Наименьшую силу имеет сигнал z.
Ключевое слово и формат записи при объявлении порта (портов)
цепью:
wire <имя порта или перечень имен через запятую»;
Например: wire prm; wire a,b;
По умолчанию порту, объявленному как wire, назначается величина z (default value) и разрядность — 1 бит.
Данные типа wire не могут быть назначены явно (т.е. им не могут быть присвоены численные значения в тексте), они нуждаются в сигнале-драйвере. Такое назначение называется непрерывным.
Цепь может также называться проводом.
Цепи характеризуются тем, что не могут хранить информацию (в качестве аналога цепи можно представить комбинационные схемы).
Если тип сигнала не объявлен, то по умолчанию порту присваивается тип wire. Хотя опыт показывает, что у всех портов лучше указывать все характеристики.
Рассмотренные ранее ключевые слова supply0 и supply1 также используются для обозначения цепей.
Тип сигнала не является раз и навсегда установленной величиной, а может меняться от модуля к модулю.
Регистры. Основное различие между цепями и регистрами состоит в том, что значение регистра должно быть назначено явно. Эта величина сохраняется до тех пор, пока не сделано новое назначение. Такое назначение называется процедурным. Ключевое слово — reg, величина по умолчанию — x (величины z в регистре быть не может); разрядность по умолчанию — 1 бит.
Формат записи:
reg <имя порта или перечень имен через запятую»;
Например: reg out counter; reg out_nq,out_q;
В этом случае говорят: данные типа reg или данные типа wire.
Аналогом регистра является элемент памяти.
Для D-триггера, изображенного на рис.2.1, тип портов может быть объявлен следующим образом: reg data, enable, reset; wire q_tr;
Процедурное назначение характеризует не только данные типа reg, но также integer и real. Однако типы integer и real представляют собой абстрактные понятия, а типы wire и reg непосредственно отражаются в аппаратуре.
О правилах назначения испей и регистров. Общий принцип состоит в том, что характеристики всех портов должны быть объявлены. При этом могут быть исключения.
Входы внутренних модулей всегда должны иметь тип wire (цепь), так как они управляются внешними сигналами. Входы промежуточных модулей могут быть как цепью, так и регистром. Входы внешнего по отношению ко всем другим модулям имеют тип reg (регистр).
Выходы внутренних модулей могут иметь тип как reg, так и wire. Это зависит от введенных понятий и от применяемых в модуле конструкций. Выходы внешнего модуля должны быть типа wire, поскольку управляются внутренними модулями (здесь также могут быть исключения).
Каждый модуль кроме входов и выходов может иметь также внутренние связи. Они не являются ни входами, ни выходами и должны быть объявлены с помощью ключевого слова wire.
Двунаправленный порт всегда имеет тип wire.