计算机组成原理:运算方法和运算器

来源:互联网 发布:mac更新flash插件 编辑:程序博客网 时间:2024/05/18 01:00

本文内容:定点运算,浮点运算,定点运算器和浮点运算器。

思维导图

在上篇文章中 计算机组成原理:数据与文字的表示方法 ,我们已经知道了数据与文字在计算机中是怎么表示的。在这一篇中,我们将知道数据是如何在计算机中运算的(运算方法),及是如何实现的(运算器)。

这里写图片描述

本文介绍定点运算和浮点运算及其运算器。定点运算中包括定点加法、减法;定点乘法;定点除法;定点运算器。浮点运算中包括浮点加法、减法;浮点乘法;浮点除法;浮点运算器。

定点运算

定点加法、减法

在上篇文章中 计算机组成原理:数据与文字的表示方法,我们已经介绍了数的补码表示法,负数用补码表示后,就可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减法器。

定点数的加法、减法,实际上就是补码加法、减法。

补码加法

补码加法运算基本公式

  • 定点整数:[x+y] = [x] + [y] (mod 2n+1
  • 定点小数:[x+y] = [x] + [y] (mod 2

简单来说,只需将符号位和数值部分一起参与运算,并且将符号位产生的进位丢掉即可

证明:

(1)证明依据:补码的定义

若 定点整数的补码形式为 x = xnxn1xn2 …… x1x0xn 为符号位),则补码表示的定义是:

这里写图片描述

(2)证明思路:分三种情况。

  1. x、y均为正值(x﹥0,y﹥0)

  2. x、y一正一负(x﹥0,y﹤0 或者x<0,y>0)

  3. x、y均为负值(x<0,y<0)

证明定点小数的补码加法:(定点整数的证明类似,此处不再证明)

1、x﹥0,y﹥0

[x] + [y] = x+y = [x+y] (mod 2

2、x﹥0,y﹤0 (x<0,y>0 的证明与此类似)

根据定义 [x] = x,[y] = 2+y

所以

[x] + [y] = x+2+y = 2+(x+y)

这个地方要考虑 进位的问题。

当 x+y>0 时,2+(x+y) > 2 ,进位 2 必丢失;

[x] + [y] = x+y = [x+y](mod 2)

当 x+y<0 时,2+(x+y) < 2 ;

[x] + [y] = 2+(x+y) = [x+y](mod 2)

3、x<0,y<0

根据定义 [x] = 2+x,[y] = 2+y

所以

[x] + [y]
= 2+x+2+y
= 2+(2+x+y)
= 2+ [x+y] (mod 2)
= [x+y]

注:不懂mod 2 的可以转至上一篇 计算机组成原理:数据与文字的表示方法 查看补码的推导

定点数补码加法举例

这里写图片描述

补码减法

补码减法运算基本公式

  • 定点整数:[xy] = [x] - [y] = [x] + [y] (mod 2n+1
  • 定点小数:[xy] = [x] - [y] = [x] + [y] (mod 2

证明:只需要证明 [y] = - [y]

已证明 [x+y] = [x] + [y]

[y] =[x] + [y] - [x] = [x+y] - [x]

[xy] = [x+(y)] = [x] + [y]

[y] = [xy] - [x]

可得 [y] + [y]
= [x+y] + [xy] - [x] - [x]
= [x+y+xy] - [x] - [x]
= [x+x] - [x] - [x]
= 0

即证。

[y] 等于 对 [y] 包括符号位取反且最末位加1

定点数补码减法举例

例1:已知 x1= - 1110,x2= + 1101,求:[x1][x1][x2][x2]

解:

[x1] = 1 0010

[x1] = 0 1101+0 0001= 0 1110

[x2]= 0 1101

[x2] =1 0010+0 0001= 1 0011

例2:x=+1101,y=+0110,求x-y。

解:

[x] = 0 1101,[y] = 0 0110,[y] = 1 1010

[xy]
= [x] + [y]
= 0 1101 +1 1010
= 10 0111
= 0 0111(符号位产生的进位舍去)

故 x-y=+0111

溢出概念与检测方法

在定点整数机器中,数的表示范围 2n < x < 2n1(补码表示)。在运算过程中。若数的大小超出了定点数能表示的范围,称为“溢出”。

上溢(正溢):数据大于机器所能表示的最大正数;

下溢(负溢):数据小于机器所能表示的最小负数

例如:4位补码表示的定点整数,范围为[-8,+7]

  • 若x = 5,y = 4,则 x+y 产生上溢
  • 若x = -5,y = -4,则 x+y 产生下溢
  • 若x = 5,y = -4,则 x-y 产生上溢

溢出判别方法

  1. 直接判别法
  2. 变形补码判别法(双符号位法)
  3. 进位判别法(单符号位法)

溢出判别方法——直接判别法

方法:

  • 同号补码相加,结果符号位与加数相反;
  • 异号补码相减,结果符号位与减数相同;

特点:硬件实现较复杂;

举例:

  • [x] = 0 101,[y] = 0 100,[x+y] = 1 001,上溢
  • [x] = 1 011,[y] = 1 100,[x+y] = 0 111,下溢
  • [x] = 0 101,[y] = 1 100 ,[xy] = 1 001,上溢

溢出判别方法——变形补码判别法(双符号位法)

变形补码,也叫模4补码:采用双符号位表示补码

判别方法:

  • 双符号位 00:正数
  • 双符号位 01:上溢
  • 双符号位 10:下溢
  • 双符号位 11:负数

特点:硬件实现简单,只需对结果符号位进行异或

举例:

  • [x] = 00 101,[y] = 00 100,[x+y] = 01 001,上溢
  • [x] = 11 011,[y] = 11 100,[x+y] = 10 111,下溢
  • [x] = 00 101,[y] = 11 100 ,[xy] = 01 001,上溢

溢出判别方法——进位判别法(单符号位法)

判别方法:最高数值位的进位与符号位的进位是否相同;

判别公式:V = CfCn1,其中 Cf 为符号位产生的进位, Cn1 为最高数值位产生的进位

简单来说,当最高有效位产生进位而符号位无进位时,产生正溢;当最高有效位无进位而符号位有进位时,产生负溢,

可以用异或门实现。

回顾逻辑门符号

这里写图片描述

基本的二进制加法/减法器

1 位 二进制数据的全加器

  • 三个输入:加数:AiBiCi(低位向本位的进位)
  • 两个输出:Si(和),Ci+1(本位向高位的进位)

1 位 二进制数据的全加器示意图

这里写图片描述

全加运算的真值表如图所示:

这里写图片描述

根据真值表推出两个输出的逻辑表达式

方法:将真值表中函数值等于1的变量组合选出来;对于每一个组合,凡取值为1的变量写成原变量,取值为0的变量写成反变量,各变量相乘后得到一个乘积项;最后,把各个组合对应的乘积项相加,进行化简后,就得到了相应的逻辑表达式。

两个输出端的逻辑表达式

Si = Ai¯¯¯¯Bi¯¯¯¯ Ci + Ai¯¯¯¯ BiCi¯¯¯¯ + AiBi¯¯¯¯Ci¯¯¯¯ + AiBiCi

=AiBiCi

Ci+1 = Ai¯¯¯¯BiCi + AiBi¯¯¯¯Ci + AiBiCi¯¯¯¯ + AiBiCi

= AiBi + BiCi + CiAi

= AiBi +(AiBiCi

根据逻辑表达式,可画出全加器逻辑结构,如下图所示:

这里写图片描述

多位二进制数据加法器

  • 两个 n 位的数据 A = An1An2….A1A0,B = Bn1Bn2….B1B0

  • 和 S = Sn1Sn2….S1S0

  • 采用 进位判别法 判断数据的溢出:V = CnCn1

多位二进制数据加法器逻辑图如下所示:

这里写图片描述

多位二进制数据加法/减法器

  • 将减法转换成加法
    • [A] - [B] = [A] + [B]
  • [B][B]
    • [B] 包括符号位各位取反,末位加1
  • 将加减法电路合二为一
    • 使用异或运算。
      当 M=0 时,Bi = Bi
      当 M=1时,Bi = Bi¯¯¯¯

加法转减法的异或门:

这里写图片描述

多位二进制数据加法/减法器逻辑图 如下所示:

这里写图片描述

多位二进制加法/减法器的输出延迟

  • 假如每位均采用一位全加器并考虑溢出检测,n位行波进位加法器的延迟时间 ta 为:
    • ta = n * 2T + 9T=(2n+9)T
  • 如果不考虑溢出,则延迟时间ta由Sn-1的输出延迟决定:
    • ta = (n-1)* 2T +6T +3T = (2(n-1)+9)T
  • 延迟时间 ta
    • 输入稳定后,在最坏情况下加法器得到稳定的输出所需的最长时间。
    • 这个时间越小越好

定点乘法

分析笔算乘法

定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位 由两数的符号位按异或运算得到,而乘积的数值部分 则是两个正数相乘之积。

设 n 位被乘数和乘数用定点整数表示(xfyf 为乘数符号):

  • 被乘数:[x] = xfxn1….x1x0
  • 乘数:[y] = yfyn1….y1y0
  • 乘积:[z] = (xfyf)+ (xn1….x1x0)(yn1….y1y0

乘积符号的运算法则 是:同号相乘为正,异号相乘为负。积的符号可按“异或”运算得到。

即:异或运算,异号为1,则为负数;同号为0,则为正数。

例子

这里写图片描述

特点

  • 符号位单独处理
  • 乘数的某一位决定是否加被乘数
  • 位积相加
  • 乘积的位数扩大一倍

原码并行乘法

不带符号的阵列乘法器 (即 两个无符号数据的并行乘法电路)

设有两个不带符号的二进制整数:

  • A = am1….a1a0

  • B = bn1….b1b0

它们的真值分别为 a 和 b,即

  • a = m1i=0ai2i

  • b = n1j=0nj2j

在二进制乘法中,被乘数 A 与乘数 B 相乘,产生 m+n 位乘积 P:

P = pm+n1….p1p0

乘积 P 的真值为:

P = ab = (m1i=0ai2i)(n1j=0nj2j
= m1i=0n1j=0(aibj)2i+j
= m+n1k=0pk2k

实现这个乘法过程所需要的操作和人们的习惯方法非常类似,二进制乘法的运算过程

这里写图片描述

上述过程说明了在 m 位 × n 位 不带符号的阵列乘法 中的被加数矩阵。每一个部分乘积项(位积) aibj 叫做一个被加数。这 m×n 个被加数 aibj 可以用 m×n 个 “与”门并行地产生。如下图上半部分所示。

m×n位不带符号的阵列乘法器逻辑框图

这里写图片描述

接下来说明,并行阵列乘法器的基本原理。下面以 5×5 位并行阵列乘法器为例,来说明。

首先来看看 5×5 位并行阵列乘法器电路,如下所示

这里写图片描述

其中 FA 是前面 讲过的一位二进制全加器。FA 的斜线方向为进位输出,竖线方向为和输出,而所有 被加数项 的排列和前述 A×B = P 乘法过程中的被加数矩阵相同。图中用虚线围住的阵列中最后一行构成了一个行波进位加法器。

再通过 5×5 二进制例题讲解。

例题:已知两个不带符号的二进制整数A=11011,B=10101,求每一部分乘积项 aibj 的值与 p9p8….p0 的值

这里写图片描述

带符号的阵列乘法器 (即 间接补码乘法电路)

在介绍带符号的阵列乘法器基本原理前,我们先来看看算术运算部件设计中经常用到的求补电路——对2求补器(即对模为2的数进行求补操作——二进制)。

下图示出了一个具有使能控制的二进制对2求补器的电路图

这里写图片描述

其逻辑表达式如下

C1 = 0,Ci = ai + Ci1

ai = aiECi1

特点:

  • 采用 按位扫描技术 来执行求补操作
  • E 为控制信号,由 数据的符号位来控制

对2求补电路的原理

对2求补时,采用按位扫描技术来执行所需要的求补操作。令 A = ana1a0 是给定的 n+1 位带符号的数,要求确定它的补码形式。进行求补的方法 就是从数的最右端 a0 开始,由右向左,直到找出第一个“1”例如 ai = 1,这样 ai 以右的每一位,包括 ai 自己,都保持不变,而 ai 以左 的每一位都求反,即 1变0,0变1。基于此,横向链式电路中的 第 i 扫描级的输出 Ci 为 1 的条件是:第 i 级的输入位 ai = 1,或者第 i 级链式输入 Ci1 = 1.另外,最右端的起始链式输入 C1 必须永远置 0。当 控制信号 E 为 1 时(即该数的符号位为1,即负数时),启动对2求补的操作;当 控制信号 E 为 0 时(正数)时,输入和输出相等。

例题

例如,在一个 4位的对2求补器中,如果数为:1 0110。

那么,符号位 1 作为控制信号,进行对2求补操作,输入是 0110,输出将是 1010。

(注意,由此我们可以看出,对2求补电路 的功能是求二进制数的补码,但是输出时,只有数据位,不包含符号位。

现在我们来讨论带符号的阵列乘法器。下图示出了(n+1)位 × (n+1)位带求补器的阵列乘法器逻辑方框图:

这里写图片描述

设 A = anan1a1a0 和 B = bnbn1b1b0 均为用定点表示的(n+1)位带符号整数。由上图可以看到,在进行完必要的求补操作以后,A 和 B 的数值位传送给 n位 × n位 不带符号的阵列乘法器,并由此产生 2n 位乘积为

  • A × B = P = p2n1p1p0
  • p2n1 = anbn

其中,p2n1 为符号位

带求补器的阵列乘法器,既使用于原码乘法,也使用于间接的补码乘法。不过,在原码乘法中,算前求补和算后求补都不需要,因为输入数据是立即可用的。而间接的补码阵列乘法却需要 3个求补器

以下将介绍 3 个求补器的作用:

其中两个算前求补器的作用 是:将两个操作数 A 和 B 在被不带符号的乘法阵列(核心部件)相乘之前。若该数的符号位为1(负数),则对它的数值位进行求补操作,并将 求补后的数值位 输入给 不带符号的乘法阵列(核心部件);若该数的符号位为0(正数),则将它的数值位输入给 不带符号的乘法阵列(核心部件)

算后求补器的作用 是:当两个操作数的符号不一致时(如01,10 相乘后,结果为负数,符号位为0),对 乘法阵列得到的结果,进行求补操作;当两个操作数的符号一致时(正数),则直接将 乘法阵列得到的结果 输出。

以下将给出 3个例题来理解 带符号的阵列乘法器

例 1:设 x=+15,y=-13,用带求补器的原码阵列乘法器求出乘积 x·y=?

这里写图片描述

例 2:设 x=+15,y=-13,用带求补器的补码阵列乘法器求出乘积 x·y=?

这里写图片描述

例 3: 设 x= -15,y=-13,用带求补器的补码阵列乘法器求出乘积 x·y=?

这里写图片描述

直接补码并行乘法

直接补码并行乘法——符号位参与运算,可以完成补码数的“直接”乘法,而不需要计算原值。

补码与真值的转换公式

假设有 N+1 位定点补码整数 [N] = anan1a1a0,其中 an 为符号位。根据 [N] 的符号,补码数 [N] 和 真值 N 的关系可以表示为

这里写图片描述

若把负权因数 2n 强加到符号位 an 上,那么就可以把上述方程组中的两个位值表达式合并成下面的统一形式

这里写图片描述

例题:已知 [N] = 01101,[N] = 10011,求 [N][N] 具有的数值。

这里写图片描述

一般化的全加器格式

通过把正权或负权加到输入/输出端,可以归纳出四类加法单元。

这里写图片描述

直接补码阵列乘法器

利用混合型的全加器就可以构成直接补码阵列乘法器。设被乘数 A 和乘数 B 是两个 5 位的二进制补码,即

  • A = (a4a3a2a1a0
  • B = (b4b3b2b1b0

它们具有带负权的符号位 a4b4,并用括号标注。如果我们用括号来标注负的被加项,例(aibj),那么 A 和 B 相乘过程中所包括的操作步骤如下面矩阵所示:

这里写图片描述

5 位 × 5 位 的直接补码阵列乘法器逻辑原理如下图所示

这里写图片描述

例题:设 [A] = 011012[B] = 110112,求 [A×B] = ?

这里写图片描述

定点运算器

逻辑运算

四种基本的逻辑运算

  • 逻辑非:也称求反,按位求它的反
  • 逻辑加:按位求他们的“或”,用“ + ”来表示
  • 逻辑乘:按位求他们的“与”,用 “ · ”来表示
  • 逻辑异:用 “ ⊕ ”来表示

多功能算术/逻辑运算单元(ALU)

在 本文定点加法、减法 中,我们已经知道 一位全加器(FA)的逻辑表达式为

Fi = AiBiCi

Ci+1 = AiBi +(AiBiCi

Fi 是第 i 位的和,AiBi 是第 i 位的被加数和加数,Ci 是第 i 位的进位输入,Ci+1 是第 i 位的进位输出)

ALU 设计思想:

  • AiBi 参与运算之前,先转换为组合函数 XiYi 的形式;
  • 该转换过程由参数 S0S1S2S3 控制
  • 再将 XiYi 和 下一位进位数 通过全加器进行计算

ALU 逻辑结构原理框图:

这里写图片描述

因此,一位算术/逻辑运算单元的逻辑表达式为:

Fi = XiYiCn+i

Cn+i+1 = XiYi + YiCn+i + Cn+iXi

XiYi 与控制参数和输入量的关系

这里写图片描述

74181ALU 算术/逻辑运算功能表

这里写图片描述

  • 控制端
    • S0S1S2S3:控制 ALU 的运算方式
    • M:控制 ALU 的运算类型——算术运算还是逻辑运算
  • 算术运算与逻辑运算的差别:是否考虑进位
    • 算术运算:每一位都需要考虑前一位的进位状态
    • 逻辑运算:每一位运算都是独立进行的,不考虑进位
  • 74181 ALU 芯片有正逻辑、负逻辑之分
    • 正逻辑:1 表示高电平,0 表示低电平
    • 负逻辑:0 表示高电平,1 表示低电平

内部总线

  • 根据总线所在位置分
    • 内部总线:CPU 内部各部件的连线
    • 外部总线:指系统总线,即 CPU 与存储器、I/O 系统之间的连线
  • 按总线的逻辑结构分
    • 单向总线:信息只能向一个方向传送
    • 双向总线:信息可以分两个方向传送,既可以发送数据,也可以接受数据

定点运算器的基本结构

  • 单总线结构的运算器
    • 同一时间内,只能有一个操作数放在单总线上
    • 缺点:操作速度较慢
    • 优点:控制电路比较简单
  • 双总线结构的运算器
    • 两个操作数同时加到 ALU 进行运算
  • 三总线结构的运算器
    • ALU 的两个输入端分别由两条总线供给
    • ALU 的输出则与第三条总线相连

浮点运算

浮点加法、减法

设有两个浮点数 x 和 y,它们分别为

x = 2Ex · Mx
y = 2Ey · My

其中,ExEy 分别为数 x 和 y 的阶码MxMy 为数 x 和 y 的尾数

两浮点数进行加法和减法的运算规则是

z = x ± y = (Mx2ExEy ± My2EyEx <= Ey

浮点数加减运算的步骤

  1. 0 操作数检查:一个操作数为 0,则不必运算,节省运算时间
  2. 比较阶码大小并完成对阶:使小数点位置对齐,为加减运算做准备
  3. 尾数求和运算:不论是加法还是减法,都按加法进行操作,方法与定点加减运算完全一样
  4. 结果规格化
  5. 结果的舍入处理
  6. 结果的溢出判断

比较阶码大小并完成对阶

  • 对阶的原则:以较大的阶码为标准,调整阶码较小的数据(小阶向大阶看齐)。避免阶码较大的浮点数尾数左移,导致最高有效数位丢失。

具体操作

  • 求阶差 △E = Ex - Ey

  • 调整阶码较小的数据

    • 若 △E > 0,则 尾数 My 右移 △E 位(相当于小数点左移),结果的阶码为 Ey + △E。(每右移一位,其阶码加1)
    • 若 △E < 0,则 尾数 Mx 右移 | △E | 位(相当于小数点左移),结果的阶码为 Ex + △E。(每右移一位,其阶码加1)

结果规格化

当尾数运算结果出现下面情况时,需要规格化

  • 符号位与最高数值位相同时,说明尾数的绝对值小于 1/2,应向左规格化(左移尾数,每左移一位,阶码减1)
  • 尾数运算结果溢出时,应向右规格化(右移尾数,每右移一位,阶码加1)

结果的舍入处理

在对阶或向右规格化时,尾数要向右移位。这样,会使加数或结果的尾数会被丢掉,造成一定误差。因此,要进行舍入处理。

常用两种舍入处理方法:

  • 方法1:0 舍 1 入法
    • 保留右移时的移出位,若最高位为1,则尾数加1;否则舍去
    • 特点:精度较高,但需要记录所有的移出位
  • 方法2:恒置 1 法
    • 若之前步骤有右移操作,则直接将结果的最低位置置 1
    • 特点:精度较低,但应用简单

结果的溢出判断

  • 阶码溢出
    • 上溢(结果绝对值太大)——置上溢标志
    • 下溢(结果绝对值太小)——置机器 0

例题:设 x = 2010×0.11011011,y = 2100×0.10101100,求 x + y

这里写图片描述
这里写图片描述

浮点乘法、除法

设有两个浮点数 x 和 y,它们分别为

x = 2Ex · Mx
y = 2Ey · My

其中,ExEy 分别为数 x 和 y 的阶码MxMy 为数 x 和 y 的尾数

  • 乘法:x × y = 2Ex+Ey × (Mx · My
  • 除法:x ÷ y = 2ExEy × (Mx ÷ My

浮点数乘除运算的步骤

  • 0 操作数检查
  • 阶码加/减操作
  • 尾数乘/除操作
  • 结果规格化、舍入和溢出处理
阅读全文
0 0
原创粉丝点击