FPGA浮点数转化为定点数方法

描述

FPGA浮点转定点运算、除法转乘法运算以及运算误差分析

FPGA在常规运算时不能进行浮点运算,只能进行定点整型运算,在处理数据的小数乘加运算和除法运算时FPGA一般是无能为力的,其中一种常用的处理方法就是数据进行浮点到定点的转换。

浮点数转化为定点数一般有两种方法:

浮点数直接乘以一个数值。浮点小数(X)到定点数据(Xq)的转换其实很简单,就是把浮点小数乘以一个很大的2的n次幂的数据Xq=X*2^n,来把小数转化为整数,然后再进行数据的乘加运算,运算结果通过移位来得到实际对应的理论数据结果。

直接把浮点数转化为有符号的二进制小数用SxQn来表示,然后进行乘加运算,运算结果通过移位来得到实际对应的理论数据结果。

通过上述两种方法运算能完成浮点到定点乘加运算的结果,但是上述两种方法存在一定的问题:

存在浮点小数(X)进行整数转化定点数据(Xq)后依然还是一个小数的情况。

浮点数转化为二进制数存在数据位宽激增情况,使得SxQn的数据位宽变大。

数据运算存在一定的截位误差,这部分误差只能减小而不能消除。

浮点到定点数据转化后数据位宽变大,占用逻辑资源增加。

在实际使用时由于直接把浮点数转化为有符号的二进制小数用SxQn来表示这种方法局限性较多,近而大都采用浮点数直接乘以一个数值这种方式,但是这种方式使用时需要注意截位误差和量化误差。

第一种浮点数直接乘以一个数值方法具体过程如下:

浮点数(x)转换为定点数(xq):xq=(int)x2^Q 定点数(xq)转换浮点数(x):x= (float)xq2^(-Q) 比如,16进制数2000H,用Q0表示就是8192;若用Q15表示,则为0.25。 下面介绍Q格式运算中Q值的确定:

(1)定点加减法:需要转换成相同Q格式才能加减 (2)定点乘法:不同Q格式的数据相乘,相当于Q值相加 (3)定点除法:不同Q格式的数据相除,相当于Q值相减 (4)定点左移:相当于Q值增加 (5)定点右移:相当于Q值减少 比如,Q15表示的4000H(浮点数0.5)乘以Q15表示的4000H,4000H×4000H=1000 0000H,乘完之后Q值变为15+15=30,即结果为0.01B,即为浮点数0.25。 对应浮点数的除法运算时是把除法转换成乘法运算来实现。即分子/分母(A/B)转化为A*(1/B),这时会面临B是固定值和变值两种情况 1、如果B是固定值利用这种方式即可把(1/B)转化为定点数,然后进行乘法运算,这样计算速率较块,且通过合理的选择放大倍数来减小数据的误差。 2、如果对应B不是固定值,那么就将B变为对应位宽的整数,然后再进行数据的乘法运算。 数据的误差来源于浮点转化为定点时截位和运算结果截位引起的,这里可以通过常用的截位方式来实现截位。 常见的截位方式有:

1、负数直接截位后+1,就是所有数都按绝对值取floor 2、Truncate:直接截位,就是正数取floor,负数按绝对值取ceil 3、Rounding:舍入截位,就是所有数按绝对值取四舍五入  

      审核编辑:彭静
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分