Verilog中8位输入的((notA) nand B)运算实现问题
Verilog实现8位((~A) NAND B)的正确写法
你犯了一个典型的Verilog运算符混淆错误:&&是逻辑与(对整个信号做布尔判断),而你需要的是逐位与的&。
你的需求是对8位输入A、B的每一位分别计算((~A) NAND B),而NAND运算本身就是“先与再取反”,所以正确的行为级写法应该是:
output = ~(~A & B);
为什么之前的写法不行?
&&会把8位的A、B当作单个布尔值处理:只要信号里有任意一位为1,就判定为真(1'b1),否则为假(1'b0)。所以~A&&B的结果是一个单bit值,再取反后还是单bit,无法得到8位的逐位运算结果。- 而
&是逐位与运算符,会对A、B的每一位分别进行与运算,得到的是8位结果,再逐位取反后正好符合你要的8位NAND输出。
另一种结构化实现方式(可选)
如果想用硬件原语直接描述,也可以用nand门例化,逐位或者整体连接:
nand output[7:0] (~A, B);
这种写法更贴近硬件结构,行为和~(~A & B)完全一致。
内容的提问来源于stack exchange,提问作者Alon Cohen
相关产品推荐
相关产品推荐

