Примитивы

Примитивы используются в модулях для описания поведения или структуры модуля. Примитивы могут быть встроенными или пользовательскими. В этом разделе будут рассматриваться только встроенные примитивы, которые разделяют на переключатели, логические элементы, события, а также 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