上一篇-自制简单CUP第二篇(半加器)
上一篇文章说了半加器,可以实现两个一位数字相加的结果
简单一想好像没什么问题,但是仔细一想就发现不对劲了,我们拿一个简单的二进制数相加的例子来看一下
上面的例子中,在进行右边第一列的加法时,只是两个数字相加,但是从第二列开始,都是需要3位数相加的(多了一个进位)
但是我们的半加器只有两个输入位,所以我们需要把半加器改成3个输入,也就是全加器
三、全加器
输入:3位
输出:2位
说明:在半加器的基础上,将2个输入位相加改成3个输入位相加
输入A | 输入B | 输入C | 输出D(相加结果) | 输出E(是否进位) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
写出最小项表达式:
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、当电路复杂时,你要考虑的地方会很多,而且容易想错
关于最基础的电路就写到这里了,下一篇开始进入到中规模电路的设计了,迫不及待!!