第二章 运算方法与运算器
本章内容: 数据与文字的表示方法 定点加法、减法运算 定点乘法、除法运算 定点运算器的组成 浮点运算方法和浮点运算器 本章小结
2.1 数据与文字的表示方法 1、 数据格式 2、 数的机器码表示 3、 字符与字符串的表示方法 4、 汉字的表示方法 5、 校验码 数值数据 的表示方法 符号数据 的表示方法 校验数据 的表示方法
数据和字符在计算机中表示的基本原则: 采用二进制编码。 应有利于数据的存储、加工(处理)、传送。 选择合适的编码规则,尽量用少量、简单的代码表示尽量多的非数值信息,同时有利于信息处理(速度、方便)。 首先讨论数值数据在计算机中的表示方法
计算机中常用的数值数据有两种表示格式: 2.1.1 数据格式 (1)定点格式 (2)浮点格式 定点格式(所有数据的小数点位置固定) 2.1.1 数据格式 计算机中常用的数值数据有两种表示格式: (1)定点格式 (2)浮点格式 定点格式(所有数据的小数点位置固定) 浮点格式(各数据的小数点位置浮动)
1. 定点数的表示方法 定点表示:约定机器中所有数据的小数点位置是固定 的,小数点记号“.”隐含,不再表示。 定点数据形式:纯小数或纯整数。 1. 定点数的表示方法 定点表示:约定机器中所有数据的小数点位置是固定 的,小数点记号“.”隐含,不再表示。 定点数据形式:纯小数或纯整数。 小数点的位置约定在数值位x0的后面(不显示) 小数点的位置约定在符号位xn的后面(不显示) (设:定点数表示为x=xnxn-1…x1x0 其中:xn符号位,约定:0代表正号,1代表负号) 注意到:数据的符号也需要用数字“0”或“1”表示。
例:(符号位约定:0代表正号,1代表负号) X=+1010110. Y= - 1101001. X=+0.11011 Y=-0.10101 定点数例 例:(符号位约定:0代表正号,1代表负号) X=+1010110. 纯整数:X = 01010110. 正数,符号位取0 Y= - 1101001. 纯整数:Y = 11101001. 负数,符号位取1 X=+0.11011 纯小数:X = 0.11011 Y=-0.10101 纯小数:X = 1.10101
无论是整数或是小数,在机器数的表示中,都不出现小数点“.”,只是约定其位置。 纯整数:X = 01010101. 定点数例 注意到: 无论是整数或是小数,在机器数的表示中,都不出现小数点“.”,只是约定其位置。 纯整数:X = 01010101. 纯整数:Y = 11101001. 纯小数:X = 0.1010101 小数点都 是隐藏的 纯小数:X = 1.1101001
设: 机器码 [x]=xnxn-1 …x1x0 (xn为符号位) 则: 数值位各位均为0时最小;各位均为1时最大 纯整数的表示范围: 0≤|x|≤ 2n-1 纯小数的表示范围为: 0≤|x|≤ 1-2-n 目前计算机中多采用定点纯整数表示,因此将定点 数表示的运算,简称为整数运算。 |x|min=000…0; |x|max=011…1 定点表示法特点:电路实现的硬件比较简单,处理方便,但可表示的数值范围有限。
2、浮点数的表示方法 那么,计算机中究竟采用哪种数据形式? 什么是浮点数表示? 二进制数类似 小数点位置浮动,显然存在多种数据形式 例:156.78 =15.678×101 = 1.5678×102 = 0.15678×103=M×RE 其中:M为尾数;R为基数;E为阶码(指数)。 (尾数M表示数的有效数字,阶码E表示数的范围) 二进制数类似 那么,计算机中究竟采用哪种数据形式?
√ 计算机中,一般约定:尾数M为小数,即: 尾数|M|<1.0,并按此原则确定各数据的浮点表示格式。 ∴ 上例 +156.67=+0.15678 ×103 0.15678 ×103 同理:对于二进制数 +1011.1101= +0.10111101 ×2+4 0.10111101 ×2+100 =M×RE √ 符号位 二进制数 符号位 可见: 一个机器浮点数应当由阶码E、尾数M及其符号位组成。
Es E1 E2 …… Em M1 M2 …… Mn Ms 约定:①尾数M用定点小数表示,给出有效数字的位数,M决 定了浮点数的表示精度; 浮点数表示 约定:①尾数M用定点小数表示,给出有效数字的位数,M决 定了浮点数的表示精度; ②阶码E:用整数形式表示,指明小数点在数据中的位 置,其决定了浮点数的表示范围。 ∴ 浮点数的一般形式为: Es E1 E2 …… Em M1 M2 …… Mn Ms 阶符 阶码E 数符 尾数M 前例:0.10111101 ×2+100: 机器中的一般形式为:0 100 0 10111101
几点注释: 如前例:0.10111101 ×2+100 (规格化浮点数) 若写为: 0.01011101×2+101 仍是规格化浮点数吗? 浮点数表示 几点注释: 为了提高浮点数据的表示精度,当尾数的值不为0时,其绝对值:0.5≤|M|<1.0,即:尾数绝对值域的最高有效位应为1,这称为浮点数的规格化表示。(后面再讨论) 在字长相同的条件下, 浮点数所表示的范围远比定点数大。 以下两种情况计算机把该浮点数看成零值,称为机器零。 ⑴当阶码E=Emin (全0) ,且浮点数的尾数M= 0时; ⑵当阶码E的值<Emin值(下溢)时。(无论其尾数M为 何值) 如前例:0.10111101 ×2+100 (规格化浮点数) 若写为: 0.01011101×2+101 仍是规格化浮点数吗?
首先分别将整数和分数部分转换成二进制数: [例]:将十进制数 X= 转换成二进制浮点数的形式。 [解:] 首先分别将整数和分数部分转换成二进制数: +20=+10100. ∴ X= = +10100.10011=+0.1010010011×2+5 (移动小数点,使其尾数为纯小数) 数符 S=0, 阶码 E=+5=(+101)2, 尾数 M=0.1010010011 得到: X 的一般浮点数形式为: 0.1010010011×2+101 注意到:这不是IEEE754标准形式。
[ 浮点数的IEEE754 标准格式] : S E M 32位标准格式: 31 30 23 22 0 31 30 23 22 0 其中:S=浮点数的符号位(0表示正数,1表示负数), M为23位纯小数表示; E=阶码,用8位纯整数表示。 注意:真实尾数为:1.M (“1”是隐含的) 阶符采用隐含方式,即:采用移码方式来表示正负指数。 对应的真值:
S E M 64位标准格式: 63 62 52 51 0 其中:S=浮点数的符号位(0表示正数,1表示负数, 63 62 52 51 0 其中:S=浮点数的符号位(0表示正数,1表示负数, M用52位纯小数表示。(实际尾数为:1.M) E=阶码,11位,阶符采用移码方式,阶符隐含 。 对应的真值:
已知某浮点数x的754标准存储格式为(41360000)16, 求其对 【例1】见教材P18 已知某浮点数x的754标准存储格式为(41360000)16, 求其对 应的十进制数值. 将 (41360000)H展开为二进制数: 0100 0001 0011 0110 0000 0000 0000 0000 S E M 31 30 23 22 0 ∴ S=0, e=E-127=10000010-01111111 =+011 (=+3) 尾数:1.M=1.011011 故: x=+1.011011×2+3=+1011.011 =+(11.375)10
【例2】将X= =+20.59375转换为754标准浮点格式。 已知: X=+20.59375=+0.1010010011×2+5 =+1.010010011×2+4 (e=4) ∴ S=0, E=e+127=131=(10000011), M=010010011 该“1”将隐含 故:其32位754标准浮点格式为 0100 0001 1010 0100 1100 0000 0000 0000=(41A4C000)H
3.十进制数串的表示方法 表示形式: 1.字符串形式 (ASCII码) 字符串表示:符号位及每一个十进制的数位都用一个 3.十进制数串的表示方法 十进制数在计算机内以符号来处理,其主要有两种 表示形式: 1.字符串形式 (ASCII码) 字符串表示:符号位及每一个十进制的数位都用一个 字节代码(8位二进制代码)表示。 如:+25 (ASCII码存储) -38 + 2 5 - 3 8 用于非数值计算
压缩的十进制数串形式:每个字节存放两个十进制的数码。(符号位,用多余的BCD码约定表示) 如:+153、-12 (BCD码存储) 1 5 3 C (+123) 2 D (-12) (字节) (字节) (字节) (字节) 即: 每个十进制的数位和符号位都用4位二进制码 表示。 既可用于非数值计算、也可用于数值计算。
2.1.2 数值的机器码表示 基本思想:把符号位和数字位一起编码来表示一个 实际的数,使符号位也能参与计算。 数的机器码表示 2.1.2 数值的机器码表示 基本思想:把符号位和数字位一起编码来表示一个 实际的数,使符号位也能参与计算。 实际数→(连同符号一起编码)→机器数或机器码; 机器数或机器码 →(真实数值) → 对应的真值。 主要机器码包括:原码、补码、反码、移码等。
1. 原码表示法 设定点整数:x =±xn-1…x1x0,其原码的定义是: x 2n>x≥0 (x为正数) 1. 原码表示法 设定点整数:x =±xn-1…x1x0,其原码的定义是: 即:定点整数的原码形式为: [x]原=xn,xn-1…x1x0 x 2n>x≥0 (x为正数) 2n-x=2n+|x| 0≥x>-2n (x为负数) 数值取绝对值 数值取 绝对值 符号 例如,x=+11001,则:[x]原=0,11001 x=-10101,则: [x]原=1,10101 (举例)
可见:原码表示法特点:简单易懂、求取方便。 数的原码表示 可见:原码表示法特点:简单易懂、求取方便。 原码的缺点: (1)“0”的原码表示不唯一。 “+0”、“-0” 原码在机器中有两种形式: 对于定点整数: [+0]原 =0,000…0. [-0]原 =1,000…0.
——补码则正是一种解决方法。 (2)加减运算不方便: 由于数值部分是采用绝对值表示的,因此其主要 数的原码表示 (2)加减运算不方便: 由于数值部分是采用绝对值表示的,因此其主要 适合于乘除直接运算,但是,却不方便直接进行加减 法运算。 而加减法运算正是计算机中最常使用的运算。 ∴ 必须探讨解决方法 ——补码则正是一种解决方法。 |x1|±|x2|=x1±x2 ? —— 结果不能直接得到!
假设:现在的标准时间为4点正; 而钟表已经7点 2.补码表示法 (教材P20) 数的补码表示 补码的概念(以钟表对时为例): 假设:现在的标准时间为4点正; 而钟表已经7点 了,为了校准时间,可以采用两种方法: (1)将时针退 3 格(7-3=4); (2)将时针向前拨9格(7+9=16 4)。 显然:这两种方法都能对准到4点。 原因: 时钟的模数为Mod=12,减3和加9是等价的 用数学公式表示: x-3=x+9 (mod12) 上式在数学上称为同余式。
∴设某数为x,当Mod=12时: 即:当模数Mod=12时,可定义:9是(-3)补码。 “模Mod”:表示可以被丢掉的数值。 x-3=x+9、x+7=x-5 、x+12=x (Mod=12) ——都是等价的。 得到一个启示: 在补码运算时,甚至可以把减法转化为加法来 计算,只要求出负数的补码即可。 即:补码的加、减计算都可直接用加法计算完成。
补码的定义: x 2n > x ≥0 2n+1+x= 2n+1 -|x| 0≥ x ≥ -2n 数的补码表示 补码的定义: 设定点整数 x =±xn-1…x1x0 : (n位数值) 正数的补码数值 就是本身 x 2n > x ≥0 2n+1+x= 2n+1 -|x| 0≥ x ≥ -2n (mod 2n+1) 负数的补码需作运算
问题:根据补码定义,求负数的补码时需作一次减法运算,这显然不是补码方法的初衷。后面将介绍负数的快速求补方法。 例:已知 x= +10111, y= -11011, (n=5) 求 [x]补、[y]补 按定义:[x]补 =0,10111 [y]补 =25+1+y=1000000-11011=1,00101 1000000 11011 100101 问题:根据补码定义,求负数的补码时需作一次减法运算,这显然不是补码方法的初衷。后面将介绍负数的快速求补方法。
注意: (参见教材P21 例3、例4) (1)0的补码只有一种表示形式: 对于定点整数: [+0]补=[-0]补=0,0000 数的补码表示 注意: (1)0的补码只有一种表示形式: 对于定点整数: [+0]补=[-0]补=0,0000 对于定点小数: [+0]补=[-0]补=0.0000 (2)一个补码与其数值真值的关系: 设:一个n位的定点整数,其补码(n+1位)为: [X]补=xnxn-1…x1x0, 其中:xn是符号位。 其对应的真值为: (参见教材P21 例3、例4)
补码特点: (1)符号位可以与数值位一起直接参与运算 (2)两补码可以直接进行加减运算 (3)补码减法可以用加法实现 (4)0的补码表示唯一 ……。
3. 反码表示法 (用于快速求补码) x 2n > x ≥0 (2n+1-1)+x 0≥ x ≥ -2n [x]反= 反码的定义: 数的反码表示 3. 反码表示法 (用于快速求补码) 反码的定义: x 2n > x ≥0 (2n+1-1)+x 0≥ x ≥ -2n [x]反= 反码求取方法: x为正数:符号取0、各位数码位保持不变; x为负数:符号取1,各位数码位全部取反, 即得到。
例: 已知 x= +10111, y= -11011, 求 [x]反、[y]反 解: x= +10111 >0 按定义: [x]反= 0,10111 (数值不变) y= -11011 <0 按定义: [y]反= 1,00100 (数值取反) 可见:反码非常容易得到。
注意: (1)0的反码也不唯一 即:[+0]反=0,00…0; [-0]反=1,11…1 (2)反码本身并无多大意义,其主要用于求补码。
通过反码求补码的方法(分析比较定义可知): 数的补码与反码关系 通过反码求补码的方法(分析比较定义可知): 当x为正数时: [x]补=[x]反= 0,x 当x为负数时: [x]补=[x]反+1 ∴ 可知由反码求补码的重要方法,即: 一个负数的补码,可以通过:“先写出该数的反码, 然后在最末位加1” 的方法直接获得。
例:已知 x=+1011, y=-1101, 求 [x]补、[y]补 解: 按定义 x=+1011>0 [x]补 =[x]反= 0,1011 (注:正数的补码、反码, 数值保持不变!) y=-1101<0 [y]补 =[y]反+1 =1,0010+1 =1,0011 [y]反 +1 可见: 由反码求负数的补码非常方便,并且还消除了负 数求补码过程中的减法计算。 (举例)
求一个负数的补码的另一种有效的转换方法: 数的补码与反码关系 求一个负数的补码的另一种有效的转换方法: 对于负数x,可以先写出其原码,符号位保持为1,数值部分由低位向高位转换,对所遇到的0和第一个1,保持原值不变,第一个1以后的各位均取反,即得到:[x]补。 例: x=-110100, 求 [x]补 解:先写出原码: [x]原=1,110 100 (x<0) ∴ [x]补=1,001 100 [x]反=1,001011 [x]补=1,001011+1 =1,001100 (结果相同) (举例) 保持不变 全部取反
4. 移码表示法 对定点整数x =±xn-1…x1x0 (数值部分为n位), 在计算机中,移码通常用于表示浮点数的阶码,即: 移码一般只用于整数的表示。 对定点整数x =±xn-1…x1x0 (数值部分为n位), 其移码的一般定义是: [x]移=2n+x 2n>x≥-2n 移码的数值特征分析:
例如: 十进制 二进制 补码 x = +21 x = –21 x = +31 x = –31 +10101 0,10101 错 大 – 10101 1,01011 +11111 0,11111 错 大 – 11111 1,00001 若采用移码:[x]移= 25+x 移码 +21 +10101 1,10101 大 正确 -21 10101 0,01011 +31 +11111 1,11111 大 正确 -31 11111 0,00001
可见: 移码的大小就直接表示了其真值的大小。 —— 相当于无符号数。 即: 移码的大小可以直接比较。 ∴ 用补码表示阶码,一般不能直接判断阶码的实际大小;而用移码则解决了此问题。 (举例)
可见: 移码的求取方法: [x]补=0,10111 例: 当x=+10111 时, [x]移=25+x=1,10111 当 y =-10111 时, [y]移=25+y=25-10111=0,01001 可见: (1)移码中符号位表示的规律与原码、补码、反码 正好相反。 (2)移码在数值上与补码一致,但是符号位与补码正 好相反! 减法? [y]补=1,01001
【机器码表示法小结】 在数据的四种机器码表示法中: 正数的原码、反码、补码等同于真值;只有负数才分别有不同的表示方法。 补码和移码的0只有一种表示方法,因此其表示范围相对于原码和反码多一种,正数可表示-2n,定点小数可表示-1(移码没有小数形式)。
移码主要用于表示浮点数的阶码,移码可以直接比较大小。 机器码表示法小结 移码主要用于表示浮点数的阶码,移码可以直接比较大小。 移码在数值上与补码相同,符号位(最高位)正好相反。 补码可以直接进行加减法运算,十分方便,因此目前机器中广泛采用补码表示法。
[例6] 以定点整数为例,用数轴形式说明原码、反码、补码表示范围和可能的数码组合情况。 机器码表示法小结 [例6] 以定点整数为例,用数轴形式说明原码、反码、补码表示范围和可能的数码组合情况。
[例7] 将十进制真值(-127、-1、0、+1、+127)列表表示成二进制数及原码、反码、补码、移码值。 机器码表示法小结 [例7] 将十进制真值(-127、-1、0、+1、+127)列表表示成二进制数及原码、反码、补码、移码值。
[例8] 设机器字长16位,定点整数表示,尾数15位,数符1位,问:采用原码表示时,最大正数是多少? 最大的负数是多少? 机器码表示法小结 [例8] 设机器字长16位,定点整数表示,尾数15位,数符1位,问:采用原码表示时,最大正数是多少? 最大的负数是多少? [解:] 定点整数原码: 最大正数值=0,111111111111111 = +(215-1)10 最大的负数值=1,111111111111111 =-(215-1)10 (15个1)
[例9](书P23)假设由S, E, M三个域组成的一个32位二进制字所表示的非零规格化浮点数x,真值表示为: x=(-1)s×(1 [例9](书P23)假设由S, E, M三个域组成的一个32位二进制字所表示的非零规格化浮点数x,真值表示为: x=(-1)s×(1.M)×2E-127 (IEEE754标准,与书不同) 问:它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少? (23位) (8位) [解:] (1)最大正数 11111111111111111111111 11111111 x=[1+(1-2-23)]×2128 (2)最小正数 00000000000000000000000 00000000 x=1.0×2-127
机器码表示法小结 (3) 最大的负数: 1 11111111 11111111111111111111111 x=-[1+(1-2-23)]×2128 (4) 最小的负数: 1 00000000 00000000000000000000000 x=-1.0×2-127 扫一扫
2.1.3 字符与字符串的表示方法 1. 字符的表示方法 目前国际上普遍采用的字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,共125个元素,因此需7位二进制编码,加一位标志位,共8位一个字节。 ASCII码规定:二进制数位的最高一位(b7)恒为0,余下的7位可以给出128个编码,可表示128个不同的字符。
表2.1 ASCII字符编码表(教材P24) b3b2b1b0位 b6b5b4位 _ 000 001 010 011 100 101 110 111 0000 NUL DEL SP @ P p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 “ 2 B R b r 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN & 6 F V f v 0111 ETB 7 G W g w 1000 BS CAN ( 8 H X h x 1001 HT EM ) 9 I Y i y 1010 LF SUB * : J Z j z 1011 VT ESC + ; K [ k { 1100 FF FS , < L \ | 1101 CR GS - = M ] m } 1110 SO RS . > N ↑ n ~ 1111 SI US / ? O _ o
2. 字符串 字符串:是指连续的一串字符. 通常方式下, 它们依次占用主 存中地址连续的多个字节, 每个字节存一个字符。 字符和字符串的表示方法 字符串:是指连续的一串字符. 通常方式下, 它们依次占用主 存中地址连续的多个字节, 每个字节存一个字符。 [例] 将字符串: IF└┘A>B└┘THEN└┘READ(C)└┘ 从高位字节到低位字节依次存在主存中。 [解:] 设:主存单元长度由4个字节组成。每个字节中存放相应字符的ASCII值,文字表达式中的空格“└┘”在主存中也占一个字节的位置。 因而每个字节依次存放的ASCII码(16进制数)为:49、46、20、41、3E、42、20、44、48、45、4E、20、52、45、41、44、28、43、29、20。
主存各字节单元内容 I (49) F (46) 空 (20) A (41) > B 空 T H E N R A D ( C ) 字符和字符串的表示方法 主存各字节单元内容 I (49) F (46) 空 (20) A (41) > B 空 T H E N R A D ( C )
2.1.4 汉字的表示方法 1. 汉字的输入编码 包括:数字码、拼音码和字形码 (汉字的输入编码) 2.1.4 汉字的表示方法 1. 汉字的输入编码 包括:数字码、拼音码和字形码 数字码:常用的是国标区位码, 用数字串代表一个汉字输入。每一个汉字用一组4位数字码表示。 数字编码输入的优点是无重码, 且与内部编码的转换比较方便, 缺点是代码难以记忆。 拼音码:拼音码是以汉字拼音为基础的输入方法。使用简单方便,易于掌握。目前已有多种智能拼音码用于汉字的输入,已成为主要汉字输入法之一。
字形码:字形编码是用汉字的形状来进行的编码(例:五笔字型),缺点是代码规则仍然需要熟悉和记忆。 汉字的表示方法 (汉字的输入编码) 字形码:字形编码是用汉字的形状来进行的编码(例:五笔字型),缺点是代码规则仍然需要熟悉和记忆。 其它输入方式: 利用语音或图象识别技术“自动”将汉字识别输入等,将汉字自动转换为机内代码表示。
注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。 汉字的表示方法 (汉字的内码) 2.汉字内码 汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示,每个汉字在机器中都有一个唯一的内码。 为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。 注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。
3. 汉字字模码 字模码:用点阵表示的汉字字形代码,用于汉字的输出显示。 此例,汉字的字模码为: 例如: 16位×16=32字节 字模码 汉字的表示方法 (汉字字模码) 3. 汉字字模码 字模码:用点阵表示的汉字字形代码,用于汉字的输出显示。 此例,汉字的字模码为: 16位×16=32字节 例如: 字模码
注意: 字模码只能用来构成汉字库,其仅用于汉字的显示输出或打印输出,不能用于机内存储。 汉字的表示方法 (汉字字模码) 注意: 字模码只能用来构成汉字库,其仅用于汉字的显示输出或打印输出,不能用于机内存储。 汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码,各自的功能完全不同。
2.1.5 校验码 各种因素常常导致计算机在传送与处理信息过程中出现错 误。为了便于校验错误,计算机中常常还有一种称为校验码的 效验码 各种因素常常导致计算机在传送与处理信息过程中出现错 误。为了便于校验错误,计算机中常常还有一种称为校验码的 代码,其主要用来检测错误,甚至校正错误。 最简单且应用广泛的检错码方法是奇偶校验法:采用一位校验位实现奇校验或偶校验。
【方法】: 设x=(xn-1xn-2…x1x0)是一个n位字, 则奇检错校验位 F定义为: F=xn-1⊕xn-2⊕…⊕x1⊕x0, —— 按位异或“⊕” 仅当x中包含有奇数个1时, F=0。 同理, 偶检错校验位 F定义为: F=xn-1⊕xn-2⊕…⊕x1⊕x0 即:仅当x中包含偶数个1时, F=0。
检错实现方法: 假设:一个字x从部件 A 传送到部件 B。在源点A, 按约 定将校验位C与数据合在一起 (xn-1…x1x0C)送到B。 效验码 检错实现方法: 假设:一个字x从部件 A 传送到部件 B。在源点A, 按约 定将校验位C与数据合在一起 (xn-1…x1x0C)送到B。 若约定采用偶效验: 设,在B点接收到的信息为:x’=(x’n-1…x’1x’0C ’), 做检错校验: F=x'n-1⊕…⊕x'1⊕x'0⊕C ’ 若: F=0,表明x字传送正确; 若: F=1,意味着收到的信息有错。 若约定采用奇校验,方法类似。
注意到: 奇偶校验只能提供奇数个错误检测,但无法检测偶数个错误,更无法识别出错误信息的位置。(循环校验码CRC可解决此问题)
效验码 [例10] 教材P26 欲传送的数码如下: 数 据 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
加入校验位后传送的数码为: 数 据 偶校验编码 C 奇校验编码 C 接收方按约定进行奇校验或偶校验即可。 1 0 1 0 1 0 1 0 效验码 加入校验位后传送的数码为: 数 据 偶校验编码 C 奇校验编码 C 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 接收方按约定进行奇校验或偶校验即可。
2.2 定点加/减法运算 2.2.1 补码加法 2.2.2 补码减法 2.2.3 溢出概念与检验方法 2.2.4 基本的二进制加法、减法器 定点加减法运算 2.2 定点加/减法运算 2.2.1 补码加法 2.2.2 补码减法 2.2.3 溢出概念与检验方法 2.2.4 基本的二进制加法、减法器 2.2.5 十进制加法器
[x]补+[y]补=[x+y]补 (mod 2n+1) 补码的加法 2.2.1 补码加法 补码加法的公式: [x]补+[y]补=[x+y]补 (mod 2n+1) 现分四种情况来证明。(见教材P26-27,自阅) 假设采用n位定点整数表示,因此证明的先决条件是: ︱x︱﹤2n-1, ︱y︱﹤2n-1, ︱x+y︱﹤2n-1。(非溢出数) (1)x﹥0,y﹥0,则x+y﹥0。 相加两数都是正数,故其和也一定是正数。正数的补码就 是正数本身是一样的, 可得: [x]补+[y]补=x+y=[x+y]补 (mod 2n+1)
(2)x﹥0,y﹤0, 则x+y>0 或x+y<0。 根据补码定义, ∵ [x]补=x(正), [y]补=2n+1+y(负) ∴ [x]补+[y]补=x+2n+1+y=2n+1+(x+y) ① 若x+y>0:则:模数2n+1自然丢失,所以: [x]补+[y]补=x+y=[x+y]补 (mod 2n+1) ② 若x+y<0 :2n+1 + (x+y) = [x+y]补 ∴ [x]补+[y]补=[x+y]补 成立。 (mod 2n+1)
[x]补+[y]补=2n+1+(x+y)=[x+y]补 (mod 2n+1) 补码的加法 (3)x<0,y>0, 则x+y>0或 x+y<0。 这种情况和第2种情况一样, 把x和y的位置对调即得证。 (4)x<0,y<0, 则x+y<0。 若x, y两数都是负数, 则:(x+y)也一定是负数。 ∵ [x]补=2n+1+x, [y]补=2n+1+y ∴ [x]补+[y]补=2n+1+x+2n+1+y=2n+1+(2n+1+x+y) 上式右边分为“2n+1”和(2n+1+x+y)两部分。 既然(x+y)<0,而其绝对值为非溢出值 ∴ (2n+1+x+y)>0 一定为正数, 故:模数2n+1自然丢失。 又因(x+y)<0, 所以 [x]补+[y]补=2n+1+(x+y)=[x+y]补 (mod 2n+1)
[x]补+[y]补=[x+y]补 (mod 2n+1) 结论:在模数2n+1意义下,任意两个n位整数的补码之和等于该两数之和的补码。 即: [x]补+[y]补=[x+y]补 (mod 2n+1) 这是补码加法的理论基础,其结论也适用于定点小数。 ∴ 两个补码可以直接相加,即可得到“和的补码”。
[例] :x=+1011, y=+0100, 计算:x+y=? 解: [x]补=0,1011, [y]补=0,0100, [x]补 0,1011 +[y]补 0,0100 [x+y]补 0,1111 >0 ∴ x+y=+1111
∴ x+y=+0100=+100 [例]:x=+1101, y=-1001, 求x+y。 [解:] 补码的加法 [例]:x=+1101, y=-1001, 求x+y。 [解:] [x]补=0,1101 [y]补=1,0111 [x]补 0,1101 +[y]补 1,0111 [x+y]补 10,0100 >0 ∴ x+y=+0100=+100 最高位为模数自行丢失
可见,补码加法的特点为: 1、符号位作为数的一部分直接参加运算; 2、超过模数(Mod)的进位自动丢掉。
[x]补-[y]补=[x]补+[-y]补 =[x-y]补 补码的减法 2.2.2 补码减法 由补码的原理可知,补码的减法运算可以通过加 法来完成,进而简化运算器的结构。 补码的减法公式如下: [x]补-[y]补=[x]补+[-y]补 =[x-y]补 即: 减法可以变成加法来计算! 公式的证明简单,只需证明:-[y]补 = +[-y]补即可。 (用已证明的加法公式即可,见书P27-28)
∵ [x+y]补=[x]补+[y]补 (mod 2n+1) ∴ [y]补 =[x+y]补-[x]补 补码的减法 现证明如下: ∵ [x+y]补=[x]补+[y]补 (mod 2n+1) ∴ [y]补 =[x+y]补-[x]补 ∵ [x-y]补=[x+(-y)]补=[x]补+[-y]补 ∴ [-y]补 =[x-y]补-[x]补 将上二式相加,得: [-y]补+[y]补=[x+y]补+[x-y]补-[x]补-[x]补 =[x+y+x-y]补-[x]补-[x]补 =[x+x]补-[x]补-[x]补=0 故: [-y]补= -[y]补
∴ 获证: [x-y]补=[x]补+[-y]补 问题是:若已知[y]补,如何求取[-y]补? 方法: (以定点整数为例) 对已知的[y]补:连同符号位一起,各位求反、最末位加1,即得到 [-y]补。 即:[-y]补= [y]补+1 对[y]补连同符号位一起的求反
[例13] 已知 x1= +1101, x2 =-1110, 求: [x1]补, [-x1]补, [x2]补, [-x2]补。 补码的减法 [例13] 已知 x1= +1101, x2 =-1110, 求: [x1]补, [-x1]补, [x2]补, [-x2]补。 [解:] [x1]补=0,1101 [-x1]补= [x1]补+1=1,0010+1=1,0011 [x2]补=1,0010 [-x2]补= [x2]补+1=0,1101+1=0,1110
已知: [x-y]补=[x]补+[-y]补 补码的减法 [例14] x=+1101, y=+0110, 求x-y。 [解] : [x]补=0,1101 [y]补=0,0110 [-y]补=1,1010 [x]补 0,1101 +[-y]补 1,1010 [x-y]补 1 0,0111 >0 ∴ x-y=+0111 已知: [x-y]补=[x]补+[-y]补 模数自行丢失
∴ x-y=+0100110=+26H [又例] x=+5EH, y=+38H, 求x-y。 补码的减法 [又例] x=+5EH, y=+38H, 求x-y。 [解] : x =+1011110, y=+0111000 [x]补=0,1011110 [y]补=0,0111000 [-y]补=1,1001000 [x]补 0,1011110 +[-y]补 1,1001000 [x-y]补 10,0100110 >0 ∴ x-y=+0100110=+26H 模数自行丢失
2.2.3 溢出概念与检测方法 在运算过程中,如数值的大小超出其所能表示的范围, 则称为“溢出”。 —— 这在计算机中是不允许的! 那么,定点数“溢出”的特征是什么? 见后例
× [例12] x=+1011, y=+1001, 求x+y。 [解:] [x]补 0,1011 + [y]补 0,1001 溢出概念与检测方法 [例12] x=+1011, y=+1001, 求x+y。 [解:] [x]补=0,1011 [y]补=0,1001 [x]补 0,1011 + [y]补 0,1001 [x+y]补 1,0100 < 0 ∴ x+y=负值 ? 两正数相加,结果为负,显然错误。 (运算中出现了“上溢”) 无进位 有进位 × 结果的符号位为1
√ ∴ x+y=+1101 [又例] x=+1011, y=+0010, 求x+y。 [解:] [x]补 0,1011 溢出概念与检测方法 [又例] x=+1011, y=+0010, 求x+y。 [解:] [x]补=0,1011 [y]补=0,0010 [x]补 0,1011 + [y]补 0,0010 [x+y]补 0,1101 >0 ∴ x+y=+1101 两正数相加,结果正确,无溢出. 无进位 √
× [例] x=-0.1101, y=-0.1011, 求x+y。 [解:] [x]补=1,0011 [y]补=1,0101 溢出概念与检测方法 [例] x=-0.1101, y=-0.1011, 求x+y。 [解:] [x]补=1,0011 [y]补=1,0101 [x]补 1,0011 + [y]补 1,0101 [x+y]补 1 0,1000 0,1000 >0 有进位 无进位 模数自行丢失 × ∴ x+y=+0.1000 ? 两负数相加,结果为正,显然错误。 (运算中出现了“下溢”)
可见,计算结果溢出的特征为: ① 两个正数相加,结果为负(即:大于机器所能表示的最大正数),称为上溢。 ② 两个负数相加,结果为正(即:小于机器所能表示的最小负数),称为下溢。
产生“溢出”的原因: 运算过程中,当最高有效数值位的运算进位与符号位的运算进位不一致时,将产生运算“溢出”。 溢出概念与检测方法 产生“溢出”的原因: 运算过程中,当最高有效数值位的运算进位与符号位的运算进位不一致时,将产生运算“溢出”。 “溢出”检测方法: —— 可采用两种方法进行“溢出”检测。
当符号位运算进位Cf与最高有效位运算进位Cn-1不一 致时, 即会产生“溢出”。 故:溢出逻辑表达式为: V=Cf⊕Cn-1 (1)检测方法1: “单符号位法”。 从例题中看到: 当符号位运算进位Cf与最高有效位运算进位Cn-1不一 致时, 即会产生“溢出”。 故:溢出逻辑表达式为: V=Cf⊕Cn-1 (显然:用异或门即可方便地得到溢出信号V) 在定点机中,机器会自动检查运算结果是否发生溢 出,若溢出,则要进行中断处理。 V Cf Cn-1
双符号位法,又称为“变形补码法”. (2)检测方法2: [变形补码]: 将符号位由一位扩展为二位,如: [x]补=0,1011 溢出概念与检测方法 (2)检测方法2: 双符号位法,又称为“变形补码法”. [变形补码]: 将符号位由一位扩展为二位,如: [x]补=0,1011 [x]补=00,1011 [ y]补=1,0111 [ y]补=11,0111
采用变形补码后,两个补码相加,如果结果的双 符号位出现“01”或“10”两种组合时, 则表示发生溢出。 溢出概念与检测方法 结论: 采用变形补码后,两个补码相加,如果结果的双 符号位出现“01”或“10”两种组合时, 则表示发生溢出。 两位符号位 溢出逻辑式为: V=Sf1⊕Sf2 其中:Sf1、Sf2分别为最高符号位和第二符号位 注意,在用变形补码运算时: 1. 两个符号位Sf1、Sf2与数值一样,都直接参加运算; 2.最高符号位上若产生进位Cf1,则被自然丢掉。
[例14] x=+1100, y=+1000,用变形补码法 计算:x+y。 [解] : [x]补=00,1100, [y]补=00,1000 溢出概念与检测方法 [例14] x=+1100, y=+1000,用变形补码法 计算:x+y。 [解] : [x]补=00,1100, [y]补=00,1000 [x]补 00,1100 +[y]补 00,1000 01,0100 两个符号位出现“01”, 表示已溢出。(上溢) (正确的符号位) 即:x+y 结果溢出 !
[又例] x=+1100, y=+0001,求x+y。 [解] : [x]补=00,1100, [y]补=00,0001 溢出概念与检测方法 [又例] x=+1100, y=+0001,求x+y。 [解] : [x]补=00,1100, [y]补=00,0001 [x]补 00,1100 +[y]补 00,0001 00,1101 两个符号位 =“00”, 表示无溢出。 (正确的符号位) ∴ x+y=+1101 结果准确
[例15] x=-1100, y=-0110, 求x+y [解] : [x]补=11,0100, [y]补=11,1010 溢出概念与检测方法 [例15] x=-1100, y=-0110, 求x+y [解] : [x]补=11,0100, [y]补=11,1010 [x]补 11,0100 +[y]补 11,1010 10,1110 两个符号位出现“10”,表示已溢出。(下溢) (正确的符号位) ∴ x+y 溢出!
小结: 当以变形补码运算,运算结果的双符号位相异时,表示溢出;相同时,则表示未溢出。 溢出概念与检测方法 小结: 当以变形补码运算,运算结果的双符号位相异时,表示溢出;相同时,则表示未溢出。 两变形补码相加,不论结果是否溢出,最高符号位Sf1总是给出结果的正确符号。
2.2.4 基本的二进制加法/减法器 输出 1 两个二进制数字Ai、Bi和一个进位 输入Ci相加,产生一个和输出Si以及 一个进位输出Ci+1。(一位全加器FA) 一位全加器的输入输出逻辑真值表 见右。 根据真值表,三个输入端和两个 输出端可按如下逻辑方程进行联系: Si=Ai⊕Bi⊕Ci Ci+1=AiBi+BiCi+CiAi =AiBi+(Ai⊕Bi)Ci 1 Ci+1 Si Ci Bi Ai 输出 输入 一位全加器真值表
∴ 一位全加器(FA)组成示意图如下: 对一位全加器(FA)来说, Si的时间延迟为: 6T (每级异或门延迟3T), 二进制加法/减法器 ∴ 一位全加器(FA)组成示意图如下: 对一位全加器(FA)来说, Si的时间延迟为: 6T (每级异或门延迟3T), Ci+1的时间延迟为: 5T。 其中:T为单级逻辑门电路 的延迟,通常被定义为一个 “与非”门或一个“或非”门的 时间延迟作为度量单位。 3T+3T 3T+T+T
把n个一位全加器(FA)级联起来,即可构造一个n位 基本补码加/减法器: 二进制加法/减法器 [n位加/减法器基本结构]: 把n个一位全加器(FA)级联起来,即可构造一个n位 基本补码加/减法器: —— 称为:n位行波进位加减器 FA 电路示意图
二进制加法/减法器 (见书P31图2.3 (b)) (一位全加器) n位行波进位加/减器逻辑电路
M为方式控制输入信号: 当M=0 时,作加法运算; 当M=1 时, 作减法运算。 (注意[-B]补的求法) 图中:左边表示采用单符号位法的溢出检测逻 辑,经异或门产生溢出信号。 用一套加法器可 以同时实现加、 减法运算
一个n位行波进位加法器的时间延迟: (见书P31) 考虑: “异或门”的延迟时间为3T; 每级进位链的延迟时间为2T。 见后图 二进制加法/减法器 一个n位行波进位加法器的时间延迟: (见书P31) 考虑: “异或门”的延迟时间为3T; 每级进位链的延迟时间为2T。 见后图
二进制加法/减法器 延迟时间为: 2T 延迟时间为3T 考虑溢出检测时,延迟时间ta为: ta=n·2T+9T =(2n+9)T
定点乘法运算 2.3 定点乘法运算 2.3.1 原码并行乘法 2.3.2 补码并行乘法*
2.3.1 原码并行乘法 1.算法比较与分析 已知:原码的数值部分为其真值的绝对值(正值) ∴ 两个原码表示的数相乘,其运算规则为: 原码乘法运算 1.算法比较与分析 已知:原码的数值部分为其真值的绝对值(正值) ∴ 两个原码表示的数相乘,其运算规则为: 乘积的数值部分是两个数值相乘之积;而乘积的符号位则由两数的符号位“异或”运算即可得到。
设:n位被乘数和乘数用定点整数表示: 被乘数 [x]原=xn ,xn-1…x1x0 乘数 [y]原=yn ,yn-1…y1y0 则乘积(z=x×y)的原码为: [z]原=zn, (xn-1…x1x0)·(yn-1…y1y0) 式中: zn=(xn⊕yn) 为乘积的符号。 教材P31有误 也就是说:原码的做乘法运算时,符号位不参 与计算,只需完成数值部分的运算即可。
乘积数值:数值部分按照二进制数乘法规则,直接 进行无符号数计算即可。 ∴ 原码乘法的实现,只需考虑两个无符号数相乘即可。 原码乘法运算 【原码乘法方法】: 乘积符号:按“异或”运算直接得到, 即: zn=xn⊕yn 乘积数值:数值部分按照二进制数乘法规则,直接 进行无符号数计算即可。 ∴ 原码乘法的实现,只需考虑两个无符号数相乘即可。
设x=1101,y=1011. 先用习惯方法求其乘积, 观察其过程: 1 1 0 1 (x) 1 0 1 1 (y) 1 1 0 1 0 0 0 0 + 1 1 0 1 1 0 0 0 1 1 1 1 (z) (手工计算过程) 这种手工算法若用于计算机,存在什么问题?
问题一:机器字通常为n位长, 运算器也是n位长,而两 个n位二进制数相乘, 乘积可能为2n位。 原码乘法运算 问题一:机器字通常为n位长, 运算器也是n位长,而两 个n位二进制数相乘, 乘积可能为2n位。 问题二:加法器每次只能进行两个操作数的相加,无 法将n个部分积同时做相加运算。 1 1 0 1 (x) 1 0 1 1 (y) 1 1 0 1 0 0 0 0 + 1 1 0 1 1 0 0 0 1 1 1 1 (z) 如何解决与实现?
[解决方法]: ① 早期计算机中为了简化硬件结构, 采用逐次执行“加法—移位”的软件串行操作来实现。但缺点是运算速度太慢,目前已淘汰。 ② 目前普遍使用的是流水式阵列乘法器, 它们属于并行乘法器。
2. 无符号数的阵列乘法器 A=am-1…a1a0 (m位) B=bn-1…b1b0 (n位) 设有两个无符号二进制整数: 原码乘法运算 2. 无符号数的阵列乘法器 设有两个无符号二进制整数: A=am-1…a1a0 (m位) B=bn-1…b1b0 (n位) 它们的数值分别为a和b,即: m-1 n-1 a =∑ai2i b =∑bj2j i=0 j=0
做二进制乘法: 被乘数A与乘数B相乘,将产生(m+n)位乘积P: P=pm+n-1…p1p0 (m+n位)
am-1 am-2 … a1 a0 实现上述乘法过程所需要的操作和人们的习惯方法非常类似: × bn-1 … b1 b0 原码乘法运算 实现上述乘法过程所需要的操作和人们的习惯方法非常类似: am-1 am-2 … a1 a0 × bn-1 … b1 b0 am-1b0 am-2b0 … a1b0 a0b0 am-1b1 am-2b1 … a0b1 + am-1bn-1 am-2bn-1 … a0bn-1 pm+n-1 pm+n-2 pm+n-3 pn-1 … p1 p0 乘数B 被乘数A 位积因子 位积因子 乘积P
阵列乘法器逻辑结构: 同时生成所有 的位积因子 与门阵列 加法器阵列
如何构建加法器阵列,有效缩短被加数矩阵中每列所需的加法时间。 原码乘法运算 在(m×n)位无符号整数的阵列乘法中,共有:m×n个被加数aibj {aibj|0≤i≤m-1和0≤j≤n-1},又称位积因子,可以用m×n个“与门”同时地产生。 (1个与门延时) ∴ 设计高速并行乘法器的基本问题,就集中在 如何构建加法器阵列,有效缩短被加数矩阵中每列所需的加法时间。 以5位×5位阵列乘法器的逻辑电路图为例: (教材P33)
若乘法器为n×n位时,需要n2个“与门”和n(n-1)个“全加器”。 由“与门阵列”同时 生成全部位积因子 5×5位阵列乘法器 一位加法器 若乘法器为n×n位时,需要n2个“与门”和n(n-1)个“全加器”。
3T+3T Tf 3T+Tf 阵列乘法器延时时间 Ta (n-2).6T 3T (3T+Tf) (n-2).Tf
其中:Ta为“与门”的传输延迟时间,Tf为全加器(FA) 的进位传输延迟时间: Ta = Tf = 2T 分析可以得出: 原码乘法运算 其中:Ta为“与门”的传输延迟时间,Tf为全加器(FA) 的进位传输延迟时间: Ta = Tf = 2T 分析可以得出: n位×n位不带符号的阵列乘法器总的乘法时间为: tm=Ta+(n-1) ×6T +(n-1)×Tf =(8n-6) T (n为数据的位长)
[例19] 已知两个无符号的二进制整数 : A = 11011, B = 10101, 试分析阵列乘法器完成乘法计算的过程,并归纳 阵列乘法器的运算特点。
1 1 0 1 1 =A (27)10 1 0 1 0 1 = B (21)10 1 1 0 1 1 0 0 0 0 0 + 1 1 0 1 1 1 0 0 0 1 1 0 1 1 1 =P (567)10 a4b0=1 a3b0=1 a2b0=0 a1b0=1 a0b0=1 a4b1=0 a3b1=0 a2b1=0 a1b1=0 a0b1=0 a4b2=1 a3b2=1 a2b2=0 a1b2=1 a0b2=1 a4b3=0 a3b3=0 a2b3=0 a1b3=0 a0b3=0 a4b4=1 a3b4=1 a2b4=0 a1b4=1 a0b4=1 (由阵列加法器完成) (8n-8)T (由55个 与门同时 产生) (2T)
对负数的补码再求一次补,即可得到对应的原码 3.带符号的阵列乘法器 若输入乘法器的两数是补码:[x]补、[y]补, 例:x=+(21)10=+10101 → [x]补=0,10101 y=-(25)10=-11001 → [y]补=1,00111 那么, [x]补、[y]补能够直接送入无符号乘法器运算, 得到:[x]补×[y]补=[x×y]补吗? 结论不对! 对负数的补码再求一次补,即可得到对应的原码 原因? 负数补码的数值! [解决方法]: 将[x]补、[y]补转换成对应的原码:[x]原、[y]原, 再把数值部分送入无符号乘法器,完成数值的乘法 运算。
(1) 对2求补器电路 已知,一个负数的常规求补过程: 例: X= -1110, 则:[X]补=1,0010 ; Y= -0100,则: [Y]补=1,1100 算法特点:从数据的最右边开始向左边逐位扫描…。 算法的电路实现: 一个具有使能控制的二进制数求补器电路。 (教材P34如图2.6)
若转换n位数码位(an-1……a1a0), 则所需的转换时间为: tTC=n·2T+5T=(2n+5)T 带符号的阵列乘法器 32T 最长的信号 传输通路 2T+3T (见教材P34) 若转换n位数码位(an-1……a1a0), 则所需的转换时间为: tTC=n·2T+5T=(2n+5)T E=0时: A*=A E=1时启动求补: A*=[A]补 所需的总转换时间为: tTC=32T+5T
① 最右端的起始链式输入C-1须恒置成“0”。 ② 当控制信号线 E=1时,启动对输入的求补操作; 带符号的阵列乘法器 电路特点: 令:A=an…a1a0是给定的(n+1)位带符号的数,要求 确定 [A]补。 (an为符号位) ① 最右端的起始链式输入C-1须恒置成“0”。 ② 当控制信号线 E=1时,启动对输入的求补操作; 当控制信号线 E=0时,输出将和输入相等(不用求补)。 ③ 可以利用符号位an来作为控制信号“E”, 即:E = an
注意到: 符号位an只作为求补启动(使能)控制信号E,不参与求补变化;只取数值位进入求补器进行转换。
(2) 带求补器的阵列乘法器 前面讨论已知,阵列乘法器:只完成两个无符号数相乘。 那么,如何用它实现两个补码数相乘? 方法: 带符号的阵列乘法器 (2) 带求补器的阵列乘法器 前面讨论已知,阵列乘法器:只完成两个无符号数相乘。 那么,如何用它实现两个补码数相乘? (设:输入[x]补,[y]补,计算 [x×y]补=?) 方法: ①先用求补器将输入的补码转化为原码。(算前求补) ②用无符号阵列乘法器,求出原码的乘积。(符号位单独处理) ③再根据乘积的符号位,确定是否对乘积求补,得出乘积的补码:[x×y]补。(算后求补) 见后图(教材P36)
符号位 符号位 E E 乘积的符号位 E
将两个操作数A和B的数值部分变成原码数值,再送 入无符号乘法阵列(核心部件)完成相乘。 算后求补器的作用则是:把运算结果再转换为补码。 在这种逻辑结构中,共使用三个求补器。 两个算前求补器的作用是: 将两个操作数A和B的数值部分变成原码数值,再送 入无符号乘法阵列(核心部件)完成相乘。 算后求补器的作用则是:把运算结果再转换为补码。 (当乘积的符号位p2n=1时,启动算后求补器) 乘积为: [A·B]补=P2n , p2n-1…p1p0 P2n=an⊕bn 其中:P2n为乘积的符号位。 (CAI演示)
可见: 这种补码乘法器中:需要增加算前求补和算后求补 等硬件电路,来辅助完成两个补码的乘法运算。 ——(称为:间接补码乘法)
∵ 输入、输出数据都是立即可用的。 乘法,当然也可直接用于原码乘法。 显然: 直接做原码乘法时:算前求补和算后求补都不需要。 带符号的阵列乘法器 这种带求补器的阵列乘法器,既适用于间接的补码 乘法,当然也可直接用于原码乘法。 显然: 直接做原码乘法时:算前求补和算后求补都不需要。 ∵ 输入、输出数据都是立即可用的。 全部E取:E= 0 (关闭求补) 即可。 —— 原码阵列乘法 需要吗?
注意到: 由于间接的补码阵列乘法器需要加入算前求补、算后求补操作,运算时间大约要比不带符号的直接阵列乘法器增加约1倍。
[例20] 设x=+15,y=-13,用带求补器的阵列 乘法器完成补码乘法,求出乘积xy=? (书P35) [解]:已知:输入数据x, y为补码形式( 做补码乘法): ∴ 算前、算后求补都需要,由符号位决定是否启动 求补器。 本例: x=+15=(+1111)2, [x]补=0,1111 ; → 1111 (符号位为0,算前无需求补) y=-13=(-1101)2, [y]补=1,0011 → 1101 (符号位为1,算前需求补,使y的数值变为原码数值)
乘积的数值经由无符号阵列乘法器获得:(算式演示) 1 1 1 1 (x=15)10 1 1 0 1 (y=13)10 1 1 1 1 0 0 0 0 + 1 1 1 1 1 1 0 0 0 0 1 1 无符号阵列 乘法器完成 (正数值) 乘积的符号:0⊕1 = 1
[可知]: 1、 无符号阵列乘法器输出的数值结果为:11000011。 2、 因为x和y的符号不一致,结果的符号位为“1” → 算后求 1、 无符号阵列乘法器输出的数值结果为:11000011。 2、 因为x和y的符号不一致,结果的符号位为“1” → 算后求 补器被启动,对结果求补,最后得出乘积的补码: 本例结果: [xy]补 =1,00111101 换算成真值是: xy=( -11000011)2 = (-195)10 十进制数验证: x×y = 15× (-13) = -195 (结果正确)
小结: (1) 这种带求补器的阵列乘法器所完成的补码 乘法,实质上属于“间接的补码乘法”。 带符号的阵列乘法器 小结: (1) 这种带求补器的阵列乘法器所完成的补码 乘法,实质上属于“间接的补码乘法”。 (2) 这种补码计算中, 符号位并不直接参与计算。 那么:能否连同符号位一起计算,完成补码直接 乘法呢? 回答是肯定的! 扫一扫 http://www.sojump.com/jq/4669189.aspx
2.3.2 直接补码并行计算*(教材P36-39) 主要思想:连同符号位一起参与运算,直接得出 乘积补码结果。 已知:补码与其对应真值的关系如下 设: [N]补=an……a1a0 (an为符号位) 补码与对应真值的关系: 可见:补码的符号位an带负权值,数值位带正权值, ∑后即为该补码的真值。。 (教材P37(2.25)式)
∴ 只要让符号位带上“负权值”直接参与计算,即可实现补码的直接乘法计算。 (具体讨论略)
定点除法运算 2.4 定点除法运算 2.4.1 原码除法算法原理 2.4.2 并行除法器
2.4.1 原码除法运算原理 基本原理: 两个原码数相除时: 商的符号单独处理(两数的符号位“异或” ); 商的数值部分由两数的数值部分直接相除求得*。 (与原码乘法类似)
以定点小数为例 (定点整数也适用) 设有n+1位定点小数x和y: 被除数x,其原码为:[x]原=xn .xn-1…x1x0 除数y,其原码为: [y]原=yn .yn-1…y1y0 商q=x/y,其原码为: [q]原=(xn⊕yn)+(0.xn-1…x1x0 / 0.yn-1…y1y0) 商的符号运算:qn=xn⊕yn 与原码乘法一样。
商的求法:商的数值部分的运算,实质上是两个正数 定点除法运算 商的求法:商的数值部分的运算,实质上是两个正数 求商的运算,商的符号位单独“异或”获得。 ∴ 原码除法只需考虑两个正数相除即可。 设:被除数x=0.1001,除数y=0.1011,模仿十进制 除法运算,以手算方法求x÷y
人工完成的除法过程, 为什么不适合计算机? 0.1 1 0 1 (商q) 0.1 0 1 1 0.1 0 0 1 0 x(r0) 被除数小于除数,商0 -0.0 1 0 1 1 2-1y 除数右移1位,减除数,商1 0.0 0 1 1 1 0 r1 得余数r1 -0.0 0 1 0 1 1 2-2y 除数右移1位,减除数,商1 0.0 0 0 0 1 1 0 r2 得余数r2 -0.0 0 0 1 0 1 1 2-3y 除数右移1位,不减除数,商0 0.0 0 0 0 1 1 0 0 r3 得余数r3 -0.0 0 0 0 1 0 1 1 2-4y 除数右移1位,减除数,商1 0.0 0 0 0 0 0 0 1 r4 得余数r4 得x÷y的商q=0.1101,余数为r=0.00000001。 人工完成的除法过程, 为什么不适合计算机? 该步不作
计算机完成除法时,需考虑到: 机常采用 “余数左移”的方法来替代“除数右移”。 2、机器不能直接判断够不够减:必须先作减法,若余数 定点除法运算 计算机完成除法时,需考虑到: 1、计算机中,小数点是固定的,为便于机器操作,计算 机常采用 “余数左移”的方法来替代“除数右移”。 2、机器不能直接判断够不够减:必须先作减法,若余数 为正,则为够减;若余数为负,则不够减。 发现不够减时,必须恢复原来的余数,才能继续往下 运算。这种方法又称为恢复余数法。 由于要恢复余数,使计算的效率降低,同时使除法过 程的步数不固定,因此控制比较复杂。
由于恢复余数法中包含有一些无效(冗余)运 算,且运算步数不固定,实际中,一般采用不恢复 余数法,又称加减交替法。
“不恢复余数法”原码除法规则: (被除数x,除数y) 先求出[x]原、[y]原,得出数值部分:x*、y*、[-y*]补 1、首先做(x*-y*)运算,即:x*+[-y*]补 ; 2、 判断余数符号: 若余数为正(够减),则:商上“1”, 余数左移一位,继续做减除数(+[-y*]补)运算; 若余数为负(不够减),则:商上“0”; 余数左移一位,然后做加除数(+[y*]补)运算。
1、运算过程中,无论够减或是不够减,直接根据余 定点除法运算 加减交替法的算法特点: 1、运算过程中,无论够减或是不够减,直接根据余 数符号决定下一步的运算。 2、算法步数固定, 控制简单,被广泛使用。
注意: 在原码除法运算中:先写出[x]原;[y]原;[-y*]补 (1)原码除法只进行两数值(x*, y*)的相除计算。商的符号位由(xn⊕yn)直接确定。 (2)在具体计算中,减法仍然须采用补码进行计 算: +[-y*]补 实现。所以,除法运算过程是带符号的 补码运算。 加减交替法实例
[例] x=0.101001, y=- 0.111,用原码除法求:x÷y= ? [解:] [x]原=0.101001,[y]原=1.111, y*=0.111,[-y*]补=1.001 被除数x* 0.1 0 1 0 0 1 + [-y*]补(减y* ) 1.0 0 1 余数为负 1.1 1 0 0 0 1 <0 q0=0 余数左移 1.1 0 0 0 1 加y* 0.1 1 1 余数为正 0.0 1 1 0 1 >0 q1=1 余数左移 0.1 1 0 1 减y* 1.0 0 1 余数为负 1.1 1 1 1 <0 q2=0 余数左移 1.1 1 1 加y* 0.1 1 1 余数为正 0.1 1 0 >0 q3=1
故得: 商的数值 |q|=q*=0.101 余数 r=0.000110 (补码) 商的符号位: qf =xf⊕yf =0⊕1=1 ∴ [x÷y]原=[q]原= 1.101 即:x÷y= - 0.101, 余数:r=+0.00011 目前计算机主要采用阵列除法器来实现除法运算。
2.4.2 阵列除法器(并行除法器) 由除法算法可知:在除法过程中,需要根据余数的符号,确 定下一步做加法运算、或做减法运算。 ∴ 构造阵列除法器时,需要用“可控的加/减法运算单元”, 才能满足除法运算的功能需求。 与阵列乘法器非常相似,阵列式除法器也是一种并行运算 部件,采用大规模集成电路制造,能提供令人满意的高速运算。 那么,如何设计“可控的加/减法运算单元”电路呢?
1、可控加/减法(CAS)单元设计: CAS是并行除法流水逻辑阵列中的重要功能单元,它通常有四个输出端和四个输入端。 (CAS逻辑结构图见后)
(CAS单元) 增加3T延时 P=0:做加法 P=1:做减法
CAS单元逻辑方程如下: Si=Ai⊕(Bi⊕P)⊕Ci Ci+1=(Ai+Ci)·(Bi⊕P)+AiCi 定点除法运算 CAS单元逻辑方程如下: Si=Ai⊕(Bi⊕P)⊕Ci Ci+1=(Ai+Ci)·(Bi⊕P)+AiCi 当P=0时, 上式就是一位全加(FA)的公式: Si=Ai⊕Bi⊕Ci Ci+1=AiBi+BiCi+AiCi 当P=1时, 则为一位全差(FS)公式: Si=Ai⊕Bi⊕Ci Ci+1=AiBi+BiCi+AiCi 其中 Bi=Bi⊕1 这时: 输入Ci称为借位输入, 而Ci+1称为借位输出。 (加法) (减法)
2.不恢复余数的原码阵列除法器 设:参与运算的数都是正小数 (原码数值) (不恢复余数法也就是加减交替法) 设: 被除数x*=0.x1x2x3x4x5x6 (双倍长) 除数 y*=0.y1y2y3 商数 q*=0.q1q2q3 余数 r=0.00r3r4r5r6 字长 n+1=4 则: 阵列除法器(4位)逻辑结构见后图(教材P41):
商= 0.q1q2q3 余数= 0.00r3r4r5r6
它沿对角线方向进入这个阵列(避免了较慢的余数移位操作)。 定点除法运算 阵列除法器结构特点: 本例:被除数x是一个6位的小数(双倍长度值): x=0.x1x2x3x4x5x6 它是由顶部垂直输入线来提供。 除数y是一个3位的小数: y=0.y1y2y3 它沿对角线方向进入这个阵列(避免了较慢的余数移位操作)。 即: 让余数保持固定,而将除数沿对角线进入CAS阵列来实现。
由图看出, 阵列除法器是用一个可控加/减法(CAS) 单元所组成的流水阵列来实现的。 定点除法运算 商q*的数值是一个3位的小数: q*=0.q1q2q3 它在阵列的左边产生。 余数r是一个6位的小数: r=0.00r3r4r5r6 (补码形式) 它在阵列的最下一行产生。 由图看出, 阵列除法器是用一个可控加/减法(CAS) 单元所组成的流水阵列来实现的。
几点注释: 最上面一行所执行的初始操作通常是减法 (恒取P=1)。 定点除法运算 几点注释: 最上面一行所执行的初始操作通常是减法 (恒取P=1)。 减法是+[-y*]补的运算来实现。“P=1”信号又作为末位的“+1” 输入。∴ 除法运算过程是带符号的补码运算! 每一行最左边的单元的进位输出(够减为1、不够减为0)即为商的数值;其同时又作为下一行加/减操作的控制信号P。
[例23] 教材P43:x=0.101001, y=0.111, 求 x÷y。 (自阅) 定点除法运算 不恢复余数法的阵列除法器做运算时,每个CAS单元的进位延迟时间为3T单位(与或非门实现)。 ∴ 对一个(n+1)位的阵列除法器来说,考虑最大情况下的信号延 迟(进位传送),其除法执行时间为: td=(n+1)2×3T 其中:n为数的位数。 [例23] 教材P43:x=0.101001, y=0.111, 求 x÷y。 (自阅)
2.5 定点运算器的组成 2.5.1 逻辑运算 2.5.2 多功能算术逻辑运算单元 2.5.3 内部总线 2.5.4 定点运算器的基本结构
运算器:计算机中数据的加工处理部件,是CPU 的重要组成部分。 计算机中的逻辑运算: 除了算术运算之外,计算机中还存在大量的逻 定点运算器的组成 运算器:计算机中数据的加工处理部件,是CPU 的重要组成部分。 计算机中的逻辑运算: 除了算术运算之外,计算机中还存在大量的逻 辑运算,即:非数值性运算。 ——运算器另一类重要的运算与处理功能。
2.5.1 逻辑运算 示计算机所要处理或识别的一些“状态信息”。 逻辑运算主要包括: 逻辑非 基本逻辑运算: 逻辑加 逻辑乘 逻辑异 定点运算器的组成 2.5.1 逻辑运算 逻辑数:是一种非数值型的二进制数据,通常表 示计算机所要处理或识别的一些“状态信息”。 逻辑运算主要包括: 基本逻辑运算: 逻辑非 逻辑加 逻辑乘 逻辑异
“本位运算”(又称按位运算),即:不存在进位和 定点运算器的组成 逻辑运算特点: “本位运算”(又称按位运算),即:不存在进位和 借位问题。 在非数值信号的处理中,逻辑运算是非常重要的 运算(操作)之一,常用于逻辑数的比较、选取、屏 蔽、测试等操作。
1.逻辑非运算 逻辑非也称求反。对某数进行逻辑非运算, zi=xi, (i=0,1,2,…n) 就是按位求反。 xi zi
2.逻辑加运算 两个数的逻辑加又称“逻辑或”, 就是“按位或”, 常 用记号“V”或“+”来表示。 设有两数 , 它们表示为: 定点运算器的组成 2.逻辑加运算 两个数的逻辑加又称“逻辑或”, 就是“按位或”, 常 用记号“V”或“+”来表示。 设有两数 , 它们表示为: x=x0x1…xn y=y0y1…yn 若 x∨y=z=z0z1z2…zn 则 zi=xi∨yi, (i=0,1,2,…,n) [例22] x=10100001,y=10011011, 求x∨y。 [解]: 1 0 1 0 0 0 0 1 =x ∨ 1 0 0 1 1 0 1 1 =y 1 0 1 1 1 0 1 1 =z 即 x∨y = 10111011 注意与算术加的区别
两数的逻辑乘又称“逻辑与”, 就是“按位与”, 定点运算器的组成 3.逻辑乘运算 两数的逻辑乘又称“逻辑与”, 就是“按位与”, 常用记号“∧”或“·”来表示。 设有两数x和y, 它们表示为: x=x0x1…xn y=y0y1…yn 若 x∧y=z=z0z1z2…zn 则 zi=xi∧yi, (i=0,1,2,…,n) [例23] x=10111001,y=11110011, 求x∧y。 [解:] 1 0 1 1 1 0 0 1 =x ∧ 1 1 1 1 0 0 1 1 =y 1 0 1 1 0 0 0 1 =z 即 x∧y = 10110001
定点运算器的组成 4.逻辑异运算 逻辑异又称“异或”、“按位加”(按位求模2和),常用 记号“⊕”表示。 设有两数x和y: x=x0x1…xn y=y0y1…yn 若x和y的逻辑异为z: x⊕y=z=z0z1z2…zn 则 zi=xi⊕yi, (i=0,1,2,…,n) [例24] x=10101011,y=11001100, 求x⊕y。 [解:] 1 0 1 0 1 0 1 1 =x ⊕ 1 1 0 0 1 1 0 0 =y 0 1 1 0 0 1 1 1 =z 即 x⊕y = 01100111
2.5.2 多功能算术/逻辑运算单元 一个n位的行波进位加法器, 它可以方便地实现数据 的加法和减法运算。 存在的主要问题: 定点运算器的组成 2.5.2 多功能算术/逻辑运算单元 由前面讨论已知:由一位全加器(FA)可级联构成 一个n位的行波进位加法器, 它可以方便地实现数据 的加法和减法运算。 存在的主要问题: 1、由于串行进位,它的运算时间很长。这在高速计算中显然是不行的。(速度问题) 2、它只能完成加法和减法两种算术操作,无法完成逻辑操作。(功能问题) 结构简单,但存在问题!
构造多功能算术/逻辑运算单元(ALU) 期望的运算器 ①具有多种算术运算功能 ②具有多种逻辑运算功能 ③具有“并行进位”功能 ——从而满足多功能、高速运算的需求。 构造多功能算术/逻辑运算单元(ALU)
已知,一位全加器(FA)的逻辑表达式为: Fi=Ai⊕Bi⊕Ci Ci+1=AiBi+BiCi+CiAi 定点运算器的组成 图2.10 ALU的逻辑结构原理框图 1.基本思想 已知,一位全加器(FA)的逻辑表达式为: Fi=Ai⊕Bi⊕Ci Ci+1=AiBi+BiCi+CiAi 显然,全加器本身肯定无法解决ALU问题。 解决方法:将输入Ai、Bi进行组合和调整,得出不 同的组合函数Xi和Yi, 作为全加器的新输入,进而实 现多种算术运算和逻辑运算。 如图:
Cn+i+1=XiYi+YiCn+i+Cn+iXi 定点运算器的组成 一位算术/逻辑运算单元的逻辑表达式为: Fi=Xi⊕Yi⊕Cn+i Cn+i+1=XiYi+YiCn+i+Cn+iXi 其中:下标n代表芯片的片号; i为芯片上的位号,若一块ALU为4位,则:i=0, 1, 2, 3。
2. ALU的逻辑表达式 Ai 1 1 Ai + Bi 1 0 Ai Bi 0 1 1 0 0 Xi S2 S3 Yi S0 S1 定点运算器的组成 2. ALU的逻辑表达式 设:控制参数S0 ,S1 ,S2 ,S3 并且:Yi 是受“S0S1”控制的Ai和Bi的组合函数, Xi 是受“S2S3”控制的Ai和Bi组合函数, 各控制组合关系如下表所示: 表2.4 与控制参数和输入量的关系(教材P46) Ai 1 1 Ai + Bi 1 0 Ai Bi 0 1 1 0 0 Xi S2 S3 Yi S0 S1
Ai 1 1 Ai + Bi 1 0 Ai Bi 0 1 1 0 0 Xi S2 S3 Yi S0 S1 ∴ Xi和Yi的逻辑表达式: Xi= S2S3+S2S3(Ai+Bi)+S2S3(Ai+Bi)+S2S3Ai Yi=S0S1Ai+S0S1AiBi+S0S1AiBi Ai 1 1 Ai + Bi 1 0 Ai Bi 0 1 1 0 0 Xi S2 S3 Yi S0 S1 进一步化简可得: Xi=S3AiBi+S2AiBi Yi=Ai+S0Bi+S1Bi Xi Yi = S3AiBi+S2AiBi · Ai+S0Bi+S1Bi =Yi 将Xi 和Yi代入进位Cn+i+1表达式,可简化为: Cn+i+1=Yi+Xi Cn+ i
Xi=S3AiBi+S2AiBi Yi=Ai+S0Bi+S1Bi Fi=Xi⊕Yi⊕Cn+i Cn+i+1=Yi+Xi Cn+ i 定点运算器的组成 综上所述,ALU的某一位逻辑表达式如下: Xi=S3AiBi+S2AiBi Yi=Ai+S0Bi+S1Bi Fi=Xi⊕Yi⊕Cn+i Cn+i+1=Yi+Xi Cn+ i 新的一位全加器 逻辑方程
并行进位公式:(设一片ALU包含4位二进制数的运算) 第0位向第1位的进位公式为: (i=0) Cn+1=Y0+X0Cn 其中:Cn是向第0位(末位)的进位。 第1位向第2位的进位公式为: (i=1) Cn+2=Y1+X1Cn+1=(Y1+Y0X1)+X0X1Cn 第2位向第3位的进位公式为: (i=2) Cn+3=Y2+X2Cn+2=(Y2+Y1X1+Y0X1X2)+X0X1X2Cn 第3位的进位输出(即整个4位运算进位输出)公式为:(i=3) Cn+4=Y3+X3Cn+3 =(Y3+Y2X3+Y1X2X3+Y0X1X2X3)+X0X1X2X3Cn (G) (P)
Cn+4是本片(组)的最高进位输出。逻辑表达式表 定点运算器的组成 设: G=Y3+Y2X3+Y1X2X3+Y0X1X2X3 P=X0X1X2X3 则:Cn+4=G+PCn (Cn是向第0位(最低位)的进位) Cn+4是本片(组)的最高进位输出。逻辑表达式表 明: 第0位的进位输入Cn可以直接传送到最高位Cn+4 上去(并行进位逻辑),因而可以实现高速运算。
对一片四位ALU芯片来说,共有三个进位输出: G、P、Cn+4 。 其中:G称为进位发生输出,P称为进位传送输出。 G=Y3+Y2X3+Y1X2X3+Y0X1X2X3 P=X0X1X2X3 G、P可用于实现多片(组)ALU之间的并行进位形成。 配合电路:称为并行进位发生器(CLA),后面介绍。 仅为输入数据的逻辑组合 ∴ Cn+4(=G+PCn) 几乎与Cn同时产生!
图2.11(教材P48)给出了用正逻辑表示的4位 算术/逻辑运算单元(ALU)的逻辑电路图,它是根据 上面的原始推导公式用TTL电路实现的。 定点运算器的组成 图2.11(教材P48)给出了用正逻辑表示的4位 算术/逻辑运算单元(ALU)的逻辑电路图,它是根据 上面的原始推导公式用TTL电路实现的。 这个器件的商业标号为:74181ALU。 该芯片的逻辑电路图:略
P G+Cn G=G+P Cn=Cn+4 X0X1X2X3 =P 函数发生器 G=Y3+Y2X3+Y1X2X3+Y0X1X2X3 Y0=A0 +S0B0+S1B0 X0=S3A0 B0+S2A0B0 函数发生器 G=Y3+Y2X3+Y1X2X3+Y0X1X2X3
B3 A3 …… B0 A0 (4位并行ALU芯片——74181管脚图) 运算结果输出 本片最高位进位 算术/逻辑 运算控制 用于多片级连 数据输入 (4位并行ALU芯片——74181管脚图)
控制ALU进行算术运算或逻辑运算。 3. 算术/逻辑运算的实现 控制端M的作用 : 当M=0: 允许进位信号Cn 参与各位运算。 定点运算器的组成 3. 算术/逻辑运算的实现 控制端M的作用 : 控制ALU进行算术运算或逻辑运算。 当M=0: 允许进位信号Cn 参与各位运算。 —— 进行“算术操作”。 (各位带着进位操作) 当M=1: 封锁了各位的进位, 即 Cn=0, —— 进行“逻辑操作”。(本位操作) ∴ 74181ALU功能:16种算术运算、16种逻辑运算。 ( 见教材P48表2.6)
74181ALU芯片设有“A=B”输出端,可直接指 注意: 74181ALU芯片设有“A=B”输出端,可直接指 示两个数相等。因此,可以快速地检测两个输入数 A、B是否相等。 Cn+4=G+PCn
已知,74181ALU只是一个四位的并行ALU芯片, 如何构造多位长的并行ALU呢? 定点运算器的组成 4. 多位长ALU的构造 已知,74181ALU只是一个四位的并行ALU芯片, 如何构造多位长的并行ALU呢? —— 可以采用多片181芯片级联方法来实现。 74181 … … (4位) (4位) (4位) 这样简单级联可以吗? 不是全并行! (片内并行、片间串行)
全并行实现方法: 将各片74181的Pi、Gi都输出送入到上一级并行 进位部件(74182 CLA)上,用第二级实现并行进位 (即:片与片之间实现全并行进位),即可构造出满足 需要的多位长ALU。
设:4片74181的并行进位输出依次为: P0, G0; G1, P1; P2, G2; P3, G3 (都立即可得) 则,并行进位部件(74182CLA)所提供的进位逻辑关系如下:
第1片(74181) 第2片 第3片 第4片 Cn+x=G0+P0Cn Cn+y=G1+P1Cn+x =G1+G0P1+P0P1Cn Cn+z=G2+P2Cn+y =G2+G1P2+G0P1P2+P0P1P2Cn Cn+4 =G3+P3Cn+z =G3+G2P3+G1P2P3+G0P1P2P3 +P0P1P2P3Cn =G*+P*Cn 其中: G*=G3+G2P3+G1P2P3+G0P1P2P3 P*=P0P1P2P3 第1片(74181) 第2片 第3片 第4片 各片ALU进位信号Gi, Pi的逻辑组合
根据以上表达式, 成组并行进位部件74182的逻辑 电路图如图2.12所示。 其中:G*称为成组进位发生输出; P*称为成组进位传送输出。 根据以上表达式, 成组并行进位部件74182的逻辑 电路图如图2.12所示。 其中:G*称为成组进位发生输出; P*称为成组进位传送输出。 P* =P0 P1 P2P3 =P0 + P1 + P2+P3 G*=G3+G2P3+ G1P2P3 +G0P1P2P3 =G3(G2+P3)( G1+P2+P3 )(G0+P1+P2+P3 ) =G3P3+P2G2G3+ P1G1G2G3+G0G1G2G3
定点运算器的组成 74182 (教材P49) CAI
用四片181和一片182芯片,即可构成一个具有全并行进位的16位运算器(ALU),见下图: 注意与简单级联的区别! Cn+z Cn+y Cn+x (16位全并行ALU) 182
并行进位部件CLA在一起,可以方便地构成 多字长的并行ALU。 定点运算器的组成 可见: 用若干个74181ALU位片, 与配套的74182 并行进位部件CLA在一起,可以方便地构成 多字长的并行ALU。
例: 试用74181、74182芯片, 组成一个32位ALU。 (见下图) 这是32位全并行ALU吗? (组内并行进位,组间串行进位) 否
∴ 本例不是32位全并行进位ALU! 全并行实现方法:可采用多级CLA。 例:用两级CLA器件,可以组成一个64位的全并行进位的ALU。(见下图)
例:用74182和74181芯片组成一个64位全先行进位的ALU
可见:采用多级CLA结构,可以用4位并行ALU芯片(74181)方便地组成多字长、全并行ALU.
2.5.3 内部总线 总线概念: 为了简化内部结构与控制, 计算机通常将部件之 间数据交换通路加以归并, 组成总线结构, 使不同部 为了简化内部结构与控制, 计算机通常将部件之 间数据交换通路加以归并, 组成总线结构, 使不同部 件的信息在共用传输线上分时传送。 由于信息加工与传送是计算机内部的主要工作过程, 总线结构与性能会直接影响信息的交换效率。 ∴ 内部总线结构对计算机性能有很大的影响。
外部总线:指系统总线, 即CPU与存储器、I/O系 统之间的连线。 本节讨论的是内部总线。 根据总线所在位置,总线分为内部总线和外部总 线两类: 内部总线:指CPU内各部件之间的连线; 外部总线:指系统总线, 即CPU与存储器、I/O系 统之间的连线。 本节讨论的是内部总线。
按总线的逻辑结构来说, 总线可分为单向传送总 线和双向传送总线。 单向总线: 信息只能向一个方向传送。 双向总线: 信息可以分两个方向传送, 既可以发送数据, 也可以接收数据。
例如:(1)图示是带有缓冲驱动器的4位双向数据总线。 其中所用的基本缓冲驱动电路就是三态门逻辑电路。 双向总线 当“发送”信号有效时, 内部总线 例如:(1)图示是带有缓冲驱动器的4位双向数据总线。 其中所用的基本缓冲驱动电路就是三态门逻辑电路。 双向总线 当“发送”信号有效时, 数据从左向右传送。 当“接收”信号有效时, 数据从右向左传送。
这种带缓冲器的总线通常又称为总线扩展器、总 线驱动器、总线接收器等,是典型的双向总线结构。 (2)带锁存器的双向数据总线(右图) 锁存: Qn+1=D 发送: Qi=Di
2.5.4 定点运算器的基本结构 组、多路开关、三态缓冲器、数据总线等逻辑部件。 —— 运算器通常集成在CPU芯片中。 运算器组成:包括ALU、阵列乘/除法器、寄存器 组、多路开关、三态缓冲器、数据总线等逻辑部件。 —— 运算器通常集成在CPU芯片中。 运算器的设计: 主要是围绕ALU和寄存器组与数 据总线之间如何建立“数据通道”。 目前,常规计算机CPU中的运算器大体有如下 三种总线结构形式:单总线、双总线、三总线。 (CAI演示)
1.单总线结构的运算器 结构特点: 所有部件都接到同一总线上,数据可以通过总线 在任何两个部件之间传送。如果运算器包含阵列乘法 定点运算器的基本结构 1.单总线结构的运算器 结构特点: 所有部件都接到同一总线上,数据可以通过总线 在任何两个部件之间传送。如果运算器包含阵列乘法 器或除法器,结构与ALU类似。(见后图) 工作特点: 在同一时间内,只能有一个操作数在单 总线上传送。 若有两个操作数要送到ALU,则需要分两次来送, 而且还需要A、B两个缓冲寄存器。
这种结构的总线控制简单,但操作速度较慢。 A B 这种结构的总线控制简单,但操作速度较慢。
注意到: 并不是对每种指令都增加很多执行时间。 只有两个操作数都在CPU内部寄存器中时,单总线 结构的运算器才会具有一定的时间延迟。 定点运算器的基本结构 注意到: 本节讨论的是CPU内部的总线, 在单总线结构中, 并不是对每种指令都增加很多执行时间。 只有两个操作数都在CPU内部寄存器中时,单总线 结构的运算器才会具有一定的时间延迟。 如果是外部总线送来的操作数,则没有这种延迟 (见后图)。
外部数据A 外部数据B A B 存结果
∴ 现代CPU的内部一般都采用多总线结构 (2) 这种结构只需控制一条总线,故控制电路比较简 单、扩展方便。
2.双总线结构的运算器 结构特点:内部总线设两条,两个操作数可以同时 加到ALU进行运算,可以迅速得到运算结果。 特殊寄存器分为两组,通用寄存器中的数可送入到 任一组特殊寄存器中去,数据传送更为灵活。 在双总线结构的运算器中,操作的控制要分两步完成: 1、 在ALU的两个输入端输入操作数,形成结果并送 入输出缓冲寄存器; 2、把结果送入目的寄存器。
存结果 选通延时
注意到:ALU的输出不能直接加到总线上去。 因为:当形成操作结果的输出时, 两条总线都被输 入数占据,因而必须在ALU输出端设置缓冲寄存器。 定点运算器的基本结构 注意到:ALU的输出不能直接加到总线上去。 因为:当形成操作结果的输出时, 两条总线都被输 入数占据,因而必须在ALU输出端设置缓冲寄存器。 也可以在ALU输入端加输入缓冲寄存器, 把输 入数先放至缓冲寄存器,则:ALU输出端就可以 直接把操作结果通过总线1或总线2送到目的寄存器 保存。
Y Z
3.三总线结构的运算器 在三总线结构的运算器结构中,ALU的两个输入 端分别由两条总线供给,而ALU的输出则与第三条总 定点运算器的基本结构 3.三总线结构的运算器 在三总线结构的运算器结构中,ALU的两个输入 端分别由两条总线供给,而ALU的输出则与第三条总 线相连。这样,算术逻辑操作就可以在一步的控制之 内完成。 (数据通路见后图)
总线旁路器:如果操作数不需要修改,可以 通过总线旁路器控制实现总线间数据快速交换。 三个总线各自传不同数据,不会发生冲突。 专用 选通延时
三总线结构的运算器的最大特点是操作时间明显加快。 可见:随着总线条数的增加,运算器的处理速度和效率会明显提高。同时,控制的复杂度也会随之加大。 第六章将详细介绍现代总线结构。
2.6 浮点运算方法和浮点运算器 2.6.1 浮点加法、减法运算 2.6.2 浮点乘法、除法运算 2.6.3 浮点运算流水线 2.6.4 浮点运算器实例
2.6.1 浮点加法、减法运算 已知,两个浮点数x和y分别为: x=2Ex·Mx y=2Ey·My 其中:Ex和Ey分别为数x和y的阶码, 定点运算器的基本结构 2.6.1 浮点加法、减法运算 已知,两个浮点数x和y分别为: x=2Ex·Mx y=2Ey·My 其中:Ex和Ey分别为数x和y的阶码, Mx和My为数x和y的尾数(通常约定为纯小数)。 两浮点数进行加法和减法的运算规则是: x±y= 2Ex·Mx±My2Ey = (Mx2Ex-Ey±My)2Ey, Ex≤ Ey 先对阶、再计算
∴ 浮点加/减运算的操作过程大体分为四步: 1. 0 操作数的检查; 2. 比较阶码大小、完成对阶; 3. 尾数进行加/减运算; 4. 结果IEEE754规格化处理和舍入处理。 浮点加减运算的操作流程:见教材P52
尾数相加减 结果规格化 0操作数检查 对阶操作 (CAI演示)
浮点加减运算过程比定点运算过程繁琐得多。 浮点运算 (1) 0操作数检查 浮点加减运算过程比定点运算过程繁琐得多。 当浮点计算:z=x±y: 若 y=0, 则直接有:z=x; 若 x=0,则直接有:z=±y 结果可以直接得到,无需计算,以节省运算时间。 —— 0操作数检查步骤则用来完成这一功能。
(2) 比较阶码大小、完成对阶 对阶:即把两数的小数点位置对齐 若阶码相同,表示小数点是对齐的,尾数可以直接进行加减运算。 浮点运算 (2) 比较阶码大小、完成对阶 对阶:即把两数的小数点位置对齐 若阶码相同,表示小数点是对齐的,尾数可以直接进行加减运算。 若阶码不同,表示小数点位置没有对齐, 必须先使二数阶码相同, 这个过程叫作对阶。
计算机实现“对阶”的方法: 设:先求出两数阶码Ex和Ey之差: △E = Ex-Ey 然后测试: 若△E=0,表示 Ex=Ey; 若△E>0,表示Ex>Ey; 若△E<0,表示Ex<Ey。 当Ex≠Ey 时,要通过尾数的移动来改变阶码, 使 Ex=Ey。 —— 对阶过程
若尾数左移:会丢失高位有效数位,造成很大误差。 若尾数右移:只丢失最低有效数位,造成的误差较小。 ∴ 规定:一律采用尾数右移, 尾数每右移一 浮点运算 若尾数左移:会丢失高位有效数位,造成很大误差。 若尾数右移:只丢失最低有效数位,造成的误差较小。 ∴ 规定:一律采用尾数右移, 尾数每右移一 位,其阶码相应+1。 即:在对阶时,总是增加小阶,直至等于大阶为止 (阶差△E= 0),称作:小阶向大阶看齐。 原则: 尾数每右移一位, 其阶码应加1。
(3) 尾数运算 对阶结束后,即可进行尾数的加/减运算。 注意,补码右移规则: 浮点运算 注意,补码右移规则: 例: [x]补=0.1101×2r = 0.01101×2r+1 [y]补= 1.1001×2r = 1.11001×2r+1 需连同符号一起右移 (3) 尾数运算 对阶结束后,即可进行尾数的加/减运算。 方法与前述的定点加/减法运算完全一样。
尾数运算溢出的处理: 在浮点加减运算时, 若尾数运算的结果溢出,则 结果的双符号位不相同: 01.xx…x或10.xx…x, 这在 在浮点加减运算时, 若尾数运算的结果溢出,则 结果的双符号位不相同: 01.xx…x或10.xx…x, 这在 定点加减法运算中要作为”溢出中断”处理的。 在浮点运算中,则可以通过将运算结果右移的方 法,消除溢出并得到正确结果,这称为尾数的向右规 格化。 规则:尾数右移1位,阶码加1。 例:01.01101×2r = 0.101101×2r+1 (正确结果)
(4) 结果IEEE标准规格化处理 IEEE规格化原则: IEEE754浮点数标准中,对尾数M需要注意如下2点: 浮点运算 (4) 结果IEEE标准规格化处理 IEEE规格化原则: IEEE754浮点数标准中,对尾数M需要注意如下2点: ① M取的是真值,符号由符号位S表示。 ∴ 补码运算结果[M]补应当先转换为原码[M]原,以得到M的数值M*。 ② 调整阶码E,将M*调整为:1.M的形式。
③ 若尾数数值为非标准化数,则应当通过 “尾数左移、阶码减1”的方法,使其符合标准。 例: M*=+0.01101×2e → ? M*=-0.11001×2e → ? +1.101 ×2e-2 =+1.M×2e-2 -1.1001 ×2e-1 =-1.M×2e-1 规则:尾数左移1位,阶码减1。
(5) 舍入处理 在对阶过程中,被右移的尾数的低位部分会被丢 掉,从而造成一定误差,因此要进行舍入处理。 简单的舍入方法有两种: 浮点运算 (5) 舍入处理 在对阶过程中,被右移的尾数的低位部分会被丢 掉,从而造成一定误差,因此要进行舍入处理。 简单的舍入方法有两种: ① “0舍1入”法。以正数尾数为例: 如果右移时被丢掉数位的最高位为“0”则舍去;为“1” 则将尾数的末位加“1”。 (举例……) ② “恒置1”法: 只要数位被移掉,就将尾数的末 尾恒置“1”。 在IEEE754标准中,舍入处理提供了多种可选方法。 (略)
就近舍入 尾数超出规定的23位的多余位数字是10010,多 余位的值超过规定的最低有效位值的一半,故 浮点运算 就近舍入 其实质就是通常所说的“四舍五入”。例如, 尾数超出规定的23位的多余位数字是10010,多 余位的值超过规定的最低有效位值的一半,故 最低有效位应增1。若多余的5位是01111,则简 单的截尾即可。对多余的5位10000这种特殊情 况:若最低有效位现为0,则截尾;若最低有效 位现为1,则向上进一位使其变为0。
对值比原值的绝对值小。这种方法容易导致误 差积累。 浮点运算 朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。 无论尾数是正数还是负数,截尾都使取值的绝 对值比原值的绝对值小。这种方法容易导致误 差积累。
朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。无论尾数是正数还是负数,截尾都使取 值的绝对值比原值的绝对值小。这种方法容易导致误差积累。 浮点运算 朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。无论尾数是正数还是负数,截尾都使取 值的绝对值比原值的绝对值小。这种方法容易导致误差积累。 朝+∞舍入 对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说则是简单的 截尾。 朝-∞舍入 处理方法正好与 朝+∞舍入情况相反。对正数来说,只要多余位不全为0则 简单截尾;对负数来说,向最低有效位进1。
(6) 浮点数的溢出 溢出的类型: 浮点数“上溢” 浮点数“下溢” —— 特征:以“阶码是否溢出”作为标志。
这时,机器必须做“溢出中断处理”。(数据出错) 下溢的表现特征:阶码“下溢”,即:机器浮点数 值小于±最小值。 浮点运算 当机器浮点数值大于±最大值时,称为上溢。 上溢的表现特征:阶码运算值“上溢”。 这时,机器必须做“溢出中断处理”。(数据出错) 下溢的表现特征:阶码“下溢”,即:机器浮点数 值小于±最小值。 显然,下溢不是一个严重问题,通常看作为 机器零。
-∞ +∞ 可见: 在运算过程中,只要检查浮点数的阶码是否溢出, 即可判断是否溢出,再进行相应处理。 +∞ 可见: 在运算过程中,只要检查浮点数的阶码是否溢出, 即可判断是否溢出,再进行相应处理。 为了便于判断溢出,阶码可以采用双符号位补码进 行运算。
小结: 阶码上溢: 阶码超过了最大的正数值,浮点数溢出! 一般认为该浮点数是+∞和-∞。 阶码下溢: 阶码超过了最小的负数值, 浮点运算 小结: 阶码上溢: 阶码超过了最大的正数值,浮点数溢出! 一般认为该浮点数是+∞和-∞。 阶码下溢: 阶码超过了最小的负数值, 一般认为该浮点数=0。 尾数溢出:将尾数右移,阶码增1,即可恢复,得到 正确尾数结果。 注意:IEEE754约定:阶码E用移码表示,并且规定: 当E为全0时,为阶码下溢; 当E为全1时,为阶码上溢。
[例] 设浮点数均以补码表示,阶码、尾数都采用双符号位,数值取8位。已知: x=2+010×0.11011011, y=2+100×(-0.10101100), 按浮点数运算方法,求x+y。 [解]:x、y的浮点表示分别为:(设尾数、阶码都用补码) [x]浮=00 010, 00.11011011 [y]浮=00 100, 11.01010100
即:x的阶码小,应使Mx右移两位,Ex+2 = Ey=+100 ∴ [x]浮=00 100, 00.00110110(11) [x]浮=00 010, 0.11011011 [y]浮=00 100, 1.01010100 <1> 求阶差并对阶 △E=Ex-Ey=-2 即:x的阶码小,应使Mx右移两位,Ex+2 = Ey=+100 ∴ [x]浮=00 100, 00.00110110(11) 其中:(11)表示被移出的最低两位数。 <2> 尾数求和 00. 0 0 1 1 0 1 1 0 (11) + 11. 0 1 0 1 0 1 0 0 11. 1 0 0 0 1 0 1 0 (11)
∴ 结果尾数:[M]补 = 11. 10001010 (11) <3>尾数规格化处理 已知:[M]补 = 11. 10001010 (11) → [M]原 = 11. 01110101(01) ∴ M*= -0.01110101(01) 执行左规处理,结果为:-1.11010101 = -1.M 尾数左移2位,阶码减2:00 100-00 010= 00 010 ∴ [x+y]浮 = 2+010×(-1.11010101)
<4>舍入处理 本例无需处理。 <5>判溢出 ∵ 阶码运算结果:00 010, 符号位为00, ∴ 没有溢出。 浮点运算 <4>舍入处理 本例无需处理。 <5>判溢出 ∵ 阶码运算结果:00 010, 符号位为00, ∴ 没有溢出。 故得最终结果为: x+y= -2+010×(1.11010101)
求 x +y(除阶符、数符外,阶码取 3 位,尾数取 6 位) 解: 例:已知 x = 0.1101× 2+10 y = 0.1011× 2+01 求 x +y(除阶符、数符外,阶码取 3 位,尾数取 6 位) 解: [x]补 = 00, 010; 00.110100 [y]补 = 00, 001; 00.101100 ① 对阶 [ΔE]补 = [Ex]补 – [Ey]补 = 00 001 阶差为 +1, y为小阶数,需调整阶码: ∴ [y]补' = 00 010; 00.010110(0) ② 尾数求和 [Mx]补 = 00. 110100 + [My]补' = 00. 010110 对阶后的[My]补' 01. 001010 尾数=+1.00101
∵ 阶码:00 010,运算无溢出 ∴ x +y = +1.00101 × 2+010 ④ 舍入处理 (1) 0舍1入法 (本例无数位丢失) (2) 恒置 “1” 法 教材P54~55: [例28]、[例29] (自阅)
2009年全国研究生入学考题: (略) 13. 浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7位(均含2位符号位)。若有两个数X=27×29/32,Y=25×5/8,则用浮点加法计算X+Y的最终结果是 A. 00111 1100010 B. 00111 0100010 C. 01000 0010001 D. 发生溢出 答案:D 考点:浮点数加法运算 双符号位法溢出判断:阶码溢出
2.6.2 浮点乘法、除法运算 可见:乘除法不存在对阶的问题。 1.浮点乘法、除法运算规则 设有两个浮点数x和y: x=2Ex·Mx 浮点乘法运算的规则是: x×y=2(Ex+Ey)·(Mx×My) 即:阶码相加;尾数相乘。 (当然, 也包括有规格化与舍入等步骤) 浮点除法运算的规则是: x÷y=2(Ex-Ey)·(Mx÷My) 即:阶码相减;尾数相除。 (也包括有规格化和舍入等步骤) 可见:乘除法不存在对阶的问题。
2.浮点乘、除法运算步骤 浮点数的乘除运算大体分为四步: 第一步,0 操作数检查; 第二步,阶码加/减操作;(定点加/减法器完成) 浮点乘法、除法运算 2.浮点乘、除法运算步骤 浮点数的乘除运算大体分为四步: 第一步,0 操作数检查; 第二步,阶码加/减操作;(定点加/减法器完成) 第三步,尾数乘/除操作;(阵列乘/除法器完成) 第四步,结果规格化及舍入处理。 自阅教材P57:例30、例31
2.6.3 浮点运算流水线 什么叫流水处理技术? 流水处理是一种实现时间并行、任务并行的非 常有效的并行处理方法,其可以大幅度地提高计算 机系统的经济性和性能指标。 流水处理技术是基于什么原理?
1. 流水线原理 为了实现流水,首先必须把输入的任务分割为一系列的子任务{Ti}. 当任务连续不断地输入流水线,各任务的子任务{Ti}能在流水线的各个阶段并发地执行,进而实现各输入任务的并行处理。 如何理解?
例如:汽车装配流水线 出口:3分钟/辆
在流水线中,原则上要求各个阶段的处理时间都 浮点运算流水线 在流水线中,原则上要求各个阶段的处理时间都 大致相同,避免其它阶段的空转等待。 ∴ 各子任务的合理划分,将对流水线的性能产生较 大影响,它取决于操作部分的效率、所期望的处理速 度,以及成本价格等。 信息的流水处理技术是当代计算机普遍采用的技 术。
假定: 作业 T 被分成 k 个子任务, 可表达为: T={T1,T2,···,Tk} 各个子任务之间有一定的顺序关系: 若i<j, 则必须在 Ti 完成以后, Tj才能开始工作。 —— 线性流水线的基本特征。 线性流水线处理的硬件基本结构如图所示。
浮点运算流水线 处理一个子任务 的过程 高速缓冲寄存器 统一的时钟 CAI演示
∴ 对应有:流水线处理的频率为:f=1/τ。 浮点运算流水线 设:处理一个子任务的过程为过程段(Si)。线性 流水线的各个过程之间需设有高速的缓冲寄存器(L), 以暂存上一过程子任务处理的结果。 在一个统一的时钟(C)控制下,数据从一个过程段 流向相邻的过程段。 设:过程段 Si所需的时间为τi, 缓冲寄存器的延 时为τl, 线性流水线的时钟周期定义为: τ=max{τi }+τl=τm+τl ∴ 对应有:流水线处理的频率为:f=1/τ。
在流水线处理中,当任务饱满时,任务源源不断的 输入流水线,由于各过程段并行执行,每隔一个时钟 周期τ,在出口都能输出一个已完成任务。
∴ 从理论上说,一个具有k 级过程段的流水线处理 n 个任务,所需要的时钟周期数为: Tk=k+(n-1) 其中:k个时钟周期用于处理第一个任务。 显然:如果用非流水线的硬件来处理这n个任务,时 间上只能串行进行,则所需时钟周期数为: TL=n·k
由上式可以得出:当 n>>k 时, Ck k 。 可见:理想情况下,k级线性流水线处理速度几 浮点运算流水线 ∴ k级线性流水线的加速比定义: Ck= = 由上式可以得出:当 n>>k 时, Ck k 。 可见:理想情况下,k级线性流水线处理速度几 乎可以达到非流水线的k 倍(加速比=k)。 当然:由于各种因素的制约,这个理想的加速比 不一定能达到。(后面讨论) TL Tk n·k k+(n-1)
2. 浮点加法器的流水结构(教材P58-59) 已知:浮点数加减法由0操作数检查、对阶操作、 尾数计算、结果规格化及舍入处理共4步完成,因此 流水线浮点加法器可由4个过程段组成。若不考虑0操 作数检查,则流水线浮点加法器的三级子过程如下: (1)求阶差、对阶; (2)尾数计算; (3)规格化及舍入处理 流程框图:
① ② ③
[例32] 某4级浮点流水线中, (1) 假设每个过程段所需的 时间分别为: 浮点运算流水线 [例32] 某4级浮点流水线中, (1) 假设每个过程段所需的 时间分别为: 求阶差 τ1=70ns,对阶 τ2=60ns,相加τ3=90ns, 规格化 τ4=80ns,缓冲寄存器L的延时为 tl=10ns。 求: (1) 4级流水线加法器的加速比为多少? (2) 如果每个过程段的时间相同,即都为75ns, (包括缓冲寄存器时间),加速比是多少?
[解]: (1) 加法器的流水线时钟周期至少为: τ=max{τi}+10ns=90ns+10ns=100ns 当流水线充满后,每100ns就会完成一对浮点加法。 如果采用同样的逻辑电路,但不是流水线方式, 则一对浮点数加法所需的时间为: τ1+τ2+τ3+τ4 =300ns 因此,4级流水线加法器的加速比为: Ck=300/100=3 (2) 当每个过程段的时间(包括缓冲延迟)都是75ns时, 加速比为: Ck=300/75=4
[例33] 已知计算一维向量x,y的求和表达式如下: x y z 浮点运算流水线 [例33] 已知计算一维向量x,y的求和表达式如下: x y z 试用4段的浮点加法流水线来实现一维向量的求 和运算,这4段流水线是阶码比较、对阶操作、尾数 相加、规格化。只要求画出向量加法计算流水时空图。 56 20.5 114.3 69.6 3.14 65 14.6 336 7.2 72.8 1.41 121 35.1 336 121.5 142.4 4.55 = +
运算流水线对成组数据的计算具有很大的优越性, 流水线具有较高的加速比和吞吐率。 假设用字母C、S、A、N 分别表示流水线的阶码比较 浮点运算流水线 [解]: 运算流水线对成组数据的计算具有很大的优越性, 流水线具有较高的加速比和吞吐率。 假设用字母C、S、A、N 分别表示流水线的阶码比较 、对阶操作、尾数相加、规格化四个段,那么向量加法 计算的流水时空图如图所示。 CAI演示
各处理子过程的并行处理
可见: 受益于并行处理技术的实现,当成组数据{Xi,Yi}源源不断地输入流水线,每隔一个传送时钟周期,流水线便吐出一对浮点运算结果Zi。 —— 大大提高了浮点运算处理速度。
2.6.4 浮点运算器实例 (自阅) 1.CPU之外的浮点运算器 本章小结 80×87是美国Intel公司为处理浮点数等数据的算术 运算和多种函数计算而设计生产的专用算术运算处理 器。由于它们的算术运算是配合80×86CPU进行的, 所以又称为协处理器。 现以80×87浮点运算器为例,说明其特点和内部 结构。 本章小结
(1)以异步方式与80386并行工作,80×87相当于386的一 个I/O部件,本身有它自己的指令,但不能单独使用,它只能 浮点运算器实例 (1)以异步方式与80386并行工作,80×87相当于386的一 个I/O部件,本身有它自己的指令,但不能单独使用,它只能 作为386主CPU的协处理器才能运算。因为真正的读写主存的工 作不是80×87完成,而是由386执行的。如果386从主存读取的 指令是80×87浮点运算指令,则它们以输出的方式把该指令送 到80×87,80×87接受后进行译码并执行浮点运算。80×87进 行运算期间,386可取下一条其他指令予以执行,因而实现了 并行工作。如果在80×87执行浮点运算指令过程中386又取来 了一条80×87指令,则80×87以给出“忙”的标志信号加以拒绝, 使386暂停向80×87发送命令。只有待80×87完成浮点运算而 取消“忙”的标志信号以后,386才可以进行一次发送操作。
(2)可处理包括二进制浮点数、二进制整数、和 浮点运算器实例 (2)可处理包括二进制浮点数、二进制整数、和 压缩十进制数串三大类7种数据,其中浮点数的格式 符合IEEE754标准。7种数据类型在寄存器中表示如下: 字整数(16位整数) (二进制补码) 字整数(32位整数) (二进制补码) 字整数(64位整数) (二进制补码) 短实数(32位整数) 长实数(64位浮点数) 临时实数(80位浮点数) 十进数串(十进制18位) S 15位 S 31位 S 63位 S 阶码 尾数(23位) S 阶码 尾数(52位) S 阶码 尾数(64位) S -- d17d16 … d1d0
上面的表格中S为一位符号位,0代表正,1代表 负。三种浮点数阶码的基值均为2。阶码值用移码表 浮点运算器实例 上面的表格中S为一位符号位,0代表正,1代表 负。三种浮点数阶码的基值均为2。阶码值用移码表 示,尾数用原码表示。浮点数有32位、64位、80位三 种。80×87从存储器取数和向存储器写数时,均用80 位的临时实数和其他6种数据类型执行自动转换。全 部数据在80×87中均以80位临时数据的形式表示。因 此80×87具有80位字长的内部结构,并有八个80位字 长以“先进后出”方式管理的寄存器组,又称寄存器堆 栈。
出,它不仅仅是一个浮点运算器,还包括了执行数据 运算所需要的全部控制路线。就运算部分讲,有处理 浮点运算器实例 图2.20示出80×87的内部结构逻辑框图。由图看 出,它不仅仅是一个浮点运算器,还包括了执行数据 运算所需要的全部控制路线。就运算部分讲,有处理 浮点数指数部分的部件和处理尾数部分的部件,还有 加速移位操作的移位器路线,它们通过指数总线和小 数总线与八个80位字长的寄存器堆栈相连接。这些寄 存器按“先进后出”方式工作,此时栈顶被用作累加器; 也可以按寄存器的编号直接访问任何一个寄存器。 为了保证操作的正确执行,80×87内部还设置了三个 各为16位字长的寄存器,分别为:特征寄存器、控制 寄存器和状态寄存器。
特征寄存器用每两位表示寄存器堆栈中每个寄存器的状态, 即特征值为00—11四种组合时表明相应的寄存器有正确数据、 浮点运算器实例 特征寄存器用每两位表示寄存器堆栈中每个寄存器的状态, 即特征值为00—11四种组合时表明相应的寄存器有正确数据、 数据为0、数据非法、无数据四种情况。 控制字寄存器用于控制80287的内部操作。 状态字寄存器用于表示80287的结果处理情况,例如当“忙” 标志为1时,表示正在执行一条浮点运算指令,为0则表示 80×87空闲。状态寄存器的低6位指出异常错误的6种类型,与 控制寄存器低6位相对应。当对应的控制寄存器位为0(未屏蔽) 而状态寄存器位为1时,因发生某种异常错误而产生中断请求。
2.CPU之内的浮点运算器 奔腾CPU将浮点运算器包含在芯片内。浮点运算部件采用 流水线设计。 浮点运算器实例 2.CPU之内的浮点运算器 奔腾CPU将浮点运算器包含在芯片内。浮点运算部件采用 流水线设计。 指令执行过程分为8段流水线。前4 段为指令预取(DF)、 指令译码(D1)、地址生成(D2)、取操作数(EX),在U、V流水线 中完成;后4段为执行1(X1)、执行2(X2)、结果写回寄存器堆 (WF)、错误报告(ER),在浮点运算器中完成。一般情况下,由 U流水线完成一条浮点数操作指令。 浮点部件内有浮点专用加法器、乘法器和除法器,有8个 80位寄存器组成的寄存器堆,内部的数据总线为80位宽。因此 浮点部件可支持IEEE754标准的单精度和双精度格式的浮点数。 另外还使用一种称为临时实数的80位浮点数。对于浮点数的取 数、加法、乘法等操作,采用了新的算法,其执行速度是 80486的10倍多。
第二章小结 本章以运算方法及运算器为主要内容,探讨了计 算机实现各类运算的基本原理与实现方法。 主要概念有: 1、 一个定点数由符号位和数值域两部分组成。 按小数点位置不同,定点数有纯小数和纯整数两种 表示方法。 2、 按 IEEE754标准,一个浮点数由符号位S、 阶码E、尾数M三个域组成。其中阶码E的值等于 指数的真值e加上一个固定偏移值。
3、 为了计算机能直接处理十进制形式的数据,采用两种十进制数据的表示形式: ⑴ 字符串形式(ASCII码),主要用在非数值计算 的应用领域; ⑵ 压缩的十进制数串形式(BCD码),用于存储或直 接完成十进制数的算术运算。
码、反码、补码、移码。其中,移码以定点整数为主, 主要用于表示浮点数的阶码E。 5、字符信息属于符号数据,属于非数值处理方 第二章小结 4、 数据变成机器码时,有四种表示方法:原 码、反码、补码、移码。其中,移码以定点整数为主, 主要用于表示浮点数的阶码E。 5、字符信息属于符号数据,属于非数值处理方 法,国际上普遍采用的字符系统是ASCII码。
6、计算机对于汉字的输入、处理及输出,采用 输入编码、汉字内码、字模码等三种不同用途的编码来完成处理任务。 7、为简化运算器的构造,在运算方法中,算术运算通常采用补码加减法,原码乘除运算。乘除法主要由硬件电路快速完成。
8、 为了运算的高速性和控制的简单性,运算器组成结构中采用了具有先行进位的ALU、阵列乘/除法器、流水线结构等并行处理技术。 9、现代CPU的内部一般都采用多总线结构。 10、 定点运算器和浮点运算器的结构复杂程度有所 不同。浮点加减运算通常包括等多个处理子过程。
(下章讨论: 多层次存储器) 11、浮点运算器通常采用流水线处理结构,来加速 处理过程。 作业(书P62): 2、5(1、2)、6(1、2)、7(1)、8(1)、9(1)、11、12(1、2) (下章讨论: 多层次存储器)