【发布时间】:2014-03-11 03:59:42
【问题描述】:
我有两个 verlog 模块,如下所示。参数语句应该也允许我传递我想实例化另一个模块的总线宽度。
我在尝试编译时不断收到错误消息,提示“端口表达式 64 与预期的宽度 1 或 2 不匹配”。
module LabL3;
parameter SIZE = 64;
reg [SIZE-1:0]a;
reg [SIZE-1:0]b;
reg c;
wire [SIZE-1:0]z;
integer i,j,k;
yMux #(SIZE) mux(z,a,b,c);
initial
begin
for(i=0;i<4;i=i+1)begin
for(j=0;j<4;j=j+1)begin
for(k=0;k<2;k=k+1)begin
a=i;b=j;c=k;
#1$display("a=%d b=%d c=%d z=%d",a,b,c,z);
end
end
end
end
endmodule
另一个文件是:
module yMux(z,a,b,c);
parameter SIZE= 0;
output [SIZE-1:0]z;
input [SIZE-1:0]a,b;
input c;
yMux1 mux[SIZE-1:0](z,a,b,c);
endmodule
最后
module yMux1(z,a,b,c);
output z;
input a,b,c;
wire not_C, upper, lower;
not my_not(notC,c);
and upperAnd(upper,a,notC);
and lowerAnd(lower,c,b);
or my_or(z,upper,lower);
endmodule
我使用的命令是:iverilog LabL3.v yMux1.v yMux.v
我已经尝试了不同的参数传递语法。都给出相同的结果。 任何提示将不胜感激。 - 克里斯
【问题讨论】:
-
我试图在 Altera 的 Quartus II 上编译它。以 LabL3 为顶部,一个虚拟输出,虚拟 yMux1 和一些虚拟逻辑(所以它实际上可以编译成一些东西)。它编译得很好。
-
对不起,我忘了包括 yMux1。如果我正确理解语法, yMux #(SIZE) mux(z,a,b,c);应该把 yMux1 中的参数 SIZE 改成 64 吗?
-
它应该生成 64 个 yMux1 实例。也许回退到使用生成语句。以防万一。生成更明确。因为 a、b 和 z 的宽度与 c 的宽度不同。
-
错误指的是哪一行?