一文了解FPGA浮点小数与定点小数的换算及应用.doc

上传人:白大夫 文档编号:3362303 上传时间:2019-08-18 格式:DOC 页数:14 大小:20.50KB
返回 下载 相关 举报
一文了解FPGA浮点小数与定点小数的换算及应用.doc_第1页
第1页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一文了解FPGA浮点小数与定点小数的换算及应用.doc》由会员分享,可在线阅读,更多相关《一文了解FPGA浮点小数与定点小数的换算及应用.doc(14页珍藏版)》请在三一文库上搜索。

1、一文了解FPGA浮点小数与定点小数的换算及应用定点小数运算有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。所谓定点小数就是把小数点的位置固定,我们要用整数来表示小数。先以10进制为例。如果我们能够计算12+34=46的话,当然也就能够计算1.2+3.4 或者 0.12+0.34了。所以定点小数的加减法和整数的相同,并且和小数点的位置无关。乘法就不同了。 12*34=408,而1.2*3.4=4.08。这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。所以在做乘法的时候,需要对小数点的位置进行调整?!可是既然我们是做定点小数运算,那就说小数

2、点的位置不能动!怎么解决这个矛盾呢,那就是舍弃最低位。也就说1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。上面这个例子中,有效位数为2,小数点之后有一位。现在进入二进制。我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。小数点之后可以有0 - 15位。我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。Q12的正数的最大值是 0 111 。 111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制

3、的多少呢,很好运算,就是 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.199951171875。我们用数学表达式做一下总结:x表示实际的数(*一个浮点数), q表示它的Qn型定点小数

4、(一个整数)。q = (int) (x * 2)x = (float)q/2验证:由于/ 2和* 2可以简单的用移位来计算,所以定点小数的运算比浮点小数要快得多。下面我们用一个例子来验证一下上面的公式:用Q12来计算2.1 * 2.2,先把2.1 2.2转换为Q12定点小数:2.1 * 2 = 8601.6 = 86022.2 * 2 = 9011.2 = 9011(8602 * 9011) 12 = 1892318923的实际值是18923/2 = 4.619873046875 和实际的结果 4.62相差0.000126953125,对于一般的计算已经足够精确了。小数的定标精度、范围采用定点

5、数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。对于FPGA而言,FPGA对小数是无能为力的,一种解决方法是采用定标,就是将运算的浮点数扩大很多倍,然后取整,再用这个数进行运算,运算结束后再缩小相应的倍数。通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如:16进制

6、数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表示 十进制表示范

7、围Q15 S0.15 -1x0.9999695Q14 S1.14 -2x1.9999390Q13 S2.13 -4x3.9998779Q12 S3.12 -8x7.9997559Q11 S4.11 -16x15.9995117Q10 S5.10 -32x31.9990234Q9 S6.9 -64x63.9980469Q8 S7.8 -128x127.9960938Q7 S8.7 -256x255.9921875Q6 S9.6 -512x511.9804375Q5 S10.5 -1024x1023.96875Q4 S11.4 -2048x2047.9375Q3 S12.3 -4096x4095.

8、875Q2 S13.2 -8192x8191.75Q1 S14.1 -16384x16383.5Q0 S15.0 -32768x32767一般在FPGA中处理小数定点数,需要自己去定点,比如用16位,就可以分成8位整数和8位小数,即(8,8),即“定点”在第8位。那么:1 - 16h01001.5 - 16h0180-1.5 - -1.5*256 + 65536(补码) - 16hFE801.164 - 1.164*256 = 298 = 16h012A如果两个小数相乘,即表示定点数相乘,比如,Q15表示的4000H(浮点数0.5)乘以Q15表示的4000H,4000H4000H=1000 0000H,那么乘完之后的Q值为15+15=30.即浮点数表示0.25.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1