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

相关文章
|
存储 数据处理
计算机数据的表示及运算
计算机数据的表示和运算是计算机系统中非常重要的概念。计算机使用二进制来表示和处理数据,其中包括整数、浮点数和字符等不同类型的数据。下面将详细介绍计算机数据的表示和运算。 1. 二进制表示:计算机使用二进制系统来表示数据。二进制系统由0和1两个数字组成,每一位称为一个比特(bit)。比特是计算机中最小的存储单位,可以表示一个二进制数值(0或1)。 2. 整数表示:计算机使用补码表示整数。补码是一种用于表示负数的方法,它将负数的最高位设为1,正数的最高位设为0。补码表示可以保证负数的运算结果仍然是有效的。 3. 浮点数表示:计算机使用浮点数表示实数。浮点数由两个部分组成:尾数和指数。尾数表示
174 0
|
6月前
|
C语言
【汇编语言实战】两个32位数的相加运算
【汇编语言实战】两个32位数的相加运算
61 2
|
6月前
|
存储 C语言
用加法器实现补码的加/减运算
用加法器实现补码的加/减运算
139 0
|
11月前
|
存储 C#
C# 逻辑位运符及运算原理 按位操作二进制
C# 逻辑位运符及运算原理 按位操作二进制
|
6月前
补码浮点数运算(设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。)
补码浮点数运算(设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。)
350 0
加减运算电路的介绍
加减运算电路 引言: 加减运算电路是计算机中常见的一种电路,它能够对数字进行加法和减法运算。本文将介绍加减运算电路的原理、设计和应用。 一、加法运算电路 加法运算电路是实现数字加法的关键部分。它能够将两个二进制数相加,并输出它们的和。 1. 半加器 半加器是加法运算电路的基本单元。它能够对两个二进制位进行加法运算,并输出它们的和与进位。半加器的逻辑电路图如下: (图1:半加器逻辑电路图) 半加器的真值表如下: (表1:半加器真值表) 从真值表可以看出,半加器的和输出位等于两个输入位的异或运算结果,进位输出位等于两个输入位的与运算结果。 2. 全加器 全加器是由两个半加器组成的加
313 0
|
人工智能 算法 C++
【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】
【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】
|
异构计算
【ALU】32-bit低时延高速整数ALU的设计|超前进位加法器
【ALU】32-bit低时延高速整数ALU的设计|超前进位加法器
【ALU】32-bit低时延高速整数ALU的设计|超前进位加法器
|
人工智能 BI
第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
428 0
第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成