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