32位进位选择加法器_加法器和减法器的实现

v2-1fe449cfb362b7641488589ca25edd95_b.jpg

最近一直在刷力扣。然后突然又想二刷计算机组成与设计。就结合计算机组成与设计这本书以及北大的同名精品课开始复习。看的是真的舒服。

唔,我自己看计算机组成与设计的时候,看了后面的逻辑设计部分,学到的最大的收获就是,从真值表出发,或许可以推出简单的逻辑运算公式,但是一定可以推出对应的电路图。从逻辑运算公式出手,是一定能够推出真值表的,也一定可以推出电路图的。有了电路图,真值表和逻辑运算公式也一定能够推理出来。

因此,就从半加器出发吧。来试着推一下玩玩。

v2-258487f6d79255e4748525262abe6ad0_b.jpg

这是一个半加器的真值表。直接就可以看出C是与,S是异或。

这个比较简单,电路如图所示。

v2-7704b507959aa5b3bea18840c89dc89a_b.jpg

那如果是全加器呢?

v2-649fbbdf1d8b4d50dc9324d7fcca3e00_b.jpg

v2-649fbbdf1d8b4d50dc9324d7fcca3e00_b.jpg

来看,A B C 和OUT,很简单,我们直接转换真值表。

第一个A:1 B:1 C: 0 OUT:1.

那么对应得就是

v2-55d4c0bf5facdcf7a9167e0462a2d6d1_b.jpg

一般逻辑设计,有了真值表,可以直接看输出为1的部分,只要能实现1,那么0自然也实现了。

再来看其它部分:

v2-c8e2c24e5739a6a0d0532e1d3cf48c93_b.jpg

那么OUT的表达式整体上就是:并且化简以后那就是:

v2-6e3e10b65769f90c2f69d181a367f7c9_b.jpg

那么看最后的式子来翻译OUT:

那就是 AB的与电路+(AB的异或电路)与C。

那么结构如下:

v2-31106340a5cdebf6452aaa7625b39233_b.jpg

好了,用同样的道理进行化简,就可以得到S的电路:

v2-90ee046a5f6bb41ae7a5cdc8753050a8_b.jpg

两个内容一合成,就是全加器的电路:

v2-5f618d4abf46b46c085b4982c15335a5_b.jpg

4 bit加法器具体是这样形成的:

v2-1fe449cfb362b7641488589ca25edd95_b.jpg

也就是很简单的4个1 bit 全加器串联在一起就好了。

然后的话每一位分别对应一位加法器。

接下来是我做的一个实例:

v2-409b8b2963e1224e6ceee8a435d284d2_b.jpg

好了,我们轻松地做出来了一个4Bit加法器。出发点是什么?真值表和逻辑公式和电路的相互转化!

具体32位加法器我就不具体做了,然后的话32位加法器差不多,下面是1个图:

v2-25c1ff77d3ebdb04ac5cf826adb7fde6_b.jpg

好了,问题来了,可能出现溢出的情况。具体的话得看到具体的操作。

如果是add,那是有符号数,就可能出现溢出,如果是addu,那是无符号数,那就问题不是太大。

具体的话是这样的:

v2-ede470b6540841df04cc6afa4cabf0ec_b.jpg

有符号数嘛,就是因为补码造成的这种情况。无符号数就好多了,不会出现这种尴尬的情况。

当然了,溢出和进位不能一概而论,所以又有了下列的情况:

v2-3881c217b04ddd8454af3dc27c123f3a_b.jpg

溢出又要怎么检测呢?很简单,最高位的输出不等于最高位的输入。这就是溢出了。用什么电路合适检测?都是0和1的话输出是0,否则为1.那么显然直接就是异或了。

减法器怎么办?A-B可以看成A+(-B)。那么直接用补码把B取反再+1即可。在具体的加法器的做法是这样的:

v2-f0c9353a14bad3196a4a863141e4fade_b.jpg

当sub信号为0时,那么还是进行加法操作。当sub信号为1时,B取反,之后C0置为1,进位输入为1,那么就做到了按位取反再加1的操作。

以上就是加减法的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值