一文了解FPGA浮点小数与定点小数的换算及应用Word格式.docx
- 文档编号:17561718
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:3
- 大小:16.73KB
一文了解FPGA浮点小数与定点小数的换算及应用Word格式.docx
《一文了解FPGA浮点小数与定点小数的换算及应用Word格式.docx》由会员分享,可在线阅读,更多相关《一文了解FPGA浮点小数与定点小数的换算及应用Word格式.docx(3页珍藏版)》请在冰豆网上搜索。
这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。
所以在做乘法的时候,需要对小数点的位置进行调整?
!
可是既然我们是做定点小数运算,那就说小数点的位置不能动!
怎么解决这个矛盾呢,那就是舍弃最低位。
也就说1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。
所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。
上面这个例子中,有效位数为2,小数点之后有一位。
现在进入二进制。
我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。
小数点之后可以有0-15位。
我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。
Q12的正数的最大值是0111。
111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢,很好运算,就是0x7fff/2
=7.999755859375。
对于Qn格式的定点小数的表达的数值就它的整数值除以2
。
在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。
反过来把一个实际所要表达的值x转换Qn型的定点小数的时候,就是x*2
了。
例如0.2的Q12型定点小数为:
0.2*2
=819.2,由于这个数要用整数储存,所以是819即0x0333。
因为舍弃了小数部分,所以0x0333不是精确的0.2,实际上它是819/2
=0.199********5。
我们用数学表达式做一下总结:
x表示实际的数(*一个浮点数),q表示它的Qn型定点小数(一个整数)。
q=(int)(x*2
)
x=(float)q/2
验证:
由于/2
和*2
可以简单的用移位来计算,所以定点小数的运算比浮点小数要快得多。
下面我们用一个例子来验证一下上面的公式:
用Q12来计算2.1*2.2,先把2.12.2转换为Q12定点小数:
2.1*2
=8601.6=8602
2.2*2
=9011.2=9011
(8602*9011)》》12=18923
18923的实际值是18923/2
=4.619873046875和实际的结果4.62相差0.000126953125,对于一般的计算已经足够精确了。
小数的定标精度、范围
采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
对于FPGA而言,FPGA对小数是无能为力的,一种解决方法是采用定标,就是将运算的浮点数扩大很多倍,然后取整,再用这个数进行运算,运算结束后再缩小相应的倍数。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如:
16进制数2000H=8192,用Q0表示
16进制数2000H=0.25,用Q15表示
不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;
相反,Q越小,数值范围越大,但精度就越低。
例如,Q0的数值范围是一32768到+32767,其精度为1,,浮点数x=0.5,定标Q=15,则定点数xq=L0.5*32768J=16384,式中LJ表示下取整。
反之,一个用Q=15表示的定点数16384,其浮点数为16384*2-15=16384/32768=0.5。
浮点数转换为定点数时,为了降低截尾误差,在取整前可以先加上0.5。
Q和S表示方法,如下表所示。
Q表示S表示十进制表示范围
Q15S0.15-1≤x≤0.9999695
Q14S1.14-2≤x≤1.9999390
Q13S2.13-4≤x≤3.9998779
Q12S3.12-8≤x≤7.9997559
Q11S4.11-16≤x≤15.9995117
Q10S5.10-32≤x≤31.9990234
Q9S6.9-64≤x≤63.9980469
Q8S7.8-128≤x≤127.9960938
Q7S8.7-256≤x≤255.9921875
Q6S9.6-512≤x≤511.9804375
Q5S10.5-1024≤x≤1023.96875
Q4S11.4-2048≤x≤2047.9375
Q3S12.3-4096≤x≤4095.875
Q2S13.2-8192≤x≤8191.75
Q1S14.1-16384≤x≤16383.5
Q0S15.0-32768≤x≤32767
一般在FPGA中处理小数定点数,需要自己去定点,比如用16位,就可以分成8位整数和8位小数,即(8,8),即“定点”在第8位。
那么:
1-》16‘h0100
1.5-》16’h0180
-1.5-》-1.5*256+65536(补码)-》16‘hFE80
1.164-》1.164*256=298=16’h012A
如果两个小数相乘,即表示定点数相乘,比如,Q15表示的4000H(浮点数0.5)乘以Q15表示的4000H,4000H×
4000H=10000000H,那么乘完之后的Q值为15+15=30.即浮点数表示0.25.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 了解 FPGA 浮点 小数 定点 换算 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)