浮点数计算---已同步

根据FPGA IP核手册32位浮点数的格式,1bit符号位+8位指数位+24位小数位。

仿真显示数值为32'h4098c49c,那么该浮点数的值是4.774,换算过程如下:

32'h4098c49c ==>32'b 0, 100 0000 1, 001 1000 1100 0100 1001 1100

///s,  e7............e0/

b0,b1...........................................bf-1

逗号分隔了符号位,指数位,小数位三个部分。其中小数部分的b0与指数部分的e0是重合的。

e = (2^7 + 2^0) =129(指数部分的第0位和第7位是1,左边是e7,右边是e0)

E=e-(2^7 -1)=2(指数部分的宽度是8,所以此处是7)

小数部分:F = b0.b1b2...bf-1=1*2^0 +1*2^(-3) + 1*2^(-4) + 1*2^(-8) +  1*2^(-9) + 1*2^(-13) + 1*2^(-16) + 1*2^(-19) + 1*2^(-20) + 1*2^(-21) =1.1935(逗号左边是b0,往右依次是b1....bf-1)

最终值:(-1)^s * 2^E * F = 1 * 4 * 1.1935 = 4.774;

反过来说,一个浮点数,首先除以2的E次方,得到小数部分。然后把E加127得到e;为什么+127?是为了可以表达一个很小的小数,例如0.035,须先乘以32(即除以2^(-5)),变为1.12,再处理小数部分;此时E是-5,加127变为正值,因为e只能是正数。

小数部分,b0恒为1;剩余的0.xxx的小数不断乘以2的幂次方,每次使结果大于1,再截取小数部分,再乘以2的幂次方,再截取。。。如此反复,依次得到各个bx位;

例如:4.774/4=1.1935;

b0为1,剩余0.1935;

0.1935*2^3 = 1.548;所以b3=1;

0.548*2 = 1.096;所以b4=1;(2^3*2=2^4)

0.096*2^4 = 1.536;所以b8=1;(2^4*2^4=2^8)

 依次类推得到所有bx位。

=========================================
verilog有符号数:
https://blog.csdn.net/MmikerR/article/details/106444181
https://www.cnblogs.com/yuandonghua/p/signed.html
https://blog.csdn.net/a389085918/article/details/79915685

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值