//Декларация портов
output out;
input i0, i1, i2, i3;
input s1, s0;
assign out =
(~s1&~s0&i0)|(~s1&s0&i1)|(s1&~s0&i2)|(s1&s0&i3
);
endmodule
Поведенческие модели строятся на основе
операторов initial и always. В этих операторах
присваивать значения можно только переменные
регистрового типа. Поэтому выходы счетчика
COUNTER (листинг 1.5) и регистра Q (Листинг 1.6)
имеют тип reg.
Вентильная модель
module mux_4_to_1 ( output Out,
input In0, In1, In2, In3, Sel1, Sel0);
wire NotSel0, NotSel1, Y0, Y1, Y2, Y3;
and #8 (Y1, In1, NotSel1, Sel0);
not #2 (NotSel0, Sel0);
and #8 (Y3, In3, Sel1, Sel0);
or #10 (Out, Y0, Y1, Y2, Y3);
and #8 (Y0, In0, NotSel1, NotSel0);
not #2 (NotSel1, Sel1);
and #8 (Y2, In2, Sel1, NotSel0);
endmodule
Элементами структурного описания в языке
Verilog являются различные логические вентили,
специфические библиотечные компоненты и
компоненты, определяемые пользователем. Само
структурное описание как таковое представляет
собой набор компонентов, установленных в проект и
связанных проводами. В простейшем случае
структурное описание может рассмотриваться как
простой netlist, в котором представлены
установленные в проекте вентили, порты которых
связаны проводами между собой. Однако, в отличие
от списка связей (netlist), цепи в структурном
описании могут быть также представлены в виде
произвольных выражений, которые описывают то,
как будет функционировать та или иная цепь. Такое
назначение на цепь называют непрерывным
назначением. Непрерывные назначения — удобное
средство для связи между простыми списками связей
(netlist) и функциональными описаниями.
Структурное описание Verilog может содержать
различные иерархические конструкции и
конструкции уровня вентилей, а также определения
модулей, установленные компоненты и подключения
из netlist.
net (wire)