![Intel Quartus Prime数字系统设计权威指南:从数字逻辑、Verilog HDL 到复杂数字系统的实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/376/32607376/b_32607376.jpg)
2.1 组合逻辑电路
从第1章所给出的逻辑表达式的化简过程可以很清楚地知道下面的事实:不管数字系统的功能有多复杂,总可以用SOP或者POS表达式表示。
我们都知道人的大脑具有复杂的推理和记忆功能,其可以指挥人的四肢协调工作。人是在不断记忆新知识的过程中成长的。数字系统类似于人的大脑和四肢,即一个完整的数字系统应该包含推理部分、记忆部分和输出部分。在数字系统中,推理和输出部分称为组合逻辑电路,而记忆部分称为时序逻辑电路。
组合逻辑电路是一种逻辑电路,即它任一时刻的输出只与当前时刻输入的逻辑变量的取值有关。如图2.1所示,给出了组合逻辑电路的结构原理,其输入和输出可以用下面的关系描述:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_1.jpg?sign=1739297454-Hmxv8017y8fSmVYJCiiwM0Y3iTW7dKna-0-4a847dc95f7c79c32c69bdfb176702d0)
图2.1 组合逻辑电路的结构原理
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_2.jpg?sign=1739297454-Rt6bcRzIxZkuTUj70xheGog4Od9Zgfgw-0-8736b547f203fc1defc466f9ae66422b)
其中,x0,x1,…,xM-1为M个输入逻辑变量;y0,y1,…,yN-1为N个输出逻辑变量;f0(),f1(),…,fN-1()为M个输入逻辑变量和N个输出逻辑变量所对应的布尔逻辑表达式。
换句话说,如果我们可以通过测试仪器确定输入和输出逻辑变量的关系,就可以通过真值表描述它们之间的关系,然后通过化简卡诺图就可以得到f0(),f1(),…,fN-1()所表示的逻辑关系。
时序逻辑电路是一种特殊的逻辑电路,即它任何一个时刻的输出,不仅与当前时刻输入的逻辑变量的取值有关,而且还和前一时刻输出的逻辑变量有关,其具体原理将在2.2节中详细说明。
一般情况,组合逻辑电路包含编码器、译码器、码转换器、多路选择器、数字比较器、加法器、减法器、加法器/减法器和乘法器。
2.1.1 编码器
编码器用于对原始的数字信息进行变换。本节将以74LS148 8-3编码器为例,说明编码器的实现原理。图2.2给出了74LS148 8-3线编码器的符号描述,其中,EI(芯片第5个引脚)为选通输入端,低电平有效;EO(芯片第15引脚)为选通输出端,高电平有效;GS(芯片第14引脚)为组选择输出有效信号,用作片优先编码输出端。当EI有效,并且有优先编码输入时,该引脚输出为低。A0、A1、A2(芯片第9、第7和第6引脚)为编码输出端,低电平有效。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_3.jpg?sign=1739297454-dvYqiaTBHMxS9FXEuXOVJqlHCw10Kz1e-0-823a821d1cc8fdd3405d45b5ada28b5a)
图2.2 74LS148 8-3线编码器的符号描述
表1.12给出了编码器的逻辑关系,其中的×表示无关项。下面对该表的逻辑功能进行分析。
(1)当EI为低(有效)时,编码器才能正常工作(具有最高优先级)。
(2)74LS148 8-3线编码器输入端的优先级按7到0依次递减。当某一输入端为逻辑低电平,且比它优先级高的输入端均为逻辑高电平时,输出端才输出对应于该输入端的编码。例如,当引脚5为逻辑低电平,且引脚6和引脚7均为逻辑高电平时,此时输出编码为010(它是5的反码)。
对表2.1的真值表使用布尔代数进行化简,得到下面的逻辑表达式:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_4.jpg?sign=1739297454-eYe6OkGEvWzO0bUQaq7fgtoU8sGbP9Sm-0-d76e444115d70dea47394c5b9a4bced4)
表2.1 74LS148 8-3线编码器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_5.jpg?sign=1739297454-jEOHtbraypXj2Bb0lQk71rSwI4r7QaJA-0-a9cd7fd184df16640f82ad2e450419ef)
注:表中的×表示无关项。
图2.3给出了74LS148 8-3线编码器的内部结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_6.jpg?sign=1739297454-FUEf8eCLXQo4WT21gUtUvVCKGiRCI6sN-0-1a80794896e68cf1bcd6bb989b5b7e17)
图2.3 74LS148 8-3线编码器的内部结构
2.1.2 译码器
在数字电路中,译码器用于将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反,如3-8译码器、七段码译码器。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_7.jpg?sign=1739297454-dl6LjQsydJ0rkk6BxzLdvZ9wqFjrGg19-0-7422d95f5c26b91c7f4b4e9e59ff7697)
图2.4 74LS138 3-8译码器的符号描述
1.3-8译码器的实现原理
本部分将介绍74LS138 3-8译码器的实现原理。图2.4给出了74LS138 3-8译码器的符号描述,表2.2给出了该译码器的逻辑关系。编码从C、B、A引脚输入,引脚Y7~Y0用来表示输入编码的组合。
表2.2 74LS138 3-8译码器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_8.jpg?sign=1739297454-wfHseIBmgJom4WWX4QZRlNuuEjZq8Tle-0-21b5668c13553cca71a313643e007031)
注
图2.4中的和
表示逻辑低电平有效,在真值表中仍使用原变量表示。
在任意一个时刻,引脚Y7~Y0中只有一个引脚输出逻辑低电平,其余引脚的输出均为逻辑高电平。从表2.2可知,74LS138 3-8译码器正常工作的前提条件是同时有效。
根据表2.2中给出的74LS138 3-8译码器的真值表,通过化简,得到输出Y0~Y7的逻辑表达式为
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_13.jpg?sign=1739297454-cl4VtA35RvY1RzV0bCgnYCaJy50P5EGg-0-316095a0fc244a74c810663115dd2ffb)
图2.5给出了74LS138 3-8译码器的内部结构,其测试电路如图2.6所示。
注
读者可进入本书配套提供例子的\eda_example\74ls138_test_circuit.ms14路径下,用Multisim 14工具打开该设计,并执行交互(Interactive Simulation)仿真,观察仿真结果。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_14.jpg?sign=1739297454-wGH0bLWGVaBiuioZZXcAMYDThDOVicVX-0-efab3df22b8eb3d283f6f1d271861b72)
图2.5 74LS138 3-8译码器的内部结构
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_15.jpg?sign=1739297454-NImIPJRxglwM042g37EhZrGPOHCva5MV-0-867c8894d25990228606576eb54c54f6)
图2.6 74LS138 3-8译码器的测试电路
2.七段码译码器的实现原理
图2.7给出了共阴极七段数码管的内部结构。从图中可知,七段数码管中的每一段分别用字母a~g标识,七段中每一段的排列顺序和图中给出的顺序一致。从图中也可知,七段数码管中的每一段实际上就是一个发光二极管。对于图2.7给出的七段数码管来说,当把每一段发光二极管的阴极连接在一起时,将七段数码管称为共阴极七段数码管。因很明显,当有电流流过发光二极管时,其所对应的段就会发光。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_16.jpg?sign=1739297454-WM1UpPeobM9uRJtjU7FIkHds4ORIkxMY-0-529cf95c9bf305a522e158c2df62efba)
图2.7 共阴极七段数码管的内部结构
(1)当VCA-V公共端<Vth时,a段所含的发光二极管处于灭状态。否则,a段所含的发光二极管处于亮状态。
(2)当VCB-V公共端<Vth时,b段所含的发光二极管处于灭状态。否则,b段所含的发光二极管处于亮状态。
(3)当VCC-V公共端<Vth时,c段所含的发光二极管处于灭状态。否则,c段所含的发光二极管处于亮状态。
(4)当VCD-V公共端<Vth时,d段所含的发光二极管处于灭状态。否则,d段所含的发光二极管处于亮状态。
(5)当VCE-V公共端<Vth时,e段所含的发光二极管处于灭状态。否则,e段所含的发光二极管处于亮状态。
(6)当VCF-V公共端<Vth时,f段所含的发光二极管处于灭状态。否则,f段所含的发光二极管处于亮状态。
(7)当VCG-V公共端<Vth时,g段所含的发光二极管处于灭状态。否则,g段所含的发光二极管处于亮状态。
注
(1)CA、CB、CC、CD、CE、CF和CG分别对应每段中发光二极管的阳极。
(2)Vth为发光二极管的门限电压。
(3)公共端是指共阴极。
控制七段数码管显示不同的数字和字母时,只要给相应段所含的发光二极管的阳极施加逻辑高电平即可。下面将设计二进制码到七段码转换的逻辑电路,该逻辑电路将二进制数所对应的十六进制数(0~9和A~F)显示在七段数码管上,表2.3给出了二进制码转换为七段码的逻辑关系。
表2.3 二进制码转换为七段码转换的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_17.jpg?sign=1739297454-xRoWdxqFENm3LL0zn71k663BvfKVxym4-0-ebcf12e9d8f90f226a7d5e9f8471a164)
根据该表2.3描述的逻辑关系,使用图2.8所示的卡诺图表示七段码和二进制码之间的对应关系,并进行化简。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_18.jpg?sign=1739297454-opKRyOwKrUDqfWdUGmZgzjaICCEfGgXn-0-d18c6599073cc37fa736b361dc712426)
图2.8 二进制码到七段码转换的卡诺图化简过程
使用卡诺图化简后,得到a,b,c,d,e,f,g和x3,x2,x1,x0对应关系的逻辑表达式为
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_19.jpg?sign=1739297454-dqi27Gr5c1XIMD1V7QkOVdJaaiyX1yFx-0-54a8e4cd9031e0a21d6465bf22f395a8)
2.1.3 码转换器
本小节将学习码转换器的实现方法。例如,格雷码转换器和二进制数到BCD码转换器。
1.格雷码转换器的实现原理
格雷码(Gray)的编码特点是在相邻的两个编码中,只有一个二进制位不同。表2.4给出了二进制码和格雷码的对应关系。
表2.4 二进制码和格雷码的对应关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_20.jpg?sign=1739297454-BoKbxy0UqmgYpBKbzyJqHcQDYKU2mEOW-0-f48aebfc9d279e9fc8bd6e8f9b21065f)
对上面的真值表进行化简,得到二进制码到格雷码转换的逻辑表达式:
gi=xi+1⊕xi
2.二进制数到BCD码转换器的实现原理
表2.5给出了二进制数与二进制编码的十进制数对应的逻辑关系。从表中可知,实际上就是将十六进制数转换为所对应的十进制数,如十六进制数F对应于十进制数15。图2.9给出了二进制数与二进制编码的十进制数的卡诺图及化简过程。
表2.5 二进制数与二进制编码的十进制数对应的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_21.jpg?sign=1739297454-vCYhEMlr71RYRqXFm1ObYp2WqPI6WUod-0-186faf8686333414c8762ab6c6769175)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_22.jpg?sign=1739297454-Me0RzWfWRBXb7PjKIKbwL7BYMN2zjV14-0-ed091c0f1386e2a788c0ccdc0f517d8b)
图2.9 二进制数与二进制编码的十进制数的卡诺图及化简过程
使用卡诺图化简后,得到对应的逻辑表达式为
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_23.jpg?sign=1739297454-IdJsv76IUIReF3t2xQIXOAjXtcmtnLIp-0-bb5e78985873ae9d3ac3a9096e0619be)
下面将设计一个二进制数转换为BCD码并在七段数码管上显示的电路,如图2.10所示。该电路由两个子电路构成,其中一个是二进制到二进制编码的十进制数的转换电路,另一个是BCD码到七段数码管的驱动电路。在该电路中,二进制到二进制编码的十进制数的转换电路是根据前面给出的逻辑表达式,通过基本门电路构建而成的。而BCD码到七段码的转换电路通过使用两片74LS48芯片实现。
注
读者可进入本书配套提供例子的\eda_example\bin_bcd_seg7.ms14路径下,用Multisim 14工具打开该设计,并执行交互(Interactive Simulation)仿真,观察仿真结果。
思考与练习2-1:请读者分析图2.10所示电路的工作原理(提示:在分析该电路时,请参考TI公司给出的74LS48数据手册理解74LS48芯片的工作原理)。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_24.jpg?sign=1739297454-5LX738Uwr36ZX1IUxfoyZsF1YU0MlXdC-0-8b9dd5a453ffb423679fa69723138ad2)
图2.10 将二进制数以二进制编码的十进制数形式显示在七段数码管的电路
2.1.4 多路选择器
在数字逻辑中,多路选择器也称为多路复用器,它从多个逻辑输入信号中选择其中一个逻辑输入信号。
1.2-1多路选择器的实现原理
图2.11给出了2-1多路选择器的符号描述。表2.6给出了2-1多路选择器的逻辑关系。使用图2.12所示的卡诺图对表2.6给出的逻辑关系进行化简,得到2-1多路选择器的最简逻辑表达式为
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_25.jpg?sign=1739297454-674KlPr6TeKe1Q1ilzmVaCIIKRDNQlFP-0-8beac160941ad993c7737a873932cd28)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_26.jpg?sign=1739297454-tP8lTePRraGgoqNNyDToJs8hw9IYAva6-0-38b96be0aa4a31fae9123ba8e83aae02)
图2.11 2-1多路选择器的符号描述
表2.6 2-1多路选择器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_27.jpg?sign=1739297454-H2I7ILE7eAq3Ap0zmNbvxOa2Hf3BjvsF-0-cad4e93dac0bc8e08208f9c59590bf7f)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_28.jpg?sign=1739297454-VgvqjUSMY2EQhHfNrsQVINY94dzO731f-0-af366e0fced51a76cbc7a55be4882252)
图2.12 多路选择器的卡诺图表示
2.4-1多路选择器的实现原理
通过级联3个2-1多路选择器实现4-1多路选择器,图2.13给出了4-1多路选择器的符号描述。表2.7给出了4-1多路选择器的逻辑关系。图2.14给出了级联2-1多路选择器实现4-1多路选择器的内部结构。通过2-1多路选择器的逻辑表达式得到4-1多路选择器的最简逻辑表达式为
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_29.jpg?sign=1739297454-kThCKCaIqd68MWzPwlSJMtcvCRGsnYdw-0-c5ee70aa563f5e116ee112ba0872acb2)
图2.13 4-1多路选择器的符号描述
表2.7 4-1多路选择器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_30.jpg?sign=1739297454-Dnx53hmUw6CSJz8qCrx2LQaFSL2AG0Dy-0-6765b16f7eb6ff02f38d36c46f3517a8)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_31.jpg?sign=1739297454-xb4U4KK6AeypHl4VwkY2ouSHoUninwvJ-0-f29addfd5bbc6e4f7928089021dc1e37)
图2.14 4-1多路选择器的级联实现
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_32.jpg?sign=1739297454-VuLZEX6DSqkdhXVJABij7pZqiCngXIEW-0-252737d23e50c22665c349aa20cabc43)
得到:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_33.jpg?sign=1739297454-mdDQgRKimELNtdlLQe9GtFFJHNAuUSeB-0-bcde97bb14d871f67aa8aadada530c0e)
3.多路选择器的集成电路
在74LS系列的集成电路中,提供了多路选择器专用集成电路芯片,如表2.8所示。
表2.8 多路选择器专用集成电路芯片
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_34.jpg?sign=1739297454-qrwO52jRMXENvWavtM483kMebUEo2kSo-0-addbf56dfc090dfaf584d033b3346017)
2.1.5 数字比较器
本小节将主要介绍多位数字比较器的设计及实现方法。多位数字比较器可通过两步实现:
(1)实现一位数字比较器;
(2)级联一位数字比较器,实现多位数字比较器。
1.一位比较器的实现原理
图2.15给出了一位比较器的符号描述,比较器的功能满足下面的条件。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_35.jpg?sign=1739297454-UuU6hu64dkgGSRYT8DJCwGb5bNIYpNYP-0-586b56172f02afc0e320158f2ef8b6ea)
图2.15 一位比较器的符号描述
(1)如果x>y,或者x=y且Gin=1,则Gout=1。
(2)如果x=y且Gin=0,Lin=0,则Eout=1。
(3)如果x<y,或者x=y且Lin=1,则Lout=1。
根据上面的3个条件,得到一位比较器的逻辑关系如表2.9所示。使用卡诺图对表2.9给出的逻辑关系进行化简,如图2.16所示,得到最简的逻辑表达式:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_36.jpg?sign=1739297454-sHFNVvY2Q6ISzLEs5Vi7obOOTzELDZfL-0-203837e2235e4e10983c6ad076f55d4b)
2.多位比较器的实现原理
多位比较器可由一位比较器级联得到,图2.17给出了使用4个一位比较器级联得到1个四位比较器的实现结构。
表2.9 一位比较器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_37.jpg?sign=1739297454-oKp6RGZi4q8KDaYHfn4VctkcXtOjLbtf-0-c3fa5dc05e1f1caa155bdb61802ee471)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_38.jpg?sign=1739297454-nGDbY37klNaLIJfpsOeofCc9Fa2Ku4ud-0-824bfa9cc969b23e56c3cef72b7aa549)
图2.16 一位比较器的卡诺图表示
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_39.jpg?sign=1739297454-zCLbaY92S61VXYG0xpIAQqOuWibOprgF-0-b8d1833ea3d41181d46e7e02d93c87be)
图2.17 四位比较器的实现
此外,74LS85是一个专用的四位比较器芯片,图2.18给出了其符号描述,表2.10给出了该比较器的逻辑关系。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_40.jpg?sign=1739297454-mJlxGPFuN5SrA3NmVHUmQPEatQOrglny-0-12054660b83ea06fdd3834d69c25645d)
图2.18 74LS85的符号描述
表2.10 74LS85的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_41.jpg?sign=1739297454-mS3m1xMvRdbghKV7uZjdMmeVFs09M8Wa-0-16803018ef5e93c3f7325d1a27939933)
下面使用多路选择器(4位)和数字比较器(4位)实现下面的算法,即
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_42.jpg?sign=1739297454-DVcGDuhNSCSTMMNYHiT9uf4hYVvPsxUm-0-a62658913a2856459ff70fb9df762210)
如图2.19所示,给出了构建的电路,在该电路中使用74LS85N实现两个四位二进制数的比较,然后将数字比较器的输出引脚OAGTB取反后连接到四位多路选择器74LS157N的~A/B输入端。
注
读者可进入本书配套提供例子的\eda_example\compare_select.ms14路径下,用Multisim 14工具打开该设计,并执行交互(Interactive Simulation)仿真,观察仿真结果。
思考与练习2-2:请读者分析图2.19所示电路的工作原理(提示:在分析该电路时,请参考TI公司给出的74LS85N和74LS157N数据手册,理解这两个集成电路芯片的工作原理)。
思考与练习2-3:比较软件实现算法和硬件实现算法的区别,说明硬件实现算法的优势。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_43.jpg?sign=1739297454-rz9D6U6yfZL8Bmdb52MBewA4YdoGe32m-0-dcd9871a7219d821ef53e7add95f25b9)
图2.19 使用数字比较器和多路选择器实现比较与选择运算
2.1.6 加法器
在数字逻辑中,加法器是一种用于执行加法运算的功能部件,是构成计算机中微处理器内算术逻辑单元的基础。在微处理器中,加法器主要负责计算地址和索引等数据。此外,加法器也是其他一些硬件(如二进制数乘法器)的重要组成部分。
1.一位半加器的实现原理
表2.11给出了半加器的逻辑关系,根据该逻辑关系可以得到半加器的最简逻辑表达式:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_44.jpg?sign=1739297454-wDav7keSEe8fMdXthTKm3pkCwIYcPuy1-0-d1e373c9ae65a9099052f5d25ee73fc6)
根据最简逻辑表达式,可以得到图2.20所示的半加器的内部结构。
表2.11 半加器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_45.jpg?sign=1739297454-Z67v1D2YnqdznHjpxZ4SsXwXwU3hmzOm-0-e5de348fb903e895795bd5e9d6976aaa)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_46.jpg?sign=1739297454-q6Lbghays3BUWGyXphrY1xriqUp75pY7-0-74214164c0635920ba8cbf69be1c5ddc)
图2.20 半加器的内部结构
2.一位全加器的实现原理
如表2.12给出了一位全加器的逻辑关系。使用图2.21所示的卡诺图对逻辑关系进行化简,可以得到全加器的最简逻辑表达式:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_47.jpg?sign=1739297454-VEwRoCOn8Fuir6GHe3vCXij3qVxNpq61-0-5f0c45cfe9395b66a0dd934a49bbbeb3)
表2.12 一位全加器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_48.jpg?sign=1739297454-i26JEC3NYjMF63EctRndJZ4PxbEcEaAT-0-cafddde756461489698e71fa970ae793)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_49.jpg?sign=1739297454-4WlDtbOHS8bInwIVTumdhqmA4EKEztqe-0-f088724051fc79cfbe7f6bc892268089)
图2.21 一位全加器的卡诺图化简
根据最简逻辑表达式,可以得到图2.22所示的一位全加器的内部结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_50.jpg?sign=1739297454-Atflu2u8KW3ynAwbV8tRRcsSAvOmk887-0-6ff1749370743761081688b6587a5546)
图2.22 一位全加器的内部结构
对图2.22给出的一位全加器的内部结构进行修改后,可以得到如图2.23所示的一位全加器的内部结构。从图中可知,一位全加器实际上是由两个一位半加器加上一个或逻辑门构成。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_51.jpg?sign=1739297454-QMyI36fDiVgQf6RYDq292lM2lvKdroKI-0-26cb40bf2efe5a1f49565f2b64984ec5)
图2.23 由半加器构成的一位全加器的内部结构
3.多位全加器的实现原理
1)串行进位加法器
多位全加器可以由一位全加器级联而成。图2.24给出了将一位全加器级联生成四位全加器的结构,前一级全加器的进位将作为下一级全加器进位的输入。很明显,串行进位加法器需要一级一级地进位,因此有很大的进位延迟。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_52.jpg?sign=1739297454-jW9C9gORXY7yLliIvkLbMuLJF7fKDkaH-0-9b7e9de509ec8f6e3ffb59b3eb60bb63)
图2.24 四位全加器的结构(串行进位)
2)超前进位加法器
为了缩短多位二进制数加法计算所需的时间,出现了一种比串行进位加法器速度更快的加法器,这种加法器称为超前进位加法器。
假设二进制加法器的第i位输入为ai和bi,输出为si,进位输入为ci,进位输出为ci+1。则有:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_53.jpg?sign=1739297454-tELQP7i4FWLs9JM4NgVIXt8eYQv1vtIU-0-3983b5f6fff787f932bfcd52c8ac038d)
令gi=ai·bi,pi=ai+bi,则:
ci+1=gi+pi·ci
(1)当ai和bi均为1时,gi=1,产生进位ci+1=1;
(2)当ai或bi为1时,pi=1,传递进位ci+1=ci。
因此,gi定义为进位产生信号,pi定义为进位传递信号。gi的优先级高于pi,也就是说,当gi=1时,必然存在pi=1,不管ci为多少,必然存在进位。当gi=0,而pi=1时,进位输出为ci,跟ci之前的逻辑有关。
下面以四位超前进位加法器为例,假设四位被加数和加数分别为a和b,进位输入为cin,进位输出为cout,对于第i位产生的进位,gi=ai·bi,pi=ai+bi(i=0,1,2,3):
c0=cin
c1=g0+p0·c0
c2=g1+p1·c1=g1+p1·(g0+p0·c0)=g1+p1·g0+p1·p0·c0
c3=g2+p2·c2=g2+p2·g1+p2·p1·g0+p2·p1·p0·c0
c4=g3+p3·c3=g3+p3·g2+p3·p2·g1+p3·p2·p1·g0+p3·p2·p1·p0·c0
cout=c4
由此可知,各级的进位彼此独立,只与输入数据和cin有关,因此消除了各级之间进位级联的依赖性。因此,显著降低了串行进位产生的延迟。
每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。
同时,可以得到第i位的和为
si=ai⊕bi⊕ci=gi⊕pi⊕ci
图2.25给出了四位超前进位加法器的结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_54.jpg?sign=1739297454-3L1e6uEKeY8IE1C0sFcsMwRFc9Yua15U-0-2a700b6d382b57450b562fbd1c68fa5e)
图2.25 四位超前进位加法器的结构
如图2.26所示,给出了74LS283超前进位加法器的符号,图2.27给出了该超前进位加法器的内部结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_55.jpg?sign=1739297454-XLvETukeAfh60Uoe7zy6CSOSfrOM4eZU-0-895a2d61d3df1850a774e732b419f665)
图2.26 74LS283超前进位加法器的符号
2.1.7 减法器
减法器类似加法器的设计方法,可以通过真值表实现。一旦设计了一位减法器电路,就可以将其复制N次,创建一个N位的减法器。
1.一位半减器的实现原理
表2.13给出了半减器的逻辑关系,根据逻辑关系可以得到半减器的最简逻辑表达式:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_56.jpg?sign=1739297454-bgPoHego6qmfZ9RdwcuzEh3U7jWIEZBn-0-57b7bd27dd970ce2742f7680f106f241)
图2.27 74LS283超前进位加法器的内部结构
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_57.jpg?sign=1739297454-hroTNPVJ3EkAS1DnZbm5nMR9wKr5mgHV-0-16df3e35ec67fef4dab0875316f179ca)
根据最简逻辑表达式,可以得到如图2.28所示的半减器的内部结构。
表2.13 半减器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_58.jpg?sign=1739297454-auNo9LdFLxxPypj43b34HIixQ3WL8VUa-0-6018af15ff18d916be7662801e7dc1f5)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_59.jpg?sign=1739297454-U4RUcLgX3T5D6iV40ih6tOGHTkzBlYRn-0-d2b8bb512209e74700e3063a30c38514)
图2.28 半减器的内部结构
2.一位全减器的实现原理
表2.14给出了一位全减器的逻辑关系。使用图2.29所示的卡诺图映射,可以得到全减器的最简逻辑表达式:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_60.jpg?sign=1739297454-WAGXRLImDqEVie7IyylkyJC6DdBLAdrV-0-e19ff0734665f3af9e4ab8541bf5e8ff)
表2.14 一位全减器的逻辑关系
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_61.jpg?sign=1739297454-xSyHxggr5h8JEVSIlWHXEu8AmPX02Iw4-0-08957525bc7ddecce5ed127794bac135)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_62.jpg?sign=1739297454-p8hyUcaQoCZulyVVkNP1U7WZINeksTLx-0-8d2d8d395ef6e4fcec5850a30116c6f4)
图2.29 卡诺图映射
根据最简逻辑表达式,可以得到如图2.30所示的全减器的内部结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_63.jpg?sign=1739297454-8Obem7EPNXjA1al40yHMAcJ7XRy0PUko-0-863ccffc216043392ce941b30b85202c)
图2.30 全减器的内部结构
3.负数的表示
对于一个减法运算,如5-3,我们可以重写成5+(-3)。这样,减法运算就变成了加法运算。但是,正数变了负数。因此,在数字电路中必须有表示负数的方法。
数字系统中由固定数目的信号来表示二进制数。较小的简单系统可能使用8位总线(多位二进制信号线的集合),而较大的系统可能使用16位、32位、64位的总线。不管使用多少位,是信号线、存储器和处理器所表示的与操作的数字数据的位数都是有限的。可用的位数决定了在一个给定的系统中可以表示数值的个数。在数字电路中,用于执行算术功能的部件经常需要处理负数。所以,必须要定义一种表示负数的方法。一个N位的系统总共可以表示2N个数,使用2N/2个二进制数表示十进制的非负整数(包括正整数和0),剩下的2N/2个二进制数表示十进制的负整数。可以用一个比特位作为符号位,用于区分正数和负数。如果符号位为1,则所表示的数为负数;否则,所表示的数为正数。在一个有限位宽的数据中,最高有效位(Most Significant Bit,MSB)可以作为符号位,如果该位为0,表示是一个正数。在配置数的幅度时,可以将其忽略。
在所有可能的负数二进制编码方案中,经常使用两种方法,即符号幅度表示法和二进制补码表示法。符号幅度表示法就是用MSB表示符号位,剩下的位表示幅度。在一个使用符号幅度表示法的8位系统中,(16)10用二进制表示为“00010000”,而(-16)10用二进制表示为“10010000”,这种表示方法很容易理解。但是,用于数字电路的最不利的方面表现在,如果0到2N(此处N=8)的计数范围从最小变化到最大,则最大的正整数将出现在所表示范围近一半的地方,然后紧接着出现负零和最大的负整数,而且最小的负整数出现在可表示范围的末尾,更多的计数将出现“回卷”,即从二进制数的11111111变成00000000,这是由于数据位宽的限制(只有8位),因而不能表示第2N+1个数。因此,在计数范围内,2N-1后面跟着0,这样最小的负整数就立即调整到最小的正整数。由于这个原因,一个减法操作“2-3”,将不会产生所希望的计算结果“-1”,它是系统中最大的负整数。一个更好的表示方法应该是将最小的正整数和最大的负整数放在相邻的位置。因此,引入了二进制补码的概念,图2.31(a)给出了位宽为8位系统的符号幅度表示法,图2.31(b)给出了位宽为8位系统的二进制补码表示法。
在二进制补码编码中,MSB仍是符号位,当MSB取值为1时,表示负数;当MSB取值为0时,表示正数。在使用二进制补码表示法的N位系统中,十进制数0由一个位宽为N的全零二进制数表示,其余的2N-1个二进制数表示非零的正整数和负整数。由于2N-1为奇数,因此[(2N-1)/2]个二进制数用于表示十进制的负整数,[(2N-1)/2]个二进制数用于表示十进制的正整数。换句话说,可以表示的十进制负整数比正整数的个数多一个。最大负整数的幅度要比最大正整数的幅度多一。
采用二进制补码表示法表示有符号数(包括正数和负数)的不利地方是,不容易理解负数。在实际中,可使用一个简单的方法将一个正整数转换为一个具有同样幅度的负整数。负整数二进制补码算法的描述是:将该负整数所对应的正整数按位全部取反(包括符号位),然后将取反后的结果加1。
例如,+17转换为-17的二进制补码计算公式:
(1)+17对应的原码为00010001;
(2)将所有位按位取反,得到11101110;
(3)将取反后的结果加1,得到-17的补码为11101111。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_64.jpg?sign=1739297454-bg8ZQ1EhVfdkAhiH8HGDNmwoQhiyu57k-0-e12ff84c8ca0d4c3850af6dd0d60aefb)
图2.31 位宽为8位的有符号数表示法
例如,-35转换为+35的二进制补码计算公式:
(1)-35对应的补码为11011101;
(2)将所有位按位取反,得到00100010;
(3)将取反后的结果加1,得到+35的补码为00100011。
例如,-127转换为+127的二进制补码计算公式:
(1)-127对应的补码为10000001;
(2)将所有位按位取反,得到01111110;
(3)将取反后的结果加1,得到+127的补码为01111111。
例如,+1转换为-1的二进制补码计算公式:
(1)+1对应的原码为00000001;
(2)将所有位按位取反,得到11111110;
(3)将取反后的结果加1,得到-1的补码为11111111。
前面介绍了使用比较法实现十进制正整数转换为二进制正整数的方法。类似地,下面介绍使用比较法实现十进制有符号数转换成二进制有符号数补码的方法。
1)有符号整数的二进制补码
以十进制有符号负整数-97转换为所对应的二进制补码为例,在该例子中,假设使用8位宽度表示所对应的二进制补码,如表2.15所示。表中:
表2.15 十进制有符号负整数的二进制补码比较法实现过程
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_65.jpg?sign=1739297454-9SHMy5OwLpXeg1bloeuxmMorUmoAwX4w-0-46fa0e60672a768b466f479358e0c61d)
(1)得到需要转换负数的最小权值,该权值为负数,以-2i表示(i为所对应符号位的位置),使其满足:
-2i≤需要转换的负数
并且,-2i与所要转换的负整数有最小的距离,保证绝对差值最小。
(2)取比该权值绝对值2i小的权值,以2i-1,2i-2,…,20的幂次方表示。
比较过程描述如下:
(1)需要转换的负数+2i,得到了正整数,该正整数作为下一次需要转换的数。
(2)后面的比较过程与前面介绍的正整数的转换方法一致。
根据表2.15给出的转换过程,负整数-97所对应的二进制补码为10011111。
2)有符号纯小数的二进制补码
对于有符号十进制纯小数的二进制补码而言,方法与前面介绍十进制有符号负整数补码中所使用的方法类似。以十进制有符号纯小数-0.03125转换为所对应的二进制补码为例。在该例子中,假设使用8位宽度表示二进制补码,如表2.16所示。
表2.16 十进制有符号纯小数的二进制补码表示
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_66.jpg?sign=1739297454-oNxGnV5l0ELJZUcRNi1uk0UCJXP7MP5r-0-637a52b4e78e2a5cfeb7334b788843f1)
(1)得到需要转换复数的最小权值,以-20(-1)表示。
(2)取比权值20小的权值,以2-1,2-2,…,2-N的幂次方表示。
比较过程描述如下:
(1)将需要转换的有符号纯小数加1,得到纯正小数,然后以该正小数为比较基准。
(2)后面的比较过程与前面介绍的正小数的转换方法一致。
根据表2.16给出的转换过程,十进制有符号纯小数-0.03125所对应的二进制补码为1.1111100。
2.1.8 加法器/减法器
比较前面给出的一位半加器和一位半减器的结构,二者的差别只存在于:
(1)当结构为半加器时,原变量a参与半加器内的逻辑运算;
(2)当结构为半减器时,原变量a取非后得到参与半减器内的逻辑运算。
1.一位加法器/减法器的实现原理
假设使用一个逻辑变量E来选择实现半加器还是半减器功能,规定当E=0时,实现半加器功能;当E=1时,实现半减器功能。因此,二者之间的差别可以用下面的逻辑关系式表示:
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_68.jpg?sign=1739297454-N5OgaikwdixyFunETMiPsqcNimUvOkSV-0-d5a25478fecf92240c46815d8ab31a9b)
这样,半加器和半减器就可以使用一个逻辑结构实现。图2.32给出了半加器和半减器的统一结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_69.jpg?sign=1739297454-gQPOfRGaqDSNxhInqyOOJuE3lz0ifvFa-0-4d16a32e7b94763fb54a1cdc71e8b78c)
图2.32 半加器和半减器的统一结构
图2.32中,SD0为半加器/半减器的和/差结果,CB1为半加器/半减器的进位/借位。
也可以采用另一种结构实四位加法器/减法器结构。将表2.12所示的全加器的真值表重新写成表2.17所示的形式,并与表2.18所示的全减器的真值表进行比较。可以很直观地看到全减器和全加器的ci和ci+1互补,bi也互补。如图2.33所示,可以得到这样的结果,即如果对ci和bi进行求补,则全加器可以用作全减器。
表2.17 重排的全加器的真值表
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_70.jpg?sign=1739297454-0dqe780fMvpIXYsODs0n99G4vgse59ui-0-635fa02fc244f21cc9ac666c9a273807)
表2.18 全减器的真值表
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_71.jpg?sign=1739297454-m05Klj1aCKWhMey3J1V7lvP5MUSwdybb-0-3187a398718909b644ece4fdbbdf55e5)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_72.jpg?sign=1739297454-TUpRILZFUwhcLN5StqiaLkV8J98i8Sdk-0-1e44ab68fde023b342c3b18d0af16ee8)
图2.33 全加器用作全减器
2.多位加法器/减法器的实现原理
下面介绍多位加法器/减法器的实现原理。如果将图2.33给出的结构级联,则可以生成一个4位的减法器。但是,这将取消进位输出和下一个进位输入的取补运算,这是因为最终的结果只需要对最初的_进位输入c0取补。对于加法器来说,c0为0;而对于减法器来说,c0为1。这就等效于a和的和加1,这其实就是补码的运算。这样,使用加法器进行相减运算,只需要使用减数的补码,然后相加。图2.34给出了使用全加器实现多位加法和减法运算的结构。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_74.jpg?sign=1739297454-yNdukTQ2dzpg5y6n96RgIJf1W8qRzKQ6-0-5e29188730fa1f0d98df0f842a151dd8)
图2.34 使用全加器实现加法和减法运算的结构
注
当用作减法时(E=1),则输出进位c4是输出借位的补码。
2.1.9 乘法器
二进制乘法器是数字电路中的一个重要功能部件,它可以对两个二进制数实现相乘运算,本质上乘法器由更基本的加法器构成。
可以使用很多方法来实现二进制乘法器。大多数方法为对部分积计算,然后将部分积相加起来。这一过程与多位十进制数乘法的过程类似,但在这里根据二进制的情况进行了修改。
图2.35给出了一个4×4二进制乘法的具体实现过程,并对这个例子进行扩展,给出了形式化的一般结构。通过对这个结构进行进一步的分析,可知乘法运算的本质实际上是部分乘积移位求和的过程。图2.36(a)给出了A×B得到部分积的具体实现过程,图2.36(b)给出了部分积相加的具体实现过程。
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_75.jpg?sign=1739297454-x0vrjIJW5pMpaFV1ERpjKioXcpsxtDnN-0-5abd36ef5c01404a174970fbdc221290)
图2.35 4×4二进制乘法的具体实现过程
思考与练习2-4:完成下面有符号数的转换。
(1)(-19)10=( )2
(2)(10011010)2=( )10
(3)(10000000)2=( )10
(4)(-101)10=( )2
思考与练习2-5:使用二进制补码的运算规则完成下面两个十进制有符号数的计算,使用二进制数表示计算结果,并对运算结果进行判断。
(1)17-11=( )2
(2)-22+6=( )2
(3)35-42=( )2
(4)19-(-7)=( )2
思考与练习2-6:算术逻辑单元(ALU)是计算机中央处理器(CPU)的重要功能部件。请用门电路设计一个组合逻辑电路,实现表2.19所示的8位算术逻辑(ALU)功能。
表2.19 ALU功能描述
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_76.jpg?sign=1739297454-Q6BMUwTXzD2RfMWlmGx2WKPgqSlQZYbB-0-ee0fcfbc59b0557a29fee356ecf6553a)
![img](https://epubservercos.yuewen.com/81DBB1/17579479606609006/epubprivate/OEBPS/Images/txt002_77.jpg?sign=1739297454-A1M4dSD0sEzARN5Z0TekVJpNCl6zZglm-0-24e184ceae126aae0168d1d522fd7b33)
图2.36 A×B的具体实现过程