我如何在时序电路中减去2个数字?

时间:2013-04-06 13:01:48

标签: verilog sequential circuit subtraction

我需要做一个减去2个数字的电路。我相信我需要使用SUM和一个符号位,以及一些掩码,但我无法弄清楚如何将它组合在一起。

[LATER EDIT]

我试图做“15-3”。

二进制中的15是1111 二进制3是0011

我为符号0添加了一点+和1添加 -

所以现在我有:0 1111 + 1 0011 = 100010对此,我使用符号掩码1 0000进行异或。这是我卡住的地方。

[后来编辑]

我想我找到了另一种看问题的方法。 我将使用2个移位寄存器来加载2个数字。每个移位寄存器的输出将是执行NOR为0的NOR门的输入。(这是将0101变换为1010)然后这些门的2个输出将连接到SUM的输入。 我的问题是如何在进入SUM之前从1位转换回8位数据?

2 个答案:

答案 0 :(得分:1)

如果您了解Two's Complement作为反转(否定)数字的方法,问题将变得更加简单。

有几种方法可以表示负数。

1)签名幅度(添加符号位)

0 0011 =>  3
1 0011 => -3

2)一个补语(按位反转)

0011 =>  3
1100 => -3

3)两个补语(一个补语+ 1)

0011             =>  3
1100 + 1 => 1101 => -3

两个补语增加了效率,因为它删除了一个补码的重复0代码(0000 => 0和1111 => -0)。

补丁还具有可以正常添加数字的属性 15 - 3实际执行15 + (-3)

要了解如何添加二进制数,请快速查看ripple adders

首先创建一个半加法器,添加2位,生成一个和一个进位。使用半加器+ XOR门构建一个完整的加法器,A + B +进位,生成SUM和进位(全1位)。然后,您可以将这些链接在一起,形成X宽度全加器。

答案 1 :(得分:0)

半加器是由两个逻辑门构建的简单,功能数字电路的示例。半加器添加到一位二进制数(AB)。输出是两位(S)和进位(C)的总和。注意相同的两个输入如何指向两个不同的门。 enter image description here