为何Verilog代码输出为z而非1?技术咨询
问题原因拆解
先看你的dulladd模块,核心问题有两个:
- 输出C完全没被连接到任何逻辑
你定义了输出端口C,但整个模块里没有任何语句把逻辑运算的结果赋值给它。就像你开了个快递收件箱,却没人往里面放东西,最后自然是空的(对应Verilog里的高阻态z)。 - 内部连线存在冲突+无效逻辑
你先用not notl (w1,B);把w1设为B的反,但紧接着又用or orl (w1,B);让w1变成B或自身的结果——这相当于让w1同时被两个不同的逻辑门驱动,属于连线冲突,而且完全是无效操作。另外你定义了w2,但根本没给它赋值,or or2 (A,w2);这个门的输出也没连到任何地方,完全是没用的代码。
修正思路(简单示例)
如果你的目标是实现A或B的逻辑(让A=0、B=1时输出1),可以把模块改成这样:
module dulladd (C,A,B); input A,B; output C; // 直接把C连接到A和B的或运算结果 or or_logic (C,A,B); endmodule
这样当A=0、B=1时,输出就是预期的1了。
内容的提问来源于stack exchange,提问作者Chuka
相关产品推荐
相关产品推荐

