前几天学了verilog。
我对此有所了解,但不知道在比较门级的两个无符号 4 位数字时如何知道哪个更大。
你能给我一些关于算法的提示吗?
提前谢谢
让这两个 nubers 是由位 a1..a4 和 b1..b4 定义的a和b,如下所示:
a= a1*8+a2*4+a3*2+a1
b= b1*8+b2*4+b3*2+b1
结果:
c result (c==true iff a>b)
c 的逻辑公式: ( &表示and , |表示or , !表示not )
c=(a1 & !b1) |
(!(a1 xor b1) & (a2 & !b2)) |
(!(a1 xor b1) & (!(a2 xor b2) (a3 & !b3)) |
(!(a1 xor b1) & (!(a2 xor b2) & (!(a3 xor b3) (a4 & !b4))
[这不检查相等性只显示如果 a>b]
公式各部分说明:
如果设置了 a 的最高位但没有设置 b 的最高位,=>a>b
(a1 & !b1)
如果最高位相同但设置了 a 的第二高位但未设置 b 的第二高位 =>a>b
(!(a1 xor b1) & (a2 & !b2))
如果两个最高位相等但设置了 a 的第三高但未设置 b 的第三高 =>a>b
(!(a1 xor b1) & (!(a2 xor b2) (a3 & !b3))
如果最高三位相等但a的最低位已设置但b的最低位不是=> a>b
(!(a1 xor b1) & (!(a2 xor b2) & (!(a3 xor b3)
Ps
对于这么小的数字,您还可以使用具有 8 位地址和一位输出的 ROM,其中包含 a 和 b 的所有可能值的答案。