数字电路——加法器
组合电路,加法器,半加器,全加器
我们之前了解了门,电路就是门的组合。
电路又可以分为两大类,组合电路和时序电路。
但作为计算机和编程的知识铺垫,我们要了解的是组合电路的使用方法。所以本篇讲的是组合电路的运算(电路的布尔运算。)
推导过程略看也行。建议还是看看,了解一下。
组合电路(可略过)
输出仅由输入值确定的电路
把一个门的输出作为另一个门的输入,就可以把门组合电路.
如上图,两个与门的输出被用作或门的输入。
注意:
- A同时是两个与门的输入。
- 两条交叉的连接线的交汇处没有连接点,应该看做是一条连接线跨做了一条,他们互不影响
电路分析 我们倒着看,按照门来分析
- 如果X=1则说明,D和E至少有一个是1.
- 如果D是1,则AB都必须是1
- 如果E是1,则AC都必须是1
真值表如下
A | B | C | D | E | X |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 |
三个输出就是8种组合哦( 23).中间显示了电路中间值(D和E)。
此时我们可以用布尔代数来表示电路。因为电路是一组互相关联的门,所以表示电路的布尔表达式是布尔运算的组合。
在这个电路中,有两个表达式。每个运算的输出是或运算的输入。
因此~(AB+AC) 这个布尔表达式表示了这个电路
详细点就是
- (AB=D AC=E)
- D+E=X
- 然后参考真值表就行。
我们现在从另一个方向入手,从布尔表达式绘制对应的真值表和逻辑框图。
例如 A(B+C) 这个表达式中,两个输入值B和C进行或运算。这个结果和A作为与运算的输入,以产生结果。对应的逻辑框图如下
《计算机科学概论》P69
分析:(门关系)
- A(B+C)为1,则A与B+C都必须为1
- B+C为1 则 B和C不能全部为0
- A为0则输出为0(A(B+C))
对应的真值表如下
A | B | C | B+C | A(B+C) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 |
我们可以使用真值表任一行去验证结果。
比如第三行
A=0 B =1 C=0 B+C=1+0=1(或门,有一个输出1就行) A(B+C)=0(B+C=1)=0
(与门,两个输出必须同为1才输出1,否则输出0)
逻辑代数(布尔代数)所表示的是逻辑关系,而不是数量关系。
比较这两个例子的最后的一列,完全一致。这就是电路等价
电路等价:对应每个输入值组合,两个电路都生成完全相同的输出
在了解了上面的基础知识后,我们就可以利用可证明数学的法则来设计逻辑电路。
性质 | 与 | 或 |
---|---|---|
交换律 | AB=BA | A+B=B+A |
结合律 | (AB)C=A(BC) | (A+B)+C=A+(B+C) |
分配率 | A(B+C)=(AB)+(AC) | A+(BC)=(A+B)+(A+C) |
恒等 | A1=A | A+0=A |
补 | A(A’)=0 | A+(A’)=1 |
德·摩根定律 | (AB)‘=A’OR’B’ | (A+B)‘=A’B’ |
德·摩根定律:
这个定律声明,对两个变量的与操作的结果进行非操作,等于对每个变量进行非操作后再对他们进行或操作。
也就是说对与门的输出求逆,等价于先对每个信号求逆,然后再把他们传入或门
(AB)‘=A’+B’
这个定律的第二部分是,对两个变量的或操作的结果进行非操作,等于对每个变量进行非操作后在对它们进行与操作。
就是对或门的输出求逆,等价于先对每个信号求逆,在把他们传入到与门:
(A+B)‘=A’B’
加法器
在数字电路中,常用的组合逻辑电路有加法器、编码器、译码器等,这里主要介绍加法器
计算机能执行的最基本运算就是把两个数相加。那么是如何通过组合电路来实现的呢?这就是本篇重点呀~。
与所有计数系统中的加法一样,对两个二进制数求和的结果可能产生进位值。二进制中,1+1=10.计算两个数位并生成正确进位的电路叫半加器。
加法器:对二进制执行加法运算的电路
半加器:计算两个数位并生成正确进位的电路
全加器:计算两个数位的和。并考虑进位输入的电路
半加器
求二进制A和B的的所有可能,真值表如下:
A | B | 和 | 进位 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 |
注意:1+1=10 (二进制就是2用10表示,单个门电路只输出1位,所以和为0,进位为1)
如果把和与进位列同各种门的输出作比较,会发现~——和对应异或门,进位对应与门
于是此半加器表示如下:
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
布尔表达式如下:
和=A⊕B(异或门)
进位=AB (与门)
异或门真值表
A | B | X |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
注意:半加器不会把进位(进位输入)考虑在计算之内,所以半加器智能计算两个位数的和,而不能计算两个多位二进制数的和。
计算01+01的和,表示如下 (低位和低位相加,高位和高位相加。上高下底。)
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
现在这个值就不对了呀!下面得到的值没有传给上面。即无法接受进位。
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
全加器
全加:实现两个一位二进制数相加,且考虑来自低位的进位。
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
可以用两个半加器构造一个全加器。求和的输入必须是进位输入以及两个输入值的和。也就是说,把从半加器得到的和与进位输入相加。
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
分析一下值哈(具体电路没必要了),这个电路有3个输入,即原始的数位A和B以及进位输入Ci。因此此真值表有8行(3个输入 23=8,有问题吗?没有问题)
A | B | Ci | Y | Co |
---|---|---|---|---|
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 | 1 | 0 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
最后简化公式。无视就行
Y=(A⊕B)⊕Ci
Co=AB+Ci(A⊕B)
上图截取(https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d)
8个全加器组合起来就可以计算8位的二进运算了哦~ 8位二进制就是1字节了~。
两个八位值相加,需要复制8次全加器电路。一个位值得输出将作用于下一个位值得进位输入。最右边的进位输入是0,最左边的进位输出将被舍弃(通常会生成溢出错误,必然的,我就8个加法器也就能显示8位,到第9位可不就是超了~)
参考资料
- 编程前你最好了解的基本硬件和计算机基础知识(数字电路) https://www.bilibili.com/video/BV1Hi4y1t7zY?p=5&vd_source=743ccd142aebf9f406282dcc02bc441d
- 《计算机科学概论 第5版》
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)