2.6.4 浮点运算器实例
时间:2010-09-22 来源:yuxinlen
2.6.4 浮点运算器实例
1.CPU之外的浮点运算器
80×87是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于它们的算术运算是配合80×86CPU进行的,所以又称为协处理器。
现以80×87浮点运算器为例,说明其特点和内部结构。
(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)可处理包括二进制浮点数、二进制整数、和压缩十进制数串三大类7种数据,其中浮点数的格式符合IEEE754标准。7种数据类型在寄存器中表示如下:
此处S为一位符号位,0代表正,1代表负。三中浮点数阶码的基值均为2。阶码值用移码表示,尾数用原码表示。浮点数有32位、64位、80位三种。80×87从存储器取数和向存储器写数时,均用80位的临时实数和其他6种数据类型执行自动转换。全部数据在80×87中均以80位临时数据的形式表示。因此80×87具有80位字长的内部结构,并有八个80位字长以“先进后出”方式管理的寄存器组,又称寄存器堆栈。
图2.20示出80×87的内部结构逻辑框图。由图看出,它不仅仅是一个浮点运算器,还包括了执行数据运算所需要的全部控制硬件。就运算部分讲,有 处理浮点数指数部分的部件和处理尾数部分的部件,还有加速移位操作的移位器路线,它们通过指数总线和小数总线与八个80位字长的寄存器堆栈相连接。这些寄 存器按“先进后出”方式工作,此时栈顶被用作累加器;也可以按寄存器的编号直接访问任何一个寄存器。
图2.20 80×87浮点计算器逻辑框图为了保证操作的正确执行,80×87内部还设置了三个各为16位字长的寄存器,即特征寄存器、控制寄存器和状态寄存器。
特征寄存器用每两位表示寄存器堆栈中每个寄存器的状态,即特征值为00—11四种组合时表明相应的寄存器有正确数据、数据为0、数据非法、无数据四种情况。
控制字寄存器用于控制80287的内部操作。
状态字寄存器用于表示80287的结果处理情况,例如当“忙”标志为1时,表示正在执行一条浮点运算指令,为0则表示80×87空闲。状态寄存器的低6 位指出异常错误的6种类型,与控制寄存器低6位相对应。当对应的控制寄存器位为0(未屏蔽)而状态寄存器位为1时,因发生某种异常错误而产生中断请求。
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倍多。