自制简单CUP第三篇(全加器)

上一篇-自制简单CUP第二篇(半加器)

上一篇文章说了半加器,可以实现两个一位数字相加的结果

简单一想好像没什么问题,但是仔细一想就发现不对劲了,我们拿一个简单的二进制数相加的例子来看一下

上面的例子中,在进行右边第一列的加法时,只是两个数字相加,但是从第二列开始,都是需要3位数相加的(多了一个进位)

但是我们的半加器只有两个输入位,所以我们需要把半加器改成3个输入,也就是全加器

三、全加器

输入:3位

输出:2位

说明:在半加器的基础上,将2个输入位相加改成3个输入位相加

全加器真值表
输入A输入B输入C输出D(相加结果)输出E(是否进位)
00000
00110
01010
01101
10010
10101
11001
11111

 

 

 

 

 

 

 

 

 

 

写出最小项表达式:

D =  A'B'C + A'BC' + ABC + AB'C'

   =  (A'B+AB')C' + (A'B'+AB)C

   =  (A'B+AB')C' + (A'B'+A)(A'B'+B)C

   =  (A'B+AB')C' + (A+B')(A'+B)C

   =  (A'B+AB')C' + ((A+B')(A'+B))''C

   =  (A'B+AB')C' + ((A+B')'+(A'+B)')'C

   =  (A'B+AB')C' + (A'B+AB')'C

前面我们做异或门的时候,推出异或门可以用代数A'B+AB'来表示

当我们用F来表示A'B+AB'时,上面的结果可以变成FC'+F'C,所以上面的结果其实就是AB做异或操作,然后再将结果跟C做异或操作

其实如果不通过逻辑代数来做,用正常思维来考虑的话反而很容易

用一次异或可以算出两个数相加的结果,那3个数相加不就是拿第3个数跟前面两个数异或的结果再做异或吗

 

写出最小项表达式:

E =  ABC' + AB'C + A'BC + ABC

   =  C(A'B + AB') + AB(C+C')

   =  C(A'B +AB') + AB

乍一看还是有点复杂,但是其中的(A'B +AB')其实在设计D的时候已经出现过了,所以所以这一个是可以重复使用的,根据两个化简结果画出电路图

到这里就可以结果了,不过我第一篇文章说到,能不能脱离逻辑代数,靠推理推出复杂一点的电路,下面开始就用不使用逻辑代数来推出输出E(是否产生进位)


产生进位需要什么条件呢:需要3个输入有2个或3个输入是1

我们可以直接忽略3个都是1的情况,因为只要有2个1就可以产生进位了,所以现在的问题是:怎么判断3个输入有2个1

思路1:

3个输入俩俩做与操作,最后将结果做或操作(很傻逼的思路,但是我思考了很久,一开始也只能得出这样子的办法,你们可以试试看能不能想到好点的办法)

最后得到的全加器是这样子的:

可以看出来还是比较复杂的,比上面的方法多了2个逻辑门

思路2:

我们在设计输出D的时候用到了异或,那能不能拿过来在此利用呢,据此我推出了两个条件

1、如果AB异或后为1,证明AB有一个1,那只要C也是1就可以进位了

2、如果AB都为1,也可以进位

画出电路图后是这样子的

其实也就是我们上面用代数算出来的结果,这样子一看,好像代数法做出来的,就算不用代数法也可以推出来

如果将现在的3输入改成4输入,5输入呢(其实稍微想一下就会发现有点复杂了),靠这样子的推理还能有效的推出结果吗

其实应该也是可以的(至少本人觉得应该可以),但是会很复杂

我总结了几条这样子做的缺点:

1、这种推理模式推出来的结果,基本无法做化简,就是你想出来的是什么逻辑,那你体现在电路图中就是什么样子的

2、当你做任何改变的时候,你很难证明这个改变不会影响输出,除非你把每一个输入的可能性都代入一遍,而且很容易遗漏到错误的地方

3、当电路复杂时,你要考虑的地方会很多,而且容易想错

关于最基础的电路就写到这里了,下一篇开始进入到中规模电路的设计了,迫不及待!!

下一篇-自制简单CUP第四篇(加法器)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值