基于IEEE754浮点乘法器设计程序--verilog.doc

基于IEEE754浮点乘法器设计程序--verilog.doc

ID:59827324

大小:39.50 KB

页数:4页

时间:2020-11-25

基于IEEE754浮点乘法器设计程序--verilog.doc_第1页
基于IEEE754浮点乘法器设计程序--verilog.doc_第2页
基于IEEE754浮点乘法器设计程序--verilog.doc_第3页
基于IEEE754浮点乘法器设计程序--verilog.doc_第4页
资源描述:

《基于IEEE754浮点乘法器设计程序--verilog.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上溢、下溢与除以零等异常情况在大多数系统中是经常发生的。以双精度浮点数为例,如果只考虑格式化数,则它的溢出有四种情况:(1)正数大于(1-)×2的情况为正上溢;(2)正数小于0.5×2的情况为正下溢;(3)负数小于-(1-2)×2的情况为负上溢;(4)负数大于0.5×2的情况为负下溢。在浮点运算过程中一个很重要的步骤是舍入。舍入的目的是使得有效数据的位数保持在固定位数范围内。IEEE754标准规定了四种舍入模式:(1)就近舍入(偶数):目标是使舍入结果尽可能接近实际值。最大误差为±LSB(LeastSi

2、gnificantBit)。(2)零舍入RZ:通过截断实际值的多余位来实现。最大误差为土LSB。(3)+∞舍入:结果向正无穷大方向舍入。所有值被舍入到下一个可能值,负数的舍入结果将截去多余位,正数的舍入结果为下一个较大的有效值。(4)-∞舍入:结果向负无穷大方向舍入。负数的舍入结果将为下一个较小的有效值,正数的舍入结果将截去多余位。下表给出了不同的舍入方法下的舍入结果,以8位值舍入为4位值为例。不同舍入方法的舍入值数值就近舍入零舍入+∞舍入-∞舍入..0111.0110.0111.0110-.-.011

3、1-.0110-.0110-.0111..1000.1000.1001.1000--.1000-.1000-.1000-.1001..1000.1000.1000.1000浮点运算单元源代码:modulealu(flout_a,flout_b,clk,en,rst,flout_c,yichu);//浮点运算单元模块input[31:0]flout_a;//输入的被乘数input[31:0]flout_b;//输入的乘数inputclk;//时钟信号inputen;//使能信号inputrst;//复位信

4、号output[31:0]flout_c;//输出运算结果output[1:0]yichu;//输出溢出标志reg[31:0]flout_c;reg[1:0]yichu;reg[1:0]overflow;regs3;regs1,s2;//符号reg[7:0]exp1,exp2,exp3;//阶码reg[22:0]man1,man2,man3;//尾数regn;reg[7:0]temp1;reg[7:0]temp2;reg[8:0]temp3;reg[23:0]temp;reg[45:0]comeout;

5、reg[23:0]all;//小数部分reg[1:0]zheng;//整数部分always@(posedgeclk)//提取flout_a的符号,阶码,尾数beginif(!rst)begins1<=1'b0;exp1<=8'b;man1<=23'b0;endelseif(en)begins1<=flout_a[31];exp1<=flout_a[30:23];man1<=flout_a[22:0];endendalways@(posedgeclk)//提取flout_b的符号,阶码,尾数beginif

6、(!rst)begins2<=1'b0;exp2<=8'b;man2<=23'b0;endelseif(en)begins2<=flout_b[31];exp2<=flout_b[30:23];man2<=flout_b[22:0];endendalways@(posedgeclk)//尾数相乘beginif(man1==23'b_00)beginman3=man1;n=1'b0;endelseif(man2==23'b_00)beginman3=man2;n=1'b0;end//处理特殊值elsebe

7、gincomeout=man1*man2;temp=man1+man2;//1.m*1.n=1+(0.m+0.n)+(0.m*0.n)all=temp[22:0]+comeout[45:23];zheng=1'b1+temp[23];zheng=zheng+all[23];//整数if(zheng[1]==1)//整数小于4而大于1beginn=1'b1;//左归阶码应加1if(zheng[0]==1)man3[22:0]={2'b1,all[22:1]};//零舍入elseman3[22:0]={2'

8、b0,all[22:1]};endelsebeginn=1'b0;man3=all[22:0];endendendalways@(posedgeclk)//阶码相加beginif(exp1[7]==1)temp1={1'b0,exp1[6:0]};elsetemp1={1'b1,exp1[6:0]};if(exp2[7]==1)temp2={1'b0,exp2[6:0]};elsetemp2={1'b1,exp2[6:0]};//把阶码的移

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。