《逻辑与计算机设计基础(原书第5版)》——3.9 二进制加法器

简介: 本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第3章,第3.9节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.9 二进制加法器

一个算术电路就是一个组合电路,它对二进制数或用二进制编码表示的十进制数执行加、减、乘、除运算。我们将采用层次、迭代的设计方法实现算术电路。首先从最底层开始,设计一个电路实现两个一位二进制数相加。这个简单的加法包含4个可能的基本操作:0+0=0,0+1=1,1+0=1,1+1=10。前三个运算产生的和只需要一位表示,但是当加数和被加数都等于1的时候,和就需要两位表示。正因为如此,运算的结果需要两位表示:进位与和。由两位加法产生的进位将加到下一个高位的有效位中。实现两位相加的组合电路称为半加器(half adder)。实现三个位(两个有效位和一个先前位产生的进位)相加的电路称为全加器(full adder)。两个半加器可以用来实现一个全加器,半加器和全加器的命名就是基于这个原因。在算术电路设计中,半加器和全加器是基本的算术模块。
3.9.1 半加器
半加器是一个产生两位二进制数的和的算术电路,这个电路有两个输入和两个输出。输入变量是加数和被加数,输出变量是产生的和与进位。用X和Y表示两个输入,用S(和)和C(进位)表示输出。半加器的真值表如表3-11所示。输出C只有当两个输入都为1时才为1,输出S表示和的最低有效位。从真值表可以很容易得到两个输出的布尔表达式:
S=XY+XY=XY
C=XY
如图3-40所示,半加器可以用一个异或门和一个与门来实现。
image

3.9.2 全加器
全加器是实现三位数相加的组合逻辑电路。除了三个输入,全加器还有两个输出。输入变量中的两个用X和Y表示,代表相加的两个有效位,第三个输入Z表示来自前一个低位产生的进位。两个输出是必不可少的,因为三位相加的和在0~3之间变化,而2和3需要两位二进制数表示。同样,两个输出用S(和)与C(进位)来表示。二进制变量S表示相加的和,C表示产生的进位输出。全加器的真值表如表3-12所示。输出值由三位输入的算术和决定。当所有输入都为0时,输出均为0。当输入仅有一个为1或三个全为1时,输出S为1。当输入有两个或三个为1时,输出C为1。图3-41给出了全加器的两个输出的卡诺图。两个输出的积之和的最简表达式为:
image

全加器的两级实现需要七个与门和两个或门。但是,输出S的卡诺图可看作奇函数,此类函数在2.6节中已讨论过,输出C的表达式可进一步处理包含X和Y的异或运算。全加器的布尔表达式用异或运算表示又可写成:
image

3.9.3 二进制行波进位加法器
一个并行加法器是一个仅采用组合逻辑计算出两个二进制数算术和的数字电路。并行加法器并行地连接n个全加器,所有的输入位同时加载至全加器以产生和。
并行加法器中的所有全加器用级联的方式连接在一起,一个全加器的进位输出连接到下一个全加器的进位输入。由于加法器最低有效位产生的进位1可能经过多个全加器传递到最高有效位,就好像一个小卵石丢入池塘激起的波浪一样,因此这种并行加法器又称为行波进位加法器(ripple carry adder)。图3-43给出了由4个全加器级联形成的一个4位行波进位加法器。被加数A和加数B的下标从右至左依次递增,下标0表示最低有效位。进位位将整个全加器链式地连接起来。并行加法器的进位输入为C0,进位输出为C4。一个n位的行波进位加法器需要n个全加器,每个进位输出连接到下一个高位全加器的进位输入。例如,考虑两个二进制数A=1011与B=0011。它们的和S=1110,采用4位行波进位加法器的计算过程如下所示:
image

最低有效位的进位输入置为0。每个全加器接收A和B的相应位和进位输入,产生和S与进位输出。每个全加器的进位输出是下一个高位全加器的进位输入,如灰线所示。

image

4位加法器是数字部件作为基本模块实现系统的典型实例。它可用于包括算术运算在内的许多应用领域。如果采用常规设计方法设计4位加法器,由于电路有9个输入,则真值表有512行。而采用4个全加器的级联,可以简单、直接地实现该电路,而不需要构建512行的真值表。迭代电路和电路重用的魅力在此例中得到了诠释。

相关文章
|
5月前
|
开发框架 JavaScript 前端开发
ASP.NET Core Blazor 核心功能三:Blazor与JavaScript互操作——让Web开发更灵活
码农刚子带你深入Blazor与JavaScript互操作,掌握IJSRuntime调用、双向通信及集成Chart.js等实战技巧,提升Web开发灵活性。
228 7
ASP.NET Core Blazor 核心功能三:Blazor与JavaScript互操作——让Web开发更灵活
|
网络协议 网络安全
openWRT软路由AdGuardHome 未运行 未重定向无法更新核心解决办法
openWRT软路由AdGuardHome 未运行 未重定向无法更新核心解决办法
17023 0
|
Ubuntu
Ubuntu系统镜像下载,国内镜像站大全(山大/清华/阿里/浙大/中科大...)
装Ubuntu,是很多理工科同学入门的第一个挑战,首先我们就需要找到一个能用的iso镜像,根据你的网络环境的不同,不同的站点下载速度会不一样,下面列举一下几个比较好用的,都是来自Ubuntu官方推荐镜像站链接导航国内分区
17561 1
|
12月前
|
固态存储 IDE 开发工具
手把手教你安装Keil MDK5:官方网盘资源+芯片支持包配置详解(附调试实战)
Keil是一款专为嵌入式系统开发设计的集成开发环境(IDE),由德国Keil Software公司开发,后被ARM收购整合为MDK-ARM工具链的一部分。本文详细介绍Keil MDK541的安装步骤、系统要求、运行环境配置及首次使用指南,包括许可证管理、芯片支持包安装和工程模板设置等。同时提供新建STM32工程、编写测试代码的具体操作,并解答常见问题,如缺少DLL文件、语言设置及编译错误处理。附延伸学习资源与版权声明,帮助用户高效上手Keil开发环境。
7875 24
|
9月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
缓存 前端开发 程序员
JustAuth整合第三方登录组件
【10月更文挑战第3天】
826 156
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
OpenWrt配置opkg.conf的方法代码
OpenWrt配置opkg.conf的方法代码
1617 1
|
前端开发 JavaScript Java
前端和Java验签以太坊钱包签名实现中心化登录
前端和Java验签以太坊钱包签名实现中心化登录
1356 8