【发布时间】:2015-10-19 16:07:43
【问题描述】:
最近我遇到了以下问题:在 Quartus 软件中,我将 Verilog 模块定义如下:
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 中模拟该代码时,出现以下错误:
(vlog-2730) 未定义变量:'w1'。
(vlog-2388) 'in1' 已在此范围内声明 (module_name)
(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 建议不这样做)?
【问题讨论】: