- 1、本文档共43页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章(浮点算法)40讲解
第9章 浮点算法及FPU Verilog HDL设计 前面设计的CPU中只有整数部件IU,如果要对小数进行计算,则需要相应的电路支持。 定点部件—只需要假设一个小数点存在于某2位之间,计算时要把小数点对齐。 浮点部件—与定点部件不同,因为浮点数的小数点不是固定的。 浮点数也是用二进制数表示的,但这些二进制数位有不同的意义。 IEEE754 浮点数表示的标准 该标准规定R=2,阶码E用移码表示,尾数M用原码表示。 根据二进制的规格化方法,最高数字位总是1,该标准将这个1缺省存储(隐藏),使得尾数表示范围比实际存储的多一位。 IEEE754标准的浮点数格式为: 9.2 单精度浮点数与整数之间的转换 浮点数与整数之间的转换是在编程序时经常用到的操作。 在此讨论单精度浮点数与用32位补码表示的整数之间的转换算法并给出Verilog HDL源代码。 这里浮点数采用IEEE 754标准。 9.2.1 浮点数转换成整数 由于浮点数所有表示的数的范围比32位整数大得多,所以许多浮点数不能被转换成整数。 例如(R=2): 浮点数a=4effffffH=0_100 1110 1_111 1111 1111 1111 1111 1111b,则 M0=0 Ea=127+30,由于要变成整数,所以Ea=0。即Ea每一次-1,尾数要左移1位,共移30位。 1.Ma=1. 111 1111 1111 1111 1111 1111,左移30位后得: d= 0111 1111 1111 1111 1111 1111 1000 0000(?) 单精度浮点数转换成32位整数的方法 在24位的1.Ma的右边补8个0,使它变成32位整数。 如果Ea127+31,还要把这个32位整数右移127+31-Ea位,空出位补0。 如果浮点数为负数,还要把它转换为负数(求反加1)。 如果浮点数超出了-231~(+231-1)的范围,令d,且置标志invalid=1,表示无效。 由于浮点数能表示小数,如a=0.5,而整数不能表示,因此还给出了标志位precision_lost,表示精度已经损失。 如a=3fc00000H=0_011 1111 1_100 0000 0000 0000 0000 0000b M0=0,Ea=127,1.Ma=1100 0000 0000 0000 0000 0000 0000 0000。 由于127+31-Ea=31,故右移32位得: d=0000 0000 0000 0000 0000 0000 0000 0001.1b 小数点右边的数将被丢掉,造成精度损失。 为了能够检测出精度是否损失,在移位过程中使用了56位数据格式,其中32位是结果,右边24位是被移出的位。若这24不是全0,则表示精度丢失。 程序代码见f2i.v。 9.2.2 整数转换成浮点数 所有的整数转换成浮点数,不会出现“无效操作”的情况。 由于浮点数的尾数只有24位(含隐藏位),因此32位整数转换成浮点数时会出现精度损失的情况。 下面给出转换的算法。 将阶码设置为32,整数放置到尾数。 再把该数进行规格化处理,即左移,使其最高有效位为1,移位位数用shift_amount表示。 Ea=127+31-shift_amount。 小数点左边的1即为隐藏位,从小数点开始往右数出23位即为尾数Ma,剩下8位数的丢掉。 如果丢掉的8位不全是0,precision_lost=1。 程序见 i2f.v IEEE 754标准的加法算法 对阶后,采用该标准在尾数移位时规定要在尾数的右端留出3位附加位,从左到右为G(guard),R(round)和S(stricky),简称为GRS。 绝对值大的数的GRS=000。当右移绝对值小的尾数时,如果R位右边的所有位中有任何一位为1时,则设置S=1。 考虑到尾数的运算结果可能是原来一个尾数的2位,在最高位处还要再加1位。因此部的运算位数=1+1(隐藏)+23(尾数)+3(GRS)。 运算结果规格化—注意隐藏位,及阶码运算。 GRS的舍入处理: 就近舍入。如果GRS100,则在23位加1;如果GRS100,舍去。如果GRS=000,且第23位=1,则加1;否则舍去。 向下舍入。如果结果为负且GRS!=0,尾数加1。 向上舍入。如果结果为正且GRS!=0,尾数加1。 向0舍入。扔掉GRS。 9.3.2 浮点加法器Verilog HDL代码 浮点加法器由阶码对齐,计算和规格化(含规格化、舍入、溢出判断)组成。 总体结构如下图所示。 整个模块名为fadder。 输入信号 a,b----单精度浮点数。 sub=1,减法操作;sub=0,加法操作。 rm为舍入控制码。 输出信号 s=a±b是单精度浮点数。 代码见fadder.v 图
文档评论(0)