Объявление портов и внутренних переменных

Порты модуля моделируют контакты аппаратных компонентов. При объявлении порта также можно указывать тип и размерность (ANSI-стиль).

Verilog требует, чтобы сигналы, подключенные к входу или выходу модуля, имели два объявления: направление и тип данных портов. Если размерность внутренних переменных и портов явно не указана, то она будет равна 1. Если явно не указан тип, то будет wire. При объявлении внутренних переменных и портов необходимо указывать их имя. Если же имя не указано, то компилятор выдаст ошибку.

Синтаксис

/* Вариант 1: объявление порта с размерностью по умолчанию = 1 */
<направление> <тип> <имя_порта>

/* Вариант 2: объявление порта с заданной размерностью */
<направление> <тип> <имя_порта>[<размерность>]

/* Вариант 3: объявление нескольких портов одинакового направления, размерности и типа */
<направление> <тип> <имя_порта>, <имя_порта>, …

/* Вариант 4: объявления внутренней переменной с размерностью по умолчанию = 1 */
<тип> <имя_переменной>;

/* Вариант 5: объявления внутренней переменной с заданной размерностью */
<тип> <имя_переменной>[<размерность>];

Примеры

/* Пример 1: определение модуля и его инстанцирование с именованным списком портов */
module logic_gates(input in1, in2, output out1, out2);
    ...
endmodule

module logic_gates_tb; 
    logic_gates logic_gates_inst(.in1(in1), .in2(in2), .out1(out1), .out2(out2));
    ...
endmodule

/* Пример 2: инстанцирование встроенных логических примитивов с заданием силы выходного сигнала */
module strength_(output out, input i1, i2);   
  or (supply1, strong0) o1(out, i1, i2);
  and (strong1, supply0) a1(out, i1, i2);
endmodule

/* Пример 3: определение модуля, в котором инстанцируется с переопределением параметра модуля */
module counterm_tb #(parameter _N = 6); 
    counterm #(_N) _counterm(out, clk, reset, enable);
    ...
endmodule

Last updated