第3章 组合逻辑电路 CHAPTER 3 兴趣阅读——计算机的诞生及我国计算机的发展历程 1946年2月,第一台电子计算机ENIAC(Electronic Numerical Intergrator and Computer)在美国研制成功。ENIAC不是一台机器,而是一屋子机器,它有8英尺(1英尺=30.48厘米)高,3英尺宽,100英尺长,装有16种型号的18000个真空管,1500个电磁继电器,70000个电阻器,18000个电容器,总重量有30吨。 ENIAC除了军事上的弹道计算外,还涉及天气预报、原子核能、宇宙结、热能点火、风洞试验设计等诸多领域,它把圆周率π精密无误地推算到小数点后面2037位,这是人类第一次用自己的创造物计算出的最周密的值。 1956年,周恩来总理主持制定的《十二年科学技术发展规划》中,把计算机列为发展科学技术的重点之一,并在1957年筹建中国第一个计算技术研究所,开始研制通用数字电子计算机。1958年8月1日,该机可以表演短程序运行,这标志着我国第一台电子数字计算机诞生。后来经过了晶体管第二代计算机、中小规模集成电路第三代计算机,到基于微处理器的第四代计算机发展过程,中国自主研发的计算机为国防和科研事业做出了重要贡献,并且推动了计算机产业的发展。 目前中国计算机在很多方向的研究已达到了世界前沿水平,部分方向已达到国际领先水平。与此同时,中国计算机事业的发展呈现出多元化的趋势,与国外发达国家同步形成了一系列新的学科,并获得了快速发展,很多领域在技术研发或产业化上达到甚至超越了同期国外水平。2019年11月,TOP500组织发布的最新一期世界超级计算机500强榜单中,中国占据了227个,“神威·太湖之光”超级计算机位居榜单第三位,“天河二号”超级计算机位居第四位。图31是ENIAC和我国的“神威·太湖之光”超级计算机。 图31世界上第一台电子计算机和我国研制的超级计算机 本章介绍数字系统中的组合逻辑电路。首先介绍组合逻辑电路的特点和功能描述方法,重点介绍组合逻辑电路的分析方法、组合逻辑电路的设计方法以及利用无关项的组合逻辑电路的设计方法,然后介绍组合逻辑电路中的竞争和冒险等内容,最后着重介绍数字系统中常用的组合逻辑电路。此外,还给出了用Multisim和VHDL分析设计组合逻辑电路的实例。本章学习要求如下: (1) 了解组合逻辑电路的特点和功能描述方法; (2) 掌握组合逻辑电路的分析方法; (3) 掌握组合逻辑电路的设计方法; (4) 掌握利用无关项的组合逻辑电路的设计方法; (5) 熟悉编码器等常用组合逻辑电路的功能与应用; (6) 了解组合逻辑电路中的竞争和冒险现象及判断方法; (7) 了解用Multisim和VHDL分析设计组合逻辑电路的方法。 如何由给定组合电路找出其实现的逻辑功能,如何根据逻辑命题来设计组合电路,以及数字系统中经常用到的组合电路的原理及应用是本章学习的重点。 3.1概述 3.1.1 组合逻辑电路的特点 1. 功能特点 由门电路构成的逻辑部件称为组合逻辑电路(简称组合电路)。组合电路是计算机等数字系统中的逻辑部件之一。数字系统中的另一类逻辑部件叫作时序逻辑电路(简称时序电路),这部分内容将在后续章节中介绍。 组合电路任一时刻的输出仅仅取决于该时刻输入信号的状态,而与该时刻之前电路的状态无关,即组合电路无“记忆性”功能。 2. 结构特点 组合电路之所以具有“无记忆”功能特点,归根结底是由于结构上不含记忆(存储)元件,不存在输出到输入的反馈回路。 3.1.2组合逻辑电路的功能描述方法 组合电路的功能描述方法主要有逻辑表达式、真值表、卡诺图和逻辑图等。 逻辑图本身是逻辑功能的一种表达方式,然而逻辑图所表示的逻辑功能不够直观, 通常情况下还要把逻辑图转化为逻辑表达式或真值表的形式, 以使电路的逻辑功能更加直观、明显。 图32组合逻辑电路的框图 对于任何一个多输入、多输出的组合电路,都可以用图32所示的框图表示。 图中a1,a2,…,an表示输入变量,y1,y2,…,ym表示输出变量。输出与输入间的逻辑关系可以用一组逻辑函数表示为 y1=f1a1,a2,…,an y2=f2a1,a2,…,an  ym=fma1,a2,…,an(31) 3.2组合逻辑电路的分析 组合电路的分析主要是根据给定的逻辑图找出输出与输入的逻辑关系,从而确定其逻辑功能。 3.2.1组合逻辑电路的分析方法 组合电路的分析过程如图33所示。 图33组合电路的分析过程 1. 由逻辑电路写出逻辑表达式 一般是从输入到输出逐级写出各个门电路的输出逻辑表达式,从而写出整个逻辑电路的输出对输入变量的逻辑表达式。必要时可简化,以求出最简逻辑表达式。较简单的逻辑功能从逻辑表达式上即可分析出来。 2. 列出逻辑函数的真值表 将输入变量的状态以自然二进制数顺序的各种取值组合代入输出逻辑表达式,求出相应的输出状态,并填入表中得到真值表。 3. 分析逻辑功能 通常是通过分析真值表的特点,归纳出电路所能实现的逻辑功能。 3.2.2组合逻辑电路分析举例 【例31】分析图34所示电路的逻辑功能。 解: 根据逻辑图,逐级写出输出逻辑表达式 Y1=,Y2=,Y3=AB,Y4=Y1Y2= Y=Y3Y4=AB=AB+=A⊙B(32) 从逻辑表达式(32)可以看出,图34所示电路是判断A和B是否相等的电路,即A=B时,Y为1,否则Y为0。 【例32】分析图35所示电路的逻辑功能。 图34例31的电路图 图35例32的电路图 解: 根据逻辑图,逐级写出输出逻辑表达式 Y1=AB Y=Y1C=ABC(33) 将输入变量A、B和C的各种取值组合代入逻辑表达式(33)中,求出逻辑函数Y的值,由此得出真值表如表31所示。 表31例32的真值表 ABCY 0000 0011 0101 0110 1001 1010 1100 1111 图36例33的电路图 由真值表看出,在3个输入变量A、B、C中,有奇数个1时,输出Y为1; 否则为0。由此可以判断出图35所示电路的逻辑功能为3位判奇电路,又称为“奇校验电路”,是判断输入变量中1的个数是否为奇数的电路。 【例33】分析图36所示电路的逻辑功能,并指出该电路设计是否合理。 解: 逐级写出输出逻辑函数表达式 Y1=AB; Y2=+C; Y3=Y1·C=AB·C Y4=Y2·A=+C·A; Y5=A+B+C Y=Y3+Y4+Y5=AB·C++C·A+A+B+C =CA+B+AB+ =AC+BC+AB+ =∑(0,3,5,6) (34) 将A、B和C取值的各种组合代入最终表达式(34)中(或直接依据最小项表达式),可以得到如表32所示的真值表。 表32例33的真值表 ABCY 0001 0010 0100 0111 1000 1011 1101 1110 由真值表看出,当输入均为0或有偶数个1时,输出Y为1; 否则Y为0。所以该电路为3位判偶电路,又称为“偶校验电路”。这个电路使用门的数量太多,设计并不合理,可用较少的门电路来实现。对表达式进行变换得 Y=AC+BC+AB+ =(A+B)C+(AB+) =(AB)C+(AB) =AB⊙C(35) 图37用“异或”门和“同或” 门实现偶校验电路 由式(35)可以看出,图36所示电路可以用“异或”门和“同或”门实现,其电路如图37所示。 组合电路的分析过程不是一成不变的,实际分析组合电路时,可以根据电路的复杂程度灵活取舍。对较简单的电路,可以从表达式中直接指出电路的逻辑功能。较复杂的电路要借助真值表,这样能较直观地分析出电路的逻辑功能。 微课视频 3.3组合逻辑电路的设计 组合逻辑电路的设计过程与分析过程相反,是根据已知的逻辑问题,画出能实现其逻辑功能的最简逻辑电路图的过程。 3.3.1组合逻辑电路的设计方法 1. 基本设计过程 组合逻辑电路的设计过程如图38所示。 图38组合电路的设计过程 (1) 逻辑抽象。逻辑抽象是将文字描述的逻辑命题(设计要求)转换成逻辑函数表达式的过程。 (2) 逻辑化简。逻辑化简是指采用代数法(公式法)或卡诺图法将逻辑函数化简为最简“与或”表达式,通常使用卡诺图法来完成。 (3) 逻辑变换。逻辑变换是指根据选用的逻辑器件类型,将最简“与或”表达式变换为所需形式。 (4) 画逻辑图。画逻辑图是指根据变换后的逻辑表达式绘制逻辑电路图。 上述过程中,除逻辑抽象外,其他内容均在第1章中做过介绍,这里不再重复。下面仅对逻辑抽象的方法做简要介绍。 2. 逻辑抽象 在设计组合电路时,要将文字描述的设计要求转化为逻辑函数的某种表达方式,这样才能设计出满足要求的逻辑电路。 由于实际逻辑问题各种各样,逻辑抽象没有规范的方法,往往要凭借设计者的经验去完成。通常的思路是: (1) 确定输入、输出变量; (2) 用二值逻辑的0、1两种状态分别对输入、输出变量进行逻辑赋值,即确定0、1的具体含义; (3) 根据输入、输出之间的逻辑关系列出真值表或直接写出逻辑表达式。当变量较多时,可以建立简化的真值表。变量更多时,可根据设计要求直接列写逻辑表达式。 【例34】写出3人多数表决电路的逻辑表达式,当A、B、C三人中有多数人赞同时表决通过,且A有否决权。 解: 参与表决的人A、B和C为输入变量,赞同时用1表示; 不赞同时用0表示。设Y为代表表决结果的输出变量,表决通过用1表示; 未通过用0表示。由此可列出如表33所示的真值表。 表33例34的真值表 ABCY 0000 0010 0100 0110 1000 1011 1101 1111 由真值表可以抽象出逻辑函数Y的最小项表达式 Y=∑(5,6,7)(36) 【例35】已知M=m1m2和N=n1n2是两个二进制正整数,写出判断MB,比较结果分别用M、G和L表示。设AB时,L=1,由此可得1位数值比较器的真值表,如表326所示。 根据表326可以写出逻辑函数表达式 M=BG=+AB=B+AL=A(345) 根据式(345)可以画出1位数值比较器的逻辑图,如图357所示。 表3261位数值比较器的真值表 ABMGL 00010 01100 10001 11010 图3571位数值比较器的逻辑图 2. 多位数值比较器 如果比较两个多位二进制数,必须逐位比较,使用多位数值比较器。下面以4位数值比较器为例说明其工作原理。 设两个4位二进制数为A=A3A2A1A0,B=B3B2B1B0,因此4位数值比较器有8个数值输入信号。同样,A与B的比较有三种结果: 大于、等于、小于,对应的3个输出信号分别为YA>B、YA=B和YAB,则必须使A3>B3; 或者A3=B3且A2>B2; 或者A3=B3,A2=B2且A1>B1; 或者A3=B3,A2=B2,A1=B1且A0>B0。 设A,B的第i位(i=0,1,2,3)二进制数比较结果的大于、等于、小于用Li、Gi、Mi表示,则 YA>B=L3+G3L2+G3G2L1+G3G2G1L0(346) (2) 如果A=B,则必须使A3=B3,A2=B2,A1=B1且A0=B0,所以 YA=B=G3G2G1G0(347) (3) 如果AB·A=B=YA>B+YA=B (349) 由式(345)可得Li、Gi、Mi的表达式 Li=AiBi Gi=AiBi+AiBi=AiBi+AiBi Mi=AiBi(350) 根据式(346)、式(347)、式(349)和图357可以画出4位数值比较器的逻辑图,如图358所示。图中1位数值比较器是按照式(350)得出的,与图357相同。 图3584位数值比较器的逻辑图 集成4位数值比较器的典型电路是74LS85,其简易图形符号如图359所示。IA>B、IAB、IAB IA=BIABYA=BYAB3××××××100 A3B2×××××100 A3=B3A2B1××××100 A3=B3A2=B2A1B0×××100 A3=B3A2=B2A1=B1A0 Y <= "01111111"; when "001" => Y <= "10111111"; when "010" => Y <= "11011111"; when "011" => Y <= "11101111"; when "100" => Y <= "11110111"; when "101" => Y <= "11111011"; when "110" => Y <= "11111101"; when "111" => Y <= "11111110"; when others => null; end case; else Y <= "11111111"; end if; end process; end rtl; 对源代码进行仿真,仿真结果如图366所示。 图3663线8线译码器的仿真图 3. 4选1数据选择器的设计及仿真 设数据选择器的地址输入为a2、a1,数据输入为d3、d2、d1、d0,s为使能端,高电平有效,y为输出端。源代码为 library ieee; use ieee.std_logic_1164.all; entity my4s1 is port ( d0,d1,d2,d3,s,a1,a2: in std_logic; y: out std_logic); end my4s1; architecture Behavioral of my4s1 is signal a:std_logic_vector(1 downto 0); signal y1:std_logic; begin process(s,y1) begin if(s='1')then y<=y1; else y<='0'; end if; end process; a<=a2&a1; y1<=d0 when a="00" else d1 when a="01" else d2 when a="10" else d3; end Behavioral; 对源代码进行仿真,仿真结果如图367所示。 图3674选1数据选择器的仿真图 本章小结 本章介绍了组合逻辑电路的特点、分析和设计方法,组合逻辑电路的竞争冒险现象以及数字系统中常用组合逻辑电路的原理及应用。本章主要讲述了如下内容。 (1) 组合逻辑电路任何时刻的输出仅取决于该时刻的各种输入变量的状态组合,而与电路过去的状态无关。在电路结构上只包含门电路,没有存储(记忆)单元。 (2) 分析组合逻辑电路的目的是确定已知电路的逻辑功能,可通过写逻辑表达式、列真值表等手段来完成。对于表达式较简单的电路,可以直接通过表达式得知电路的逻辑功能; 对于表达式较复杂的电路,要借助于真值表来归纳电路的逻辑功能。 (3) 利用小规模集成电路(门电路)设计组合逻辑电路,常以电路简单、所用器件个数以及种类最少为设计原则。设计过程包括逻辑抽象、逻辑化简、逻辑变换、画出逻辑图。逻辑抽象的方法要视逻辑函数中逻辑变量的多少而定,对于具有较少逻辑变量的逻辑函数,采用列真值表来抽象逻辑表达式; 当变量数较多时,可采用列简化真值表的方法抽象逻辑表达式。 (4) 竞争冒险是组合逻辑电路工作状态转换过程中经常会出现的一种现象。如果负载是一些对尖峰脉冲不敏感(例如光电显示器)的器件,就不必考虑冒险问题。 (5) 常用组合逻辑电路有编码器、译码器、加法器、数据选择器和数据分配器、数值比较器等。为使用方便,它们常被做成中规模集成电路组件,利用这些组合逻辑电路可以实现组合逻辑函数。使用中规模集成器件可以大大简化组合逻辑电路的设计。 习题 1. 填空题 (1) 组合电路逻辑功能上的特点是,任意时刻的状态仅取决于该时刻的状态,而与以前时刻的无关。 (2) 组合逻辑电路的功能描述方法主要有、、、 等。 (3) 将文字描述的逻辑命题转换成逻辑表达式的过程称为。 (4) 不考虑来自低位的进位而将两个一位二进制数相加,称为; 不仅考虑两个一位二进制数相加,而且考虑来自低位进位的加法运算称为。 (5) 由于竞争而在输出端可能出现违背稳态下逻辑关系的尖峰脉冲现象叫作。 (6) 消除或减弱组合逻辑电路中的竞争冒险,常用的方法是发现并消掉互补变量,增加,并在输出端并联。 (7) 组合电路由门电路组成,不包含任何,没有能力。 (8) 常见的中规模组合逻辑器件有。 2. 选择题 (1) 组合逻辑电路是由组成的。 A. 触发器B. 门电路C. 二极管D. 场效应管 (2) 16选1路数据选择器的地址输入端有个。 A. 16B. 4C. 32D. 2 (3) 下列逻辑电路中不是组合电路的是。 A. 编码器B. 数据选择器C. 计数器D. 全加器 (4) 用四位数值比较器比较两个四位二进制数时,应先比较位。 A. 最低B. 次低C. 最高D. 次高 (5) 逻辑函数Y=C+AB+,当变量取值为时,将出现冒险现象。 A. B=C=1B. B=C=0C. A=1,C=0D. A=B=0 (6) 16位输入的二进制编码器,其输出端有位。 A. 256B. 128C. 4D. 3 (7) 可以用作数据分配器的是。 A. 编码器B. 译码器C. 数据选择器D. 数值比较器 (8) 将两片8线3线编码器进行级联,可以构成编码器。 A. 8线3线B. 16线4线C. 16线3线D. 8线4线 3. 分析图368所示的电路,写出逻辑函数表达式,列出真值表,指出电路完成的逻辑功能。 4. 分析图369所示的电路,写出Y1、Y2的逻辑函数表达式,列出真值表,指出电路完成的逻辑功能。 图368题3电路图 图369题4电路图 5. 已知图370所示电路的输入、输出都是8421码,写出输出逻辑函数表达式,列出真值表,指出电路完成的逻辑功能。 6. 已知逻辑电路如图371所示,试分析其逻辑功能。 图370题5电路图 图371题6电路图 7. 用“与非”门设计四变量的多数表决器。当输入变量A、B、C、D有3个或3个以上为1时输出为1,输入为其他状态时输出为0。 8. 某雷达站有3部雷达A、B和C,其中A和B功率消耗相等,C的消耗功率是A的两倍。这些雷达由两台发电机X,Y供电,发电机X的最大输出功率等于雷达A的功率消耗,发电机Y的最大输出功率是雷达A和C的功率消耗总和。要求设计一个组合逻辑电路,能够根据各雷达的启动、关闭信号,以最省电的方式开、停发电机。 9. 设计一个能被2或3整除的逻辑电路,其中被除数A、B、C、D是8421BCD编码。规定能整除时,输出为高电平,否则,输出为低电平。要求用最少的“与非”门实现。(设0能被任何数整除。) 10. 试用卡诺图法判断逻辑函数式 Y(A,B,C,D)=∑m(0,1,4,5,12,13,14,15) 是否存在竞争冒险?若有,则采用增加冗余项的方法消除。 11. 用一个8线3线优先编码器74LS148和一个3线8线译码器74LS138实现3位格雷码到3位二进制码的转换。 12. 图372是由双4选1数据选择器74LS153和门电路组成的组合电路。试分析输出Z与输入X3、X2、X1、X0之间的逻辑关系。 13. 图373所示是用两个4选1数据选择器组成的逻辑电路,试写出输出Z与输入M、N、P、Q之间的逻辑函数式。 图372题12电路图 图373题13电路图 14. 图374所示电路是3线8线译码器74LS138和8选1数据选择器74LS151组成的电路,试分析电路的逻辑功能。 图374题14电路图 15. 图375所示电路中,A3~A0、B3~B0是两个4位二进制数,M是控制信号。分析电路的逻辑功能。 16. 分析图376所示电路,写出输出函数Y的表达式,并指出电路的逻辑功能。 图375题15电路图 图376题16电路图 17. 图377电路中,74LS283是4位二进制加法器,74LS85是4位二进制数比较器,74LS47是显示驱动译码器。加法器的输入A3~A0 、B3~B0为8421码。分析电路,解答下列问题。 (1) 当加法器的输入最大时,求输出S3~S0。 (2) S3~S0为何种取值时,YA=B=1? (3) 数码管应为共阴极数码管还是共阳极数码管? (4) 数码管显示的十进制数范围是什么? (5) 该电路实现何种功能? 图377题17电路图 18. 电路如图378所示,A1B1、A0B0是两位二进制数。 (1) 分别写出P和H关于A0和B0的表达式和真值表,并指出由74LS153构成的电路的逻辑功能; (2) 分别写出M和N关于A1、B1和P的表达式和真值表,并指出由74LS138构成的电路的逻辑功能; (3) 指出整个电路的逻辑功能。 图378题18电路图 19. 设计一个8421码到余3码的转换电路。 (1) 写出真值表和表达式; (2) 用基本逻辑门实现; (3) 用加法器74LS283实现。 20. 分别用下列方法设计全加器和全减器。 (1) 用基本逻辑门; (2) 用半加器和门电路; (3) 用译码器74LS138,可以附加必要的门电路; (4) 用双4选1数据选择器74LS153,可以附加必要的门电路。 21. 设计一个火灾监测报警系统。当温度传感器、烟雾传感器和红外传感器这3个传感器中有两个或两个以上探测出超限信号时,系统才发出火灾报警信号。 (1) 写出真值表和表达式; (2) 用与非门实现,要求电路尽量简单; (3) 用74LS138译码器实现,可以附加必要的门电路; (4) 用8选1数据选择器74LS151实现。 22. 设计一个用4个开关控制一个灯的逻辑电路。当总控制开关S闭合时,改变A、B、C任何一个开关的状态都能控制灯由亮变灭或者由灭变亮。当总控制开关S断开时,灯始终处于熄灭状态。 (1) 写出真值表和表达式; (2) 用门电路实现,要求电路尽量简单; (3) 用74LS138译码器实现,可以附加必要的门电路; (4) 用8选1数据选择器74LS151实现,可以附加必要的门电路。