Примитивы
Примитивы используются в модулях для описания поведения или структуры модуля. Примитивы могут быть встроенными или пользовательскими. В этом разделе будут рассматриваться только встроенные примитивы, которые разделяют на переключатели, логические элементы, события, а также parameter
и specparam
.
Ниже приведено несколько полезных примеров переключателей и логических элементов.
Логические элементы
not
, and
, nand
, or
, nor
, xor
, xnor
output, input(s)
Буфер
buf
output(s), input(s)
Полевые транзисторы
nmos
, pmos
output (drain), input (source), input (gate)
Коммутатор
cmos
output (drain), input (source), input (n-gate), input (p-gate)
Отдельно рассмотрим транзисторы:
nmos
Полевой транзистор с индуцированным n-каналом
pmos
Полевой транзистор с индуцированным p-каналом
cmos
Соответствует следующей схеме: nmos (out, in, n_gate);pmos (out, in, p_gate);
Синтаксис
тип_логического_элемента [ (сила сигнала) ] [ #(задержка) ] [ имя_инстанса ] [ размерность ] ( terminal, terminal, ... );
тип_переключателя [ #(задержка) ] [ имя_инстанса ] [ размерность ] ( terminal, terminal, ... );
Пример
module not_(output out, input in);
supply1 pwr;
supply0 grd;
pmos p1(out, pwr, in);
nmos n1(out, grd, in);
endmodule
module not_tb;
reg[1:0] in_value;
wire[1:0] out;
not_ not_var(.out(out[0]), .in(in_value[0]));
//not_ not_var(.out(out), .in(out)); // короткое замыкание
not (out[1], in_value[1]);
initial begin
$dumpfile("dump.vcd");
$dumpvars(1);
$monitor("Time [%0t]:\tin:%b, out:%b", $time, in_value, out);
in_value = 0;
#3 in_value[0] = 1;
#4 in_value[0] = 0;
#3 in_value[1] = 1;
#4 in_value[1] = 0;
end
endmodule
Результат исполнения
Time [0]: in:00, out:11
Time [3]: in:01, out:10
Time [7]: in:00, out:11
Time [10]: in:10, out:01
Time [14]: in:00, out:11
Last updated