浮点运算器发展
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浮点运算器
浮点运算器是进行浮点运算的结构。现阶段是用电路来实现,应用在计算机芯片中。是整数运算器之后的一大发展,因为在浮点运算器发明之前,计算机中的浮点运算是都是用整数运算来模拟的,效率十分低下。
浮点数表示法:由于所需表示的数值取值范围相差十分悬殊,给存储和计算带来诸多不便,因此出现了浮点运算法。
浮点表示法,即小数点的位置是浮动的。其思想来源于科学计数法。IEEE754的浮点数(比较特殊)浮点数的规格化:主要解决同一浮点数表示形式的不唯一性问题。规定,否则尾数要进行左移或右移。
机器零的概念:尾数为0或是阶码值小于所能表示的最小数。
浮点运算器的一般结构
浮点运算可用两个松散连接的定点运算部件来实现:即阶码部件和尾数部件,浮点运算器的一般结构尾数部件实质上就是一个通用的定点运算器,要求该运算器能实现加、减、乘、除四种基本算术运算。其中三个单字长寄存器用来存放操作数:AC为累加器,MQ为乘商寄存器,DR为数据寄存器。AC和MQ连起来还可组成左右移位的双字长寄存器AC-MQ。并行加法器用来完成数据的加工处理,其输入来自AC和DR,而结果回送到AC。MQ寄存器在乘法时存放乘数,而除法时存放商数,所以称为乘商寄存器。DR用来存放被乘数或除数,而结果(乘积或商与余数)则存放在AC-MQ。在四则运算中,使用这些寄存器的典型方法如下:
运算类别寄存器关系加法AC+DR→AC减法AC-DR→AC乘法DR×MQ→AC-MQ除法AC÷DR→AC-MQ
对阶码部件来说,只要能进行阶码相加、相减和比较操作即可。在图2-21中,操作数的阶码部分放在寄存器E1和E2,它们与并行加法器相连以便计算。浮点加法和减法所需要的阶码比较是通过E1-E2来实现的,相减的结果放入计数器E中,然后按照E的符号为决定哪一个阶码较大。在尾数相加或相减之前,需要将一个尾数进行移位,这是由计数器E来控制的,目的是使E的值按顺序减到0。E每减一次1,相应的尾数则向右移1位。一旦尾数高速完毕,它们就可按通常的定点方法进行处理。运算结果的阶码值仍放到计数器E中。
点协处理器,80x87是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于它们的算术运算是配合80x86CPU进行的,所以又称为协处理器。现在我们以80x87为例来讨论浮点运算器部件的组成。浮点协处理器的主要功能如下:(1) 可与配套的CPU芯片异步并行工作。80x87相当于386的一个I/O部件,本身有它自己的指令,但不能单独使用,它只能作为386主CPU的协处理器才能运算。因为真正的读写主存的工作不是80x87完成,而是由386执行的。如果386从主存读取的指令是80x87浮点运算指令,则它们以输出方式把该指令送到80x87,80x87接收后进行译码
并执行浮点运算。在80x87进行运算期间,386可取下一条其他指令予以执行,因而实现了并行工作。如果在80x87执行浮点运算指令过程中386又取来一条80x87指令,则80x87以给出“忙”的标志信号加以拒绝,使386暂停向80x87发送命令。只有待80x87完成浮点运算而取消“忙”的标志信号以后,386才可以进行一次发送操作。(2) 高性能的80位字长的内部结构,有8个80位字长的以堆栈方式管理的寄存器组。80x87从存储器取数和向存储器写数时,均用80位的临时实数和其他6种数据类型执行自动转换。全部数据在80x87中均以80位临时实数的形式表示。因此80x87具有80位的内部结构,并有八个80位字长以“先进后出”方式管理的寄存器组,又称寄存器堆栈。这些寄存器可以按堆栈方式工作,此时,栈顶被用作累加器;也可以按寄存器的编号直接访问任一个寄存器。(3) 浮点数的格式,完全符合IEEE制定的国际标准。(4) 能处理包括二进制浮点数、二进制整数和十进制数串三大类共7种数据。此7种数据类型在寄存器中表示如下:短整数(32位整数) S 31位 (二进制补码) 长整数(64位整数) S 63位 (二进制补码) 短实数(32位浮点数) S 指数尾数(23位) 长实数(64位浮点数) S 指数尾数(52位) 临时实数(80位浮点数) S 指数尾数(64位) 十进数串(十进制18位) S -- d17d16 …d1d0 。此处S为一位符号位,0代表正,1代表负。三种浮点数阶码的基值均为2。阶码值用移码表示,尾数用原码表示。尾数有32位、64位、80位三种。不仅仅是一个浮点运算器,还包括了执行数据运算所需要的全部控制线路,就运算部分讲,有处理浮点数指数部分的部件和处理尾数部分的部件,还有加速移位操作的移位器线路,它们通过指数总线和小数总线与八个80位字长的寄存器堆栈相连接。(5) 内部的出错管理功能为了保证操作的正确执行,80x87内部还设置了三个各为16位字长的寄存器,即特征寄存器、控制字寄存器和状态寄存器。特征寄存器用每两位表示寄存器堆栈中每个寄存器的状态,即特征值为00-11四种组合时表明相应的寄存器有正确数据、数据为0、数据非法、无数据四种情况。控制字寄存器用于控制80x87的内部操作。其中PC为精度控制位域(2位):00为24位,01为备用,10为53位,11为64位。RC为舍入控制位域(2位):00为就近舍入,01朝-方向舍入,10朝+方向舍入,11朝0舍入。IC为无穷大控制位:该位为0时+与-作同值处理,该位为1时+与-不作同值处理。控制寄存器的低6位作异常中断屏蔽位:IM为非法处理,DM为非法操作数,ZM为0作除数,OM为上溢,UM为下溢,PM为精度下降。状态字寄存器用于表示80x87的结果处理情况,例如当“忙”标志为1时,表示正在执行一条浮点运算指令,为0则表示80x87空闲。状态寄存器的低6位指出异常错误的6种类型,与控制寄存器低6位相。当的控制寄存器位为0(未屏蔽)而状态寄存器位为1时,因发生某种异常错误而产生中断请求。
CPU内的浮点运算器,奔腾CPU将浮点运算器包含在芯片内。浮点运算部件采用流水线设计。指令执行过程分为8段流水线。前4段为指令预取(DF)、指令译码(D1)、地址生成(D2)、取操作数(EX),在U,V流水线中完成;后4段为执行1(X1)、执行2(X2)、结果写回寄存器堆(WF)、错误报告(ER),在浮点运算器