考研数电·零基础讲义 · 第 11 讲|加法器与数值比较器
学完这一讲,你能自己推出半加器、全加器的真值表和逻辑式,说清串行进位与超前进位的区别(为什么后者快),会用 4 位加法器 74HC283 做码制转换、扩展位数和减法,并会用 4 位数值比较器 74HC85 比较大小、级联成 8 位比较器。预计用时 2~2.5 小时。
本讲地图#
- 半加器:两个 1 位数相加,不管低位进位。S=A⊕B,CO=AB。
- 全加器:三个 1 位数相加(两个加数 + 低位进位)。S=A⊕B⊕CI,CO=AB+(A⊕B)CI。
- 多位加法器:串行(行波)进位——简单但慢;超前进位——快但电路复杂。74HC283 是 4 位超前进位加法器。
- 数值比较器:从高位到低位逐位比;74HC85 是 4 位比较器,带级联输入。
- 华师怎么考:考纲"组合逻辑电路"中的常用模块。常见题型:推全加器、说明超前进位原理、用 74HC283 设计码制转换(如 8421 码转余 3 码)、比较器级联。
- 教材对应:第 4 章 4.4.4 节(加法器)、4.4.5 节(数值比较器),4.5 节例 4.5.3。
前置知识#
- 二进制加法、补码与减法(见第 01 讲上、下)。
- 异或、同或的性质(见第 02 讲上)。
- 组合电路设计步骤,第 08 讲例 2 分析过全加器(见第 08 讲)。
一、先复习:二进制加法是怎么"进位"的#
1.1 大白话:竖式加法#
十进制竖式加法我们小学就会:个位相加,满十进一,再加到十位上。二进制完全一样,只是"满二进一":
0+0=0,0+1=1,1+0=1,1+1=10
1+1=10读作"一零":本位写 0,向高位进 1。
举个例子,1011+0110(11 + 6):
| 位 |
第 3 位 |
第 2 位 |
第 1 位 |
第 0 位 |
| 加数 A |
1 |
0 |
1 |
1 |
| 加数 B |
0 |
1 |
1 |
0 |
| 来自低位的进位 |
1 |
1 |
1 |
0 |
| 本位和 |
0 |
0 |
0 |
1 |
| 向高位的进位 |
1 |
1 |
1 |
0 |
最低位:1+0=1,无进位;第 1 位:1+1=10,写 0 进 1;第 2 位:0+1+1=10,写 0 进 1;第 3 位:1+0+1=10,写 0 进 1。最后结果是进位 1 加上 0001,即10001=17。
观察到:最低位只需要加两个数,其余每一位都要加三个数(两个加数 + 低位来的进位)。这就引出了两种 1 位加法器。
二、半加器#
2.1 定义#
半加器(Half Adder):只把两个 1 位数A、B相加,不考虑来自低位的进位。输出本位和S(Sum)和向高位的进位CO(Carry Out,读作"C-O")。
2.2 真值表与逻辑式#
| A |
B |
S |
CO |
| 0 |
0 |
0 |
0 |
| 0 |
1 |
1 |
0 |
| 1 |
0 |
1 |
0 |
| 1 |
1 |
0 |
1 |
S=AB+AB=A⊕B,CO=AB
逐行拆解:S在A、B不同时为 1,正是异或;CO只有两个都是 1 才为 1,正是与。所以半加器 = 一个异或门 + 一个与门。
2.3 为什么叫"半"#
因为它只能做加法的"一半工作"——最低位够用,但其他位还要加上低位进位,半加器做不了。
三、全加器#
3.1 定义#
全加器(Full Adder):把A、B和来自低位的进位CI(Carry In)三个 1 位数相加,输出S和CO。
3.2 真值表(教材表 4.4.10)#
| CI |
A |
B |
S |
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 |
0 |
1 |
| 1 |
1 |
0 |
0 |
1 |
| 1 |
1 |
1 |
1 |
1 |
怎么列:每一行把三个数当普通数字加起来,结果 0、1、2、3 写成两位二进制COS:0 = 00,1 = 01,2 = 10,3 = 11。
3.3 逻辑式#
和S:三个输入中有奇数个 1 时为 1(第 08 讲奇校验的思路):
S=A⊕B⊕CI
进位CO:至少两个 1 时为 1。卡诺图化简得
CO=AB+BCI+ACI
还可以写成另一种很有用的形式:
CO=AB+(A⊕B)CI
逐行拆解第二种形式:产生进位有两种情况——
- A、B都是 1(AB=1):不管CI是什么,一定进位。这叫"自己产生进位"。
- A、B恰好一个是 1(A⊕B=1),而且低位送来了进位(CI=1):1+1=10,也进位。这叫"把低位进位传下去"。
为什么两种形式相等?AB+(A⊕B)CI中,(A⊕B)CI=ABCI+ABCI;而AB+BCI+ACI中多出来的ABCI已经被AB包含了。两者真值表完全一样(已穷举核对)。
教材另外给出用"圈 0 再取反"得到的与或非形式:
S=ABCI+ABCI+ABCI+ABCI,CO=AB+BCI+ACI
双全加器 74LS183 就是按这个式子做的。逻辑功能是一样的,只是电路实现方式不同。
3.4 用两个半加器搭一个全加器#
把CO=AB+(A⊕B)CI和S=(A⊕B)⊕CI对照着看:
- 半加器 1:输入A、B,得到A⊕B和AB;
- 半加器 2:输入A⊕B和CI,得到S=(A⊕B)⊕CI和(A⊕B)CI;
- 一个或门:把AB和(A⊕B)CI相或,得到CO。
图 1:两个半加器加一个或门组成 1 位全加器
3.5 例题 1:代数验证一行#
题目:A=1,B=0,CI=1,用式子算S和CO。
解:A⊕B=1;S=1⊕1=0;CO=AB+(A⊕B)CI=0+1⋅1=1。检验:1+0+1=2=(10)2,和 0 进位 1,正确。
3.6 易错点 ⚠️#
- 全加器的S是三个变量的异或,不是两个。
- CO=AB+(A⊕B)CI中的异或也可以换成或:CO=AB+(A+B)CI,结果不变(多出的ABCI被AB吸收)。超前进位里的"传递函数" P就是这么来的。
- 列真值表时变量顺序要和题目一致,教材把CI放在最左边。
四、多位加法器#
4.1 串行进位加法器(行波进位)#
大白话:像接力赛,第 0 棒跑完把接力棒(进位)交给第 1 棒,第 1 棒跑完再交给第 2 棒……
结构:4 个全加器排成一排,低位全加器的CO接到高位全加器的CI,最低位的CI接 0。
图 2:4 位串行进位加法器计算0111+0001:进位从右往左逐级传递,每一位的和要等进位到了才确定(动画循环播放)
缺点:慢。每一位都要等低位的进位到达才能算出正确结果。最坏情况(比如0111+0001,进位一路从第 0 位传到第 3 位),要经过 4 个全加器的进位延迟。位数越多越慢:32 位就要传 32 级。
优点:结构简单、规整,对速度要求不高时仍然常用。
4.2 超前进位加法器#
大白话:与其等接力棒一棒一棒传过来,不如让每一棒的选手自己算出"我这一棒会不会拿到接力棒"。第i位的进位其实只由更低的那些位的A、B和最初的CI决定,完全可以提前用一个专门的电路同时算出来。
两个关键函数(第i位):
Gi=AiBi(进位生成函数,Generate)
Pi=Ai+Bi(进位传送函数,Propagate)
于是第i位的进位输出为
(CO)i=Gi+Pi(CI)i
读法:"本位自己生成进位,或者本位能传送且低位送来了进位"。
展开:令C0为最低位的进位输入,Ci+1=(CO)i为第i位送给第i+1位的进位:
C1=G0+P0C0
C2=G1+P1G0+P1P0C0
C3=G2+P2G1+P2P1G0+P2P1P0C0
C4=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0
逐行拆解C2:第 1 位向第 2 位进位,有三种可能:
- G1:第 1 位自己就生成了进位;
- P1G0:第 0 位生成了进位,第 1 位把它传了过去;
- P1P0C0:最初的进位C0被第 0 位、第 1 位一路传过来。
关键:右边只出现A、B和C0,没有任何别的进位。所以所有进位都可以同时算出来,每个进位只要"先算G、P(一级门)+ 一级与或",与位数无关。和则是Si=Ai⊕Bi⊕Ci。
代价:位数越多,Ci的式子越长,与门的输入越多,电路复杂程度急剧上升。所以实际中常做成 4 位一组。
4.3 4 位超前进位加法器 74HC283#
| 引脚 |
作用 |
| A3A2A1A0 |
加数 A(A3最高位) |
| B3B2B1B0 |
加数 B |
| CI |
最低位进位输入 |
| S3S2S1S0 |
4 位和 |
| CO |
最高位进位输出 |
功能一句话:COS3S2S1S0=A+B+CI(按二进制数相加)。教材指出:从加数送入到得到和只需三级门的延迟,得到进位输出只需一级反相器加一级与或非门的延迟。
4.4 例题 2:74HC283 算一道加法#
题目:A3A2A1A0=1011,B3B2B1B0=0110,CI=0,求输出。
解:11+6+0=17=16+1,所以CO=1,S3S2S1S0=0001。(与第一节竖式结果一致。)
4.5 两种进位方式对比#
|
串行(行波)进位 |
超前进位 |
| 进位怎么来 |
低位算完逐级传上来 |
由A、B、C0直接同时算出 |
| 速度 |
慢,位数越多越慢 |
快,进位延迟与位数基本无关 |
| 电路 |
简单、规整 |
复杂,位数多时急剧变复杂 |
| 典型器件 |
由全加器(如 74LS183)串接 |
74HC283 |
| 类比 |
接力赛 |
每位选手自己算好起跑时刻 |
简答题"比较串行进位与超前进位加法器"照这张表答,要点就齐了。
4.6 易错点 ⚠️#
- 超前进位"快"的原因是进位不再逐级等待,而不是全加器本身变快了。
- Pi用Ai+Bi或Ai⊕Bi都能得到正确进位(已穷举 4 位全部 512 种输入核对);教材定义Pi=Ai+Bi,写答案时按教材。
- 74HC283 只管 4 位二进制相加,不会自动做 BCD 调整。
五、74HC283 的应用#
5.1 例题 3:8421 码转余 3 码#
题目:用 74HC283 把 8421 BCD 码DCBA转换为余 3 码Y3Y2Y1Y0。
思路:余 3 码 = 8421 码 + 3(第 01 讲下)。所以只要做一次加法:
- A3A2A1A0接DCBA;
- B3B2B1B0接常数0011;
- CI=0;
- S3S2S1S0就是余 3 码。
验证:输入 0101(5),5+3=8,输出 1000,正是 5 的余 3 码。0~9 全部已用程序核对,最大9+3=12<16,CO始终为 0。
这类"码制转换"题是华师加法器考点的经典问法:看到"加上一个常数",就想到 74HC283。
5.2 例题 4:两片级联成 8 位加法器#
低 4 位一片、高 4 位一片:低位片CI=0,低位片的CO接高位片的CI,高位片的CO就是 8 位加法的最高进位。这相当于"片内超前进位、片间串行进位"。
验证:200+100=300=256+44,高位片输出CO=1,8 位和00101100=44(已用程序核对多组数据)。
5.3 例题 5:用 74HC283 做减法#
第 01 讲下讲过:A−B=A+B+1(补码)。所以:
- B的每一位经非门后接到B3∼B0;
- CI接 1(这就是"+1");
- S就是A−B的结果(4 位)。
而且CO=1表示A≥B(结果为正或零),CO=0表示A<B(结果为负,S是负数的补码)。已对 256 组(A,B)全部核对。
例:A=0110(6),B=0010(2):B=1101,0110+1101+1=10100,CO=1,S=0100=4,正确。
5.4 例题 6:一位 BCD 加法器(综合题)#
题目:用两片 74HC283 和若干门,设计一位 8421 BCD 码加法器:输入两个 BCD 数X、Y(各 0~9)和低位进位Cin,输出本位 BCD 和以及向高位(十位)的进位C。
为什么一片不够:74HC283 做的是二进制加法,"满十六进一";BCD 要求"满十进一"。比如7+5=12,二进制和是 1100,但 BCD 应该是"进位 1、本位 0010"。两者差了 6(16 与 10 之差)。
修正规则:二进制和大于 9 时,再加 6(0110),同时向十位进 1;不大于 9 时不修正。
第 1 步:片(1) 做X+Y+Cin,得到CO1和S3S2S1S0。
第 2 步:判断是否大于 9(即自测第 7 题):
C=CO1+S3S2+S3S1
- CO1=1:和 ≥ 16(最大9+9+1=19);
- S3S2=1:和为 12~15;
- S3S1=1:和为 10、11(以及 14、15)。
第 3 步:片(2) 的A接S3S2S1S0,B接0CC0(即B3=0,B2=C,B1=C,B0=0,需要修正时就是加 0110,否则加 0000),CI=0。片(2) 的S就是本位 BCD 和,C就是十位进位(片(2) 的CO不用)。
验证:7+5+0:片(1) 得CO1=0,S=1100;C=0+1⋅1+1⋅0=1;片(2):1100+0110=10010,取低 4 位 0010。结果"进位 1、本位 2",即 12。正确。X、Y取 0~9、Cin取 0/1 的 200 种组合已全部用程序核对。
5.5 易错点 ⚠️#
- 做减法时别忘了CI=1。
- 级联时CO接下一片的CI,方向是低位片 → 高位片。
六、数值比较器#
6.1 大白话:比身高#
比较两个数谁大,就像比两个人的身高。比两个多位数时,先比最高位:最高位大的那个数一定大;最高位一样,再比下一位……直到分出胜负;全都一样,就相等。
6.2 1 位数值比较器#
两个 1 位数A、B:
| 情况 |
条件 |
输出式 |
| A>B |
A=1,B=0 |
Y(A>B)=AB |
| A<B |
A=0,B=1 |
Y(A<B)=AB |
| A=B |
相同 |
Y(A=B)=A⊙B |
逐行拆解:AB只在A=1、B=0时为 1,正好是"A 大";同或A⊙B在两者相同时为 1,正好是"相等"。
6.3 4 位数值比较器的逻辑#
比较A3A2A1A0和B3B2B1B0,"A>B"的条件写成式子:
Y(A>B)=A3B3+(A3⊙B3)A2B2+(A3⊙B3)(A2⊙B2)A1B1+(A3⊙B3)(A2⊙B2)(A1⊙B1)A0B0+(⋯)I(A>B)
逐项拆解:
- 第 1 项:最高位 A 大,直接判 A 大;
- 第 2 项:最高位相等(A3⊙B3=1)且次高位 A 大;
- 第 3、4 项依此类推;
- 最后一项:4 位全相等,就听"更低位送来的比较结果" I(A>B)的。
Y(A<B)同理(把AiBi换成AiBi,I(A>B)换成I(A<B)),而
Y(A=B)=(A3⊙B3)(A2⊙B2)(A1⊙B1)(A0⊙B0)I(A=B)
6.4 74HC85 的引脚与用法#
| 引脚 |
作用 |
| A3∼A0、B3∼B0 |
两个 4 位数 |
| I(A>B)、I(A<B)、I(A=B) |
级联输入:来自更低位的比较结果 |
| Y(A>B)、Y(A<B)、Y(A=B) |
比较结果输出 |
单片使用(只比 4 位)时,没有更低位,令
I(A>B)=0,I(A<B)=0,I(A=B)=1
意思是"更低位(不存在)算作相等",这样 4 位全相等时输出A=B。
功能表(简化,"×"为不管):
| 比较情况 |
Y(A>B) |
Y(A<B) |
Y(A=B) |
| 从高位起第一个不同位Ai=1、Bi=0 |
1 |
0 |
0 |
| 从高位起第一个不同位Ai=0、Bi=1 |
0 |
1 |
0 |
| 4 位全相等,级联输入为(1,0,0) |
1 |
0 |
0 |
| 4 位全相等,级联输入为(0,1,0) |
0 |
1 |
0 |
| 4 位全相等,级联输入为(0,0,1) |
0 |
0 |
1 |
(级联输入按I(A>B),I(A<B),I(A=B)的顺序写。)
6.5 例题 7:读 74HC85#
题目:(1)A=1011,B=1001,单片使用;(2)A=0110,B=0110,级联输入为I(A>B)=1、其余为 0。分别求输出。
解:(1)从高位比:A3=B3=1,A2=B2=0,A1=1>B1=0——分出胜负,Y(A>B)=1,其余为 0。(2)4 位全相等,听级联输入的:Y(A>B)=1,其余为 0。
6.6 例题 8:两片 74HC85 组成 8 位比较器(教材例 4.5.3)#
思路:高 4 位相等时才看低 4 位。所以:
- 低 4 位A3∼A0、B3∼B0接片(1),片(1) 的级联输入接(0,0,1);
- 高 4 位A7∼A4、B7∼B4接片(2);
- 片(1) 的三个输出Y分别接片(2) 的三个级联输入I;
- 片(2) 的输出就是 8 位比较结果。
验证:A=10010110,B=10010011:高 4 位都是 1001,相等,片(2) 听片(1) 的;低 4 位0110>0011,片(1) 输出A>B,所以最终A>B。正确。这个接法已用程序对256×256=65536种输入全部核对。
6.7 易错点 ⚠️#
- 级联方向:低位片的输出 → 高位片的级联输入,和加法器进位方向一样,从低到高。
- 最低位片(或单片使用)的级联输入必须接(0,0,1),不能悬空、不能全接 0。
- 多位比较是"高位优先":高位一旦分出大小,低位再怎么样都不影响结果。
速记卡#
| 项目 |
要点 |
| 半加器 |
S=A⊕B,CO=AB(异或门 + 与门) |
| 全加器 |
S=A⊕B⊕CI,CO=AB+(A⊕B)CI=AB+BCI+ACI |
| 全加器结构 |
两个半加器 + 一个或门 |
| 串行进位 |
低位CO → 高位CI;简单但慢(逐级等待) |
| 超前进位 |
Gi=AiBi,Pi=Ai+Bi,Ci+1=Gi+PiCi展开后只含A、B、C0 |
| 74HC283 |
4 位超前进位加法器,COS=A+B+CI |
| 283 应用 |
加常数(8421→余 3 码加 0011);级联CO→CI;减法A+B+1 |
| 1 位比较 |
AB(大)、AB(小)、A⊙B(等) |
| 74HC85 |
4 位比较器;单片级联输入接(0,0,1);级联:低位片Y → 高位片I |
自测练习#
1. 写出半加器和全加器的真值表,并说明全加器为什么不能用一个半加器代替。
答案与提示
见本讲第二、三节。半加器只能加两个 1 位数,而多位加法中除最低位外每一位都要加上低位进位,是三个数相加,所以需要全加器(或两个半加器 + 或门)。
2. 用 74HC283 计算0111+0101(CI=0)和1111+0001(CI=0),写出CO和S。
答案与提示
7+5=12:CO=0,S=1100。15+1=16:CO=1,S=0000。已用程序核对。
3. 写出 4 位超前进位中C3的表达式,并说明每一项的含义。
答案与提示
C3=G2+P2G1+P2P1G0+P2P1P0C0。依次是:第 2 位自己生成进位;第 1 位生成、第 2 位传送;第 0 位生成、第 1、2 位传送;最初进位C0经第 0、1、2 位一路传送。
4.(华师真题风格)用一片 74HC283 设计电路,将 8421 BCD 码转换为余 3 码,画出(写出)接法;若反过来把余 3 码转换为 8421 码,又该怎么接?
答案与提示
8421→余 3:A接 BCD 码,B=0011,CI=0,S为余 3 码。余 3→8421:要减 3,即加上 3 的补码1101(4 位下−3的补码),A接余 3 码,B=1101,CI=0,取S(忽略CO)。例:余 3 码 1000(表示 5)+1101=10101,S=0101=5。也可以写成B=0011=1100、CI=1,效果相同。
5. 用 74HC283 实现A−B(A、B为 4 位无符号数),并判断A=0011、B=0101时的输出及其含义。
答案与提示
B各位取反接B3∼B0,CI=1。0011+1010+1=1110,CO=0,表示A<B;S=1110是−2的补码。已用程序核对。
6. 74HC85 单片使用,A=0100,B=0101,三个输出各是多少?若把级联输入错接成(0,0,0),A=B=0101时Y(A=B)是多少?
答案与提示
A<B:Y(A<B)=1,其余为 0。按教材式 (4.4.22),Y(A=B)含因子I(A=B),级联输入接成(0,0,0)时,即使A=B也有Y(A=B)=0——结果出错,所以单片使用必须把I(A=B)接 1。
7. 两个 1 位 BCD 数相加(用 74HC283 得到和S3S2S1S0及CO),当结果超过 9 时需要"加 6 修正"。写出判断是否需要修正的逻辑式。
答案与提示
需要修正当且仅当和大于 9:C=CO+S3S2+S3S1。理解:CO=1表示和 ≥16;S3S2=1表示 12~15;S3S1=1表示 10、11、14、15。已对 0~9 两两相加的 100 种情况核对。
下一讲预告#
第 12 讲讨论一个"稳态分析看不到"的问题:输入跳变的瞬间,组合电路输出可能出现一个极窄的错误脉冲——竞争-冒险,以及怎么发现它、消除它。
👉 点击进入下一讲:第12讲|组合逻辑电路中的竞争-冒险
评论
还没有评论。 来写第一条。