有谁知道如何以进位保存格式计算数字的符号,即使用虚拟和和虚拟进位,而不将它们加在一起?一个verilog的例子是理想的。谢谢!
问问题
642 次
1 回答
4
无符号版本: 比较两个数字(我的热身):
当然,您必须检查一些数字,但只需从最重要的位开始(我假设我们谈论的是无符号数字)。该算法是一种进位保存算法,但向后:
一个例子:
0001111010101 = the number to compare with
0000211002000 = the carry save number
从头开始
0 = 0
0 = 0
0 = 0
1 > 0 - ops! keep the compare-number
0 = 2 - phew! (02 = 10)
1 = 1
1 = 1
0 = 0
0 = 0
1 < 2 :: aha! Carry save number wins!
当我们谈论有符号数时,您要确保设置了最高有效位(并且不关心任何其他结果),或者更确切地说消除低进位符号位影响结果的可能性。
当您添加两个数字时,它们的唯一可能会比它们的值更高一点,其中一个是它们在单个位上设置了多个位。因此,一旦您发现两个位都为零的情况,您可以确定您将有一个正数(而不是推翻数)。
符号算法将回答“进位和符号数的低位总和是否会改变我现在正在查看的位?”的问题。
当在一个位置设置两个位时会发生这种情况,当进位和符号位都为 0 时,算法可能会终止:
Sign bit
v
Carry: 100010010000
Sign : 011101110000
将被处理:符号位已设置。下面的 6 位具有正 XOR。第五位(左起)均已设置。标志会改变。(如果最低有效位不同,它可以再次改变吗?是的,只要 XOR 链给出 1)。
Sign bit
v
Carry: 000001111111
Sign : 011101111111
这里没有设置符号位。后面三个位给出 XOR=1,继续。从左边算起的八位都是零。符号位不能更改。
因此,一个非常粗略的逻辑门实现将是:
THESIGN = false
loop through the numbers SIGNBIT, CARRYBIT from highest (sign) bits downwards:
when XOR(SIGNBIT, CARRYBIT) = 1, continue
when AND(SIGNBIT, CARRYBIT) = 1, flip THESIGN bit, continue
when NAND(SIGNBIT, CARRYBIT) = 1, stop the evaluation, return THESIGN.
于 2014-01-04T21:51:13.767 回答