Недавно я наткнулся на следующий вопрос: в программном обеспечении Quartus я определил мой модуль Verilog следующим образом:Проблема с параметрами в Modelsim
module module_name(
input [w1-1:0] in1,
input [w2-1:0] in2,
output [w1-1:0] out1
);
parameter w1 = 16;
parameter w2 = 8;
...
endmodule
Этот модуль компилируется без каких-либо проблем. Но, когда я попытался смоделировать этот код в Modelsim (-Altera) 10.3d, я получил следующие ошибки:
(видеоблог-2730) Неопределенная переменная 'w1'.
(vlog-2388) 'in1', уже объявленный в этой области (имя_модуля)
(vlog-2730) Неопределенная переменная: 'w2'.
...
Идентификатор должен быть объявлен с режимом порта: in1
Идентификатор должен быть объявлен с режимом порта: in2
Я нашел способ обойти эту проблему с помощью следующего кода:
module module_name(
in1,
in2,
out1
);
parameter w1 = 16;
parameter w2 = 8;
input [w1-1:0] in1;
input [w2-1:0] in2;
output [w1-1:0] out1;
...
endmodule
другой способ также использовать следующую конструкцию:
module module_name #(parameter w1 = 16, parameter w2 = 8)(
input [w1-1:0] in1,
input [w2-1:0] in2,
output [w1-1:0] out1
);
...
endmodule
Но: незаконно ли (Quartus предполагает, что это не так) определить параметры после входных/выходных сигналов, которые используют эти параметры?
Похоже, что я искал неправильное место в документе (§ 6.20). Благодарю. – Qiu