导线的默认值为Z,但在第一次实例化时它取0。这怎么可能?

问题描述 投票:0回答:1
`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 模块

verilog system-verilog
1个回答
0
投票

您的模拟器有问题。

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 标识符。

© www.soinside.com 2019 - 2024. All rights reserved.