5.2.2_并行进位加法器

简介: 计算机组成原理之并行进位加法器

上一小节我们介绍了一些电路的基本知识,并且利用电路的基本知识,在上一小节的末尾设计了一个比较简单的加法器。

这一小节中,我们主要会来探讨这些加法器应该怎么进行改进,使它执行加法的速度更快。

这小节的内容会比较绕,不过这一小节,并不是考试的重点,大家能有个大致的了解就可以了。

首先来看一下上一小节留下的串行进位的并行加法器,它存在什么特点
image.png

由于我们只是把这些一位全加器进行了简单的串联,而每一个全加器对本位和的计算,还有高位的进位的计算,都会依赖于来自低位的进位,因此这种加法器只能实现串行的进位。

就像多米诺骨牌一样,只有低位的进位算出来了,高位的进位信息,还有高位的本位和才能得到正确的结果。

所以这种加法器它的加法执行的速度,很大程度上是受到这些进位信息产生的速度的影响。


接下来我们要思考的问题就是,如何让各个进位的信息产生得更快。
image.png

来看每一个进位产生的逻辑表达式

Ci这个进位,依赖于加数(Ai)和被加数(Bi)的两个等位的数值,另外还需要基于低位(Ci-1)过来的进位才可以算出来。
image.png

只不过这个表达式它具备一种递归的特性,Ci-1可以继续把它展开,变成这个样子:
image.png

Ci-1的产生会依赖于第i-1位的加数(Ai-1)和被加数(Bi-1),另外也会依赖于更低位进过来的进位(Ci-2)。

我们继续再把Ci-2进行展开,又可以得到这样的式子:
image.png

所以,如果我们一直往下展开,终有一天我们可以把它展开到C0。而 C0 这个信息是最开始就拥有的信息。
image.png

从这个式子里面可以看出来,我们只需要知道 Ai~A1这些位的信息以及Bi~B1 这些位的信息,最后再结合一个 C0 的信息,我们就可以直接算出 Ci的值。

所以,每一位向更高位的进位,我们计算值所需要的那些数据,在刚开始其实就已经准备好了。因为被加数和加数每一位是多少,在刚开始就可以确定;而 C0 也是刚开始就有的信息。

所以如果我们能够利用刚开始就拥有的这些信息来直接求 Ci 这个进位的信息,我们就不需要像之前那样,等着这些进位一个一个运算结束,才可以算Ci的值。

这就是我们接下来的优化思路

为了让表达式看起来更简洁一些,我们把Ai和Bi相与的部分记作Gi,把Ai和 Bi异或的部分记作 Pi。这样我们的式子可以得到化简。
image.png
所以,Ci的表达式我们可以写成如下的形式:
image.png

当然了,这儿其实不是数学里边的加,这里其实是一个运算。

只不过这个地方我们用加还有乘这样的方式来描述,大家会更容易理解一些。上一小节我们说过与和或它们之间的这种关系,非常像算数运算里的乘和加。当然也具有结合率,分配率那些规律。

所以接下来的讲解中,我们会把念作“加”,把念作“乘”。

基于这个式子,我们可以知道 C1 ,也就是第一位的进位,应该是等于G1加上 P1 乘以C0。
image.png

C2 这一位的信息会根据低位过来的 C1 还有 A2 和 B2 进行一个运算。同样基于这个式子,可以得到 C2 应该是等于G2加上 P2 乘以C1,我们把 C1 用刚才得到的式子进行展开,就可以得到这样的一个结果。
image.png

接下来 C3、C4 也是一样的,只不过就是层层的套娃,把它给套进去就行了。
image.png

需要再次强调,得到 Gi和 Pi的这些信息,我们刚开始就有,因为 Ai表示的是被加数,Bi表示的是加数。被加数和加数的完整信息,它们的每一位的值到底是多少,我们刚开始就可以知道。

所以我们刚开始就可以同时输入的这些信息,应该是被加数 A1 一直到最后一位An,还有加数 B1 一直到最后一位 Bn的信息。另外还有以前的运算保留下来的 C0也就是最原始的进位信息,也是我们刚开始就可以知道的。

现在根据 A1 和 B1 我们就可以得到 G1 和P1。

观察下面这些式子,我们会发现 G1 和 P1 在 C2 、C3、 C4 的运算当中,都是需要用到的。

当然在 C1 的运算当中我们也需要用到。

所以 G1 和 P1 这两个比特的信息,可以刚开始就把它送到后边这些全加器里边
image.png

这是根据 A1 和 B1 得到的两个比特的信息。

接下来 A2 和 B2 经过运算之后,也可以迅速的得到 G2 和P2。经过观察会发现,只要是角标大于等于 2 的这两位信息,都需要用到 P2 和G2,你看 C3 、 C4 也是需要用到P2, G2 ,所以 G2 和 P2 这两位的信息需要送到后面那几个位的加法当中。

后续的推理都是一样的。通过加数和被加数对应的两个比特位,可以算出与之对应的 Gi和Pi。Gi和Pi的信息,可以通过线路把它送往更高位的运算当中,因为更高位的这些运算的进位的确定需要依赖于 Gi和Pi。
image.png

这就意味着即便我们要计算的是 C4 进位的信息,在刚开始我们就已经把所有的计算所需要的这些数据,这些原材料给它准备好了。

我们只需要根据表达式设计相应的电路,就可以在第四个全加器直接算出 C4 的值。

也就是采用这种策略,每一位的进位都几乎是同时产生的,我们不需要再像之前那种设计方案那样,需要等待着后面的进位一位一位往上传。

所以这种加法器的速度会快很多。
image.png

我们把这种加法器称为并行进位的并行加法器。因为每一个进位信息都是并行的产生的,几乎可以在刚开始就同时产生。

所以这种进位方式又可以称为先行进位和同时进位

接下来我们再来看这种设计方案的一个不足。我们从C1、C2、C3、 C4 一路往下套娃,套的越深,你会发现逻辑表达式变得越长。

如果继续往下算,C5、 C6 会变得越来越复杂。

上一小节我们说过,逻辑表达式本质上其实就是我们电路的一种数学化的描述。逻辑表达式越长越复杂,就意味着我们的电路设计也会越来越复杂。
image.png

所以我们套娃的过程应该适可而止。

比较经典的一种做法是,我们会套到C4 这一位,也我们可以同时支持四位加四位的运算。

在加法器内部,每一个进位都是同时并行产生的。就像刚才我们分析的那样,我们只需要由 4 个FA,也就是 4 个全加器,再加上一些新的线路,加上一些运算逻辑,运算逻辑就是根据刚才的表达式来设计的。

加上这些东西,我们就可以构成一个4位的 CLA 加法器。
image.png

相关文章
|
芯片
计算机组成原理实验二 存储器实验(上)
计算机组成原理实验二 存储器实验
2005 0
|
算法 网络虚拟化 内存技术
408王道计算机组成原理强化——存储系统大题
408王道计算机组成原理强化——存储系统大题(下)
4334 3
408王道计算机组成原理强化——存储系统大题
如何用晶体管构建异或门
。XOR ,异或的缩写,它是一种逻辑运算,当高电平输入的数量为奇数时,产生高电平输出;当低电平输入的数量为偶数时,产生低电平输出。这种独特的特性使异或门成为各种应用中的重要组成部分,从简单的二进制算术到复杂的数据加密算法。 在本文中,我们将探讨异或门的内部工作原理,包括其真值表、逻辑符号表示、电路图以及使用晶体管的实际构造。
3128 0
|
自然语言处理 算法 编译器
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
1652 0
|
机器学习/深度学习 自然语言处理 并行计算
提升长序列建模效率:Mamba+交叉注意力架构完整指南
本文探讨了Mamba架构中交叉注意力机制的集成方法,Mamba是一种基于选择性状态空间模型的新型序列建模架构,擅长处理长序列。通过引入交叉注意力,Mamba增强了多模态信息融合和条件生成能力。文章从理论基础、技术实现、性能分析及应用场景等方面,详细阐述了该混合架构的特点与前景,同时分析了其在计算效率、训练稳定性等方面的挑战,并展望了未来优化方向,如动态路由机制和多模态扩展,为高效序列建模提供了新思路。
976 1
提升长序列建模效率:Mamba+交叉注意力架构完整指南
|
存储 编解码 虚拟化
【2025最新】VMware Workstation Pro 虚拟机配置与安装VMware Tools 感受它的强大~
VMware Tools 是 VMware 虚拟机中自带的一种增强工具,能够显著提升虚拟机的性能和用户体验。它提供了优化的显卡驱动程序、文件共享与拖放功能、时间同步以及跨虚拟机和宿主机的复制粘贴功能。安装 VMware Tools 可以让虚拟机在 VMware 平台上运行得更加高效,并且对于老旧系统(如 Win98、Win2000、WinXP)也能提供必要的驱动支持。每个虚拟机都需要独立安装与其操作系统版本相匹配的 VMware Tools,以确保最佳兼容性和性能表现。
1989 6
【2025最新】VMware Workstation Pro 虚拟机配置与安装VMware Tools 感受它的强大~
|
敏捷开发 监控 数据可视化
干货:18种项目管理可视化图表是什么?怎么用?
项目管理的核心之一是高效的沟通和信息传递。
1371 0
干货:18种项目管理可视化图表是什么?怎么用?
|
网络架构 CDN
|
机器学习/深度学习 数据采集 人工智能
动手实践:从零开始训练AI模型的全面指南
【7月更文第14天】随着人工智能技术的飞速发展,训练AI模型已成为科研、工程乃至创业领域的热门技能。本文旨在为初学者提供一个清晰、实用的指南,带领大家从零开始,了解并实践如何训练一个人工智能模型。我们将以一个简单的线性回归任务为例,逐步深入,探讨数据预处理、模型构建、训练过程及评估方法,最后展示如何使用Python和深度学习库PyTorch实现这一过程。
7843 0
|
Android开发
解决Android、Flutter编译时Gradle报错:javax.net.ssl.SSLException: Connection reset
解决Android、Flutter编译时Gradle报错:javax.net.ssl.SSLException: Connection reset
3338 0

热门文章

最新文章