36
线 存储器 运算器 控制器 接口与通信 输入 / 输出设备 林楠 办公室: 408 办公电话: 0371-63887293 电子邮件: [email protected] 《 计算机组成原理 第六章 计算机的运算方法

06 计算机的运算方法03

Embed Size (px)

Citation preview

Page 1: 06 计算机的运算方法03

系统总线

存储器

运算器

控制器

接口与通信

输入 / 输出设备

林楠

办公室: 408

办公电话: 0371-63887293

电子邮件: [email protected]

《 计算机组成原理 》

第六章 计算机的运算方法

Page 2: 06 计算机的运算方法03

运算器的基本结构:( P 283 ) 加法器、移位门、寄存器组

、 输入选择门和数据总线组成

问题 1 、加法器:没有记忆功能。参与运算的数,运算的结果放那里? ( A+B ) + ( C+D )答:存放在寄存器组(多个寄存器)中。

问题 2 、加法器:三输入两输出 (输入:两个数和低位进位

) 一次只有两个数进行运算

, 究竟让哪个寄存器参加工

作呢?答:要进行选择(选择门)。

移位门

加法器

选择门 A 选择门 B

通用寄存器组

数据总线

数据总线

运算器基本结构框图

Review: 第六章 计算机的运算方法

Page 3: 06 计算机的运算方法03

1 、 数据的表示方式

1.1 、符号的处理(正数、负数) 1.2 、数值的处理(数制转换)

1.3 、小数点的处理(定点、浮点)

1.4 、原码的表示方法1.5 、反码的表示方法

1.6 、补码的表示方法(重点研究补码运算)

1.7 、字符的表示方法( ASCII 码)1.8 、汉字的表示方法(字型码、内码)

1.9 、校验码(奇偶校验、海明威校验、 CRC 校验)

Review: 第六章 计算机的运算方法

机器数的表示方法

真值表示问题解决

Page 4: 06 计算机的运算方法03

2 、定点加、减法运算与实现

2.1 、补码定点加、减运算(减法通过加法来实现)

2.2 、溢出概念与检测方法(数值超出了表示范围)

2.3 、补码定点加法器

注释:前面我们讨论了数的补码表示方法,采用补码表示,减法可用加法来实现,对设计硬件来讲,只要设计一个加法器就可以实现加、减运算了,不需要再配一个减法器了。

Review: 第六章 计算机的运算方法

Page 5: 06 计算机的运算方法03

CPA

2.3 、补码定点加法器

+A +B- B

实现加法运算的逻辑示例

Page 6: 06 计算机的运算方法03

延迟时间

与非 1T

或非 1T

与门 2T

或门 2T

异或 3T

异或非 3T

关于设计电路的延迟时间

提高电路运算效率

Page 7: 06 计算机的运算方法03

一位全加器

对一位全加器来说,和 Fn 的时间延迟为 3T+3T=6T 。设计电路时,电路总的延迟时间应该越小越好。

提高电路运算效率

Page 8: 06 计算机的运算方法03

第六章 计算机的运算方法

3 、定点乘法运算3.1 、原码一位乘法3.2 、补码一位乘法3.3 、补码两位乘法3.4 、阵列乘法器

注释:前面讲的内容帮助同学们打开思路:怎么设计运算器;怎么样的机器数表示对运算有利,怎么样的机器数表示对运算不利。

硬件设计时,还要考虑提高硬件运算速度。所以,乘法除法要逐渐从提高计算机的运算速度来考虑。

Page 9: 06 计算机的运算方法03

乘法运算可以通过硬件实现,也可以通过软件来实现;硬件实现乘法是以加法器为基础逐步累加而成。

1 )、软件方法:通过乘法子程序在加 / 减运算器中实现。 该方法经济,但是运算速度慢。

2 )、硬件方法:

A 、在加 / 减法运算器中增加一些移位和控制部件来实现。 这种方法在早期的计算机采用。

B 、随着大规模集成电路的发展,现在设计了阵列乘法器。 设置专门的多位乘法部件,适用于高速大中型计算机。

3 、定点乘法运算

Page 10: 06 计算机的运算方法03

根据数的表示方法,乘法器又有:

原码乘法器,补码乘法器。

原码乘法器实现乘法运算方法简单,

补码乘法器实现加 / 减运算比较简单。

所以在以加 / 减运算为主的机器中多采用补码乘法器。

下面分别介绍原码、补码乘法。

3 、定点乘法运算

Page 11: 06 计算机的运算方法03

第六章 计算机的运算方法

3 、定点乘法运算3.1 、原码一位乘法3.2 、补码一位乘法3.3 、补码两位乘法3.4 、阵列乘法器

注释:书上讲的原码两位乘法在计算机中不是那么实现的,所以算法不做推广。

Page 12: 06 计算机的运算方法03

原码一位乘法基本上是从手算演变过来,符号位单独处理。

两个原码表示的数相乘,它的运算规则是:

乘积的符号位 = 两数的符号相异或 乘积 = 两数的绝对值相乘

设 n 位被乘数 X 和 乘数 Y 用定点小数表示(定点整数同样)

被乘数: [X] 原 = Xf . Xn-1 … X1 X0

乘数: [Y] 原 = Yf . Yn-1 … Y1 Y0

乘积符号: Xf ⊕ Yf 乘积: |X| |Y| [Z] 原 = ( Xf ⊕ Yf ) + (0.Xn-1 … X1 X0) (0.Yn-1 … Y1 Y0)

于是原码与原码相乘就变成如何进行两个正数相乘的问题了。

3.1 、原码一位乘法

Page 13: 06 计算机的运算方法03

设 X = 0.1101 , Y = - 0.1011 。 让我们先用习惯的笔算方法求其乘积,其过程如下:

0 . 1101 乘数 X ( 4 位) × 0 . 1011 被乘数 Y ( 4 位) 0 . 1101

0 . 1101 0 . 0000+ 0 . 1101 0 . 10001111 乘积 Z ( 8 位)

3.1 、原码一位乘法

注意:原码的符号位单独处理。

[ XY ] 原 = 1 . 10001111

Page 14: 06 计算机的运算方法03

手算方法存在的问题:

1 、小数点是移动的。 2 、常规加法器中, 一次只能进行两个数相加, 无法解决 n 个数一次性相加。 3 、 n 位数相乘用 2n-1 位加法器。

所以需要解决的问题:

1 、小数点固定。 2 、一次只进行两个数相加。 3 、由 n 位加法器完成。

3.1 、原码一位乘法

0 . 1101 乘数 X × 0 . 1011 被乘数 Y 0 . 1101

0 . 1101 0 . 0000 + 0 . 1101 0 . 10001111 乘积 Z

Page 15: 06 计算机的运算方法03

3.1 、原码一位乘法

算法改造:

X Y = X * 0.1011 = X * ( 0.1+0.00+0.001+0.0001 )

= 0.1*X + 0.00*X + 0.001*X + 0.0001*X

= 0.1 { X+ 0.0*X + 0.01*X + 0.001*X }

= 0.1 { X + 0.1 { 0 + 0.1*X + 0.01*X }}

= 0.1 { X + 0.1 { 0 + 0.1 {X + 0.1* ( X+0 ) }}}

0.1 = 2-1 对应操作:右移一位。

XY = 2-1 { X + 2-1{ 0 + 2-1{ X + 2-1 ( X+0 ) }}}

Page 16: 06 计算机的运算方法03

0 . 0000 0 + 0 . 1101 +X 0 . 1101 X+0

0 . 0110 1 2-1 (X+0) + 0 . 1101 +X 1 . 0011 1 X+2-1 (X+0)

0 . 1001 11 2-1 {(X+2-1 (X+0)} + 0 . 0000 +0 0 . 1001 11 0+2-1 {(X+2-1 (X+0)} 0 . 0100 111 2-1{0+2-1 {(X+2-1 (X+0)}} + 0 . 1101 +X 1 . 0001 111 X+ 2-1{0+2-1 {(X+2-1 (X+0)}} 0 . 1000 1111 2-1{X+ 2-1{0+2-1 {(X+2-1 (X+0)}}}

设 : X = 0.1101 , Y = - 0.1011 。

XY = 2-1 { X + 2-1{ 0 + 2-1{ X + 2-1 ( X+0 ) }}} 步骤如下:

3.1 、原码一位乘法

1

1

0

1

Y

[ XY ] 原 = 1 . 10001111

Page 17: 06 计算机的运算方法03

改造算法以后分析:

1 、小数点固定了。

2 、一次只进行两个数相加。

3 、由于相加在高 n 位进行,所以只设 n 位加法器就可以了。

上述三个问题得到了解决。

但是只能说这个算法可行,如果引入计算机执行,还要与计算机的具体实现相结合。

3.1 、原码一位乘法

Page 18: 06 计算机的运算方法03

实施方案:

1 、运算法则: 若 Yi =1 则 +X ; 若 Yi =0 则 +0 。

说明 Yi 起到判断运算的作用,运算后, Y 的值无需保留。

这样,可以将 Yi 判断操作固定在最低位,

即要求乘数 Y每完成一步操作,右移一位。

2 、由于相加在高 n 位进行,乘积右移出的低位部分, 可存入乘数 Y 的寄存器高位空出部分。

3 、为了在机器中实现乘法运算,运算器必须设置三个寄存器 A 、 B 、 C 。 寄存器 A 存放部分积(初始为 0 ,最后存放乘积的高位部分) 寄存器 B 存放被乘数 X (运算过程中不变) 寄存器 C 存放乘数 Y (判断后不再保留,最后存放乘积的低位部分)

3.1 、原码一位乘法

1101

Y

Page 19: 06 计算机的运算方法03

0 . 0000 0 + 0 . 1101 +X 0 . 1101 X+0 0 . 0110 1 2-1 (X+0) + 0 . 1101 +X 1 . 0011 1 X+2-1 (X+0) 0 . 1001 11 2-1 {(X+2-1 (X+0)} + 0 . 0000 +0 0 . 1001 11 0+2-1 {(X+2-1 (X+0)} 0 . 0100 111 2-1{0+2-1 {(X+2-1 (X+0)}} + 0 . 1101 +X 1 . 0001 111 X+ 2-1{0+2-1 {(X+2-1 (X+0)}} 0 . 1000 1111 2-1{X+ 2-1{0+2-1 {(X+2-1 (X+0)}}}

设 : X = 0.1101 , Y = - 0.1011 。

3.1 、原码一位乘法

1101

1011

0111

1111

1111

Y

Y 中最初装的是被乘数,最后装的是积的低位部分。

[ XY ] 原 = 1 . 10001111

Page 20: 06 计算机的运算方法03

0 . 0000 + 0 . 1101 0 . 1101 A 、 C 同时右移一位 0 . 0110 1 + 0 . 1101 1 . 0011 A 、 C 同时右移一位 0 . 1001 11 + 0 . 0000 0 . 1001 A 、 C 同时右移一位 0 . 0100 111 + 0 . 1101 1 . 0001 A 、 C 同时右移一位 1 . 1000 1111

1101

1011

0111

1111

1111

3.1 、原码一位乘法

0000

0110

1001

0010

0001

设部分乘积 A=0

设 : X = 0.1101 , Y = 1.1011 。 (绝对值相乘)

符号位 = 0 ⊕ 1 = 1

加法器

000

寄存器 A

1101

寄存器 C ( Y )

1011

寄存器 B ( X )

Cn=1 , +B

Cn=1 , +B

Cn=0 , +0

Cn=1 , +B

0

Page 21: 06 计算机的运算方法03

实现原码一位乘法的逻辑电路框图

X = 1101

Y = 1011X*Y 低位 : 1111

X = 0.1101 被乘数Y = 0.1011 乘数X*Y =0.10001111

X*Y 初始 : 0000X*Y 高位 : 1000

Page 22: 06 计算机的运算方法03

X = 0.1101 被乘数, Y = - 0.1011 乘数, X*Y = 1.10001111

1 、 A 寄存器被清零,作为初始部分积。

被乘数放在 B 寄存器中,乘数放在 C 寄存器中。

2 、给出控制命令 A→ALU 和 B→ALU ,

在 ALU完成部分积 +被乘数。

3 、 ALU 的输出经过移位电路向右移一位送入 A 寄存器中。

4 、 C 寄存器是用移位寄存器实现的,最低位为 B→ALU 的控制命令。

加法器最低一位的值右移时将移入 C 寄存器的最高数值位,

使相乘之积的低位部分保存进 C 寄存器中,原乘数逐位丢失。

3.1 、原码一位乘法

Page 23: 06 计算机的运算方法03

第六章 计算机的运算方法

3 、定点乘法运算3.1 、原码一位乘法3.2 、补码一位乘法(重点:布斯乘法) 3.3 、补码两位乘法3.4 、阵列乘法器

充当计算机:

严格按照运算法则去做,

不加思考,态度认真,

保证结果正确。

Page 24: 06 计算机的运算方法03

1 )校正法

采用补码后,正数的补码与原码相同,算法可以相同。 负数的补码与原码不同,所以不能套用原码一位乘法法则。

是否可以将补码按照原码一位法则运算,然后对乘的结果进行校 正,得到正确的 [XY] 补?[X] 补 =X0. X1 X2 … Xn [Y] 补 =Y0. Y1 Y2 … Yn ( X0 Y0 为符号位

)

[X*Y] 补 = [X] 补 * ( 0. Y1 Y2 … Yn ) + [-X] 补 * Y0

X 符号任意, Y>0 [ X * Y ] 补 = [X] 补 * [Y] 补 (算法与原

码相同)

X 符号任意, Y<0 [ X * Y ] 补 = [X] 补 * ( 0. Y1 Y2 … Yn )+ [-X] 补

3.2 、补码一位乘法

Page 25: 06 计算机的运算方法03

0 . 0000 设部分乘积 A=0 + 0 . 1101 Cn=1 , +[X] 补

0 . 1101 0 . 0110 1 A 、 C 同时右移一位 + 0 . 0000 Cn=0 , +0 0 . 0110 0 . 0011 01 A 、 C 同时右移一位 + 0 . 1101 Cn=1 , +[X] 补

1 . 0000 0 . 1000 001 A 、 C 同时右移一位 + 0 . 0000 Cn=0 , 0 . 1000 0 . 0100 0001 A 、 C 同时右移一位 + [-X] 补 1 . 0011 [XY] 补 = 1 . 0111 0001

设 : [X] 原 = 0.1101 , [Y] 原 = 1.1011 。 [XY] 原 = 1 . 1000 1111 [X] 补 = 0.1101 , [Y] 补 = 1.0101 。 [XY] 补 = 1 . 0111 0001 = |X||Y|+ [-X] 补

3.2 、补码一位乘法

Page 26: 06 计算机的运算方法03

因为现在的计算机都是补码运算,所以不用校正法,用比较法, 但是讲校正法要在比较法的基础上才好理解,所以先讲校正法。

2) 比较法(难点 、重点)

比较法是由 布斯 ( Booth )夫妇提出的,故有称为 Booth 乘法。 校正法由公式: [X] 补 * [Y] 补 = [X] 补 * ( 0. Y1 Y2 … Yn ) + [-X] 补 * Y0

进一步推倒变换,按机器执行顺序求出每一步的部分积如下:

3.2 、补码一位乘法

[ Z0]补 =0[ Z1]补 = 2-1 {[ Z0]补 + (Yn+1-Yn)[ X]补}

设: Yn+1=0[ Z2]补 = 2-1 {[ Z1]补 + (Yn-Yn-1)[ X]补}… [ Zn]补 = 2-1 {[ Zn-1]补 + (Y2-Y1)[ X]补}

所以:[ X·Y]补 = [ Zn+1]补 ={[ Zn]补 + (Y1-Y0)[ X]补}

Page 27: 06 计算机的运算方法03

根据以上公式,在机器中具体实现时要做适当修正。

比较乘数相邻两位 Yn+1 和 Yn ,于是补码一位乘法法则为:

判断位 Yi Yi+1 操作内容

00 部分积 + 0 , 右移 1 位 11 部分积 + 0 , 右移 1 位 10 部分积 +[ -X]补, 右移 1 位 01 部分积 +[ X]补, 右移 1 位

1 )被乘数 X 与 部分积 P 取双符号位,并参加运算。2 )乘数 Y 末增设 Yn+1=0 ;设部分积初始 =0 。

3 )根据 Yn , Yn+1判断位,进行 n+1 步加法,最后一步不移

位。

3.2 、补码一位乘法

补码右移前面补符号位

Page 28: 06 计算机的运算方法03

X= - 0.1101 Y= 0.1011[X] 补 = 11.0011 [-X] 补 = 00.1101 [Y] 补 = 0.1011

部分积初始 =0 乘数 Y 设 Yn+1=0 判断 YnYn+1 00.0000 010110 + 00.1101 10 : + [-X] 补

00.1101 00.0110 1 01011 右移一位+ 00.0000 11 : +0 00.0110 00.0011 01 0101 右移一位 + 11.0011 01 : + [X] 补

11.0110 11.1011 001 010 右移一位+ 00.1101 10 : + [-X] 补

00.1000 00.0100 0001 01 右移一位

+ 11.0011 01 : + [X] 补

11.0111 0001 最后一步不移位

补码右移前面补符号位3.2 、补码一位乘法

[XY] 补 = 1 . 01110001

Page 29: 06 计算机的运算方法03

A C Yn Yn+1

LDR0 LDR1

+ —

B

原码 反码

&Yn

Yn+1

&Yn

Yn+1

+1

多路开关

被乘数 X

乘数 Y 积的低位部分

部分积积的高位部分

01 10

步数计数器

3.2 、补码一位乘法

加法器

Page 30: 06 计算机的运算方法03

第六章 计算机的运算方法

3 、定点乘法运算3.1 、原码一位乘法3.2 、补码一位乘法3.3 、补码两位乘法3.4 、阵列乘法器

充当计算机:

严格按照运算法则去做,

不加思考,态度认真,

保证结果正确。

Page 31: 06 计算机的运算方法03

将补码一位乘法(比较法)合成两步进而得补码两位乘法法则为:

3.3 、补码两位乘法

2-2 {部分积 + 0}0111

2-2 {部分积 +[ -X]补}-1011

2-2 {部分积 +[ -X]补}-1101

2-2 {部分积 + 2[ -X]补}-2001

2-2 {部分积 + 2[ X]补}2110

2-2 {部分积 +[ X]补}1010

2-2 {部分积 +[ X]补}1100

2-2 {部分积 + 0}0000

部分积 组合值Yn+1YnYn-1

1 )初始设置:设部分积为 0 , Yn+1=02 )符号参加运算:设置部分积与被乘数三个符号位。 乘数 Y 数值部分为偶数设两个符号位;为奇数设一个符号位;3 )运算步骤:根据 Yn-1, Yn, Y n+1 判断操作;

4 )最后一步:乘数 Y 数值部分为偶数最后一步不移位;为奇数最后移一位。

Page 32: 06 计算机的运算方法03

X= - 0.1101 Y= 0.1011[X] 补 = 111.0011 [-X] 补 = 000.1101 [Y] 补 = 00.1011

部分积初始 =0 乘数 Y 设 Yn+1=0 判断 Yn-1YnYn+1

000. 0000 0010110 + 000. 1101 110 : + [-X] 补

000. 1101 000. 0011 01 00101 右移两位+ 000. 1101 101 : + [-X] 补 001. 0000 000. 0100 0001 001 右移两位 + 111. 0011 001 : + [X] 补

111. 0111 0001 001

3.3 、补码两位乘法

[XY] 补 = 1 . 01110001

Page 33: 06 计算机的运算方法03

第六章 计算机的运算方法

3 、定点乘法运算3.1 、原码一位乘法3.2 、补码一位乘法3.3 、补码两位乘法3.4 、阵列乘法器

Page 34: 06 计算机的运算方法03

早期的计算机中为了简化硬件电路,串行的一位、二位乘法方案,通过多次“加法 - 移位”操作来实现。

但是运算速度太慢,远远不能满足科学技术的计算,所以又提出了高速乘法器的要求。

由于乘法运算大约占全部运算的 1/3 ,因此采用高速乘法部件,无论从速度还是效率上都十分必要。为了进一步提高乘法运算速度,可采用类似于人工计算的方法。

自大规模集成电路问世以来,高速阵列乘法器也随之问世,出现了各种形式的流水式阵列乘法器,它们属于并行乘法器。串行乘法器以被淘汰。

3.4 、阵列乘法器

Page 35: 06 计算机的运算方法03

4×4 无符号阵列乘法电路

X4 Y4

Z8

HA

X0X1X2X3

X0X1X2X3

Y3

Y2

Z7 Z6 Z5 Z4 Z3

Z2

Z1

Z0

Y1

Y0

X0X1X2X3

FA FA HA

FA FA HAFA

FA HAFAFA

X3 X2 X1 X0

0 . 1101 乘数 X ( 4 位) × 0 . 1011 被乘数 Y ( 4 位)

0 . 1101 0 . 1101 0 . 0000 0 . 1101 0 . 10001111 乘积 Z ( 8 位)

X4 X3X2X1X0 Y4 Y3Y2Y1Y0

Z8 Z7Z6Z5Z4Z3Z2Z1Z0

3.4 、阵列乘法器 P296

Page 36: 06 计算机的运算方法03

复习与作业

复习章节:

第 6 章 计算机的运算方法

6.3.3 乘法运算

作业: P291 6.20