`include "fa.v"
module FAn(a,b,s,c);
parameter size=4;
input [size-1:0]a;
input [size-1:0]b;
output reg [size-1:0]s;
output c;
wire [size:0] cin;
genvar i;
for(i=0;i<size;i=i+1)begin
FA(.a(a[i]),.b(b[i]),.cin(cin[i]),.s(s[i]),.c(cin[i+1]));
end
assign c=cin[size];
endmodule
在实例化行中
FA(.a(a[i]),.b(b[i]),.cin(cin[i]),.s(s[i]),.c(cin[i+1]));
在第一次迭代中,我传递 cin[0] 信号 (cin(cin[0]))....因为我没有为wire[size:0]cin cin[0]分配任何值,默认值应该是“z”正确,但它在第一个实例化中取零(0)并将信号 0 传递给 FA 模块
您的模拟器有问题。
cin[0]
应该是 z
而不是 0
。 在EDA Playground上的模拟表明是z
。
表明您的模拟器存在问题的另一个迹象是以下行:
FA(.a(a[i]),.b(b[i]),.cin(cin[i]),.s(s[i]),.c(cin[i+1]));
该行在模块名称后面缺少强制实例名称 (
FA
)。 你的模拟器应该给你一个编译错误。 解决此问题的一种方法是添加一个名称,如 dut
:
FA dut (.a(a[i]),.b(b[i]),.cin(cin[i]),.s(s[i]),.c(cin[i+1]));
也可以使用任何合法的 Verilog 标识符。