50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 分享一个FPGA中的除法运算和小数乘法运算的方法 原来实现起来可以这么简单

分享一个FPGA中的除法运算和小数乘法运算的方法 原来实现起来可以这么简单

时间:2024-05-11 12:23:29

相关推荐

分享一个FPGA中的除法运算和小数乘法运算的方法 原来实现起来可以这么简单

是什么方法呢?

试想一下,所有的除法都可以转换成乘法运算,除一个数相当于乘以这个数的倒数,那这样除法运算也可归结到乘法运算中,只是乘以一个小数。

本文就是分享如何简单的实现一个变量乘以一个小数的方法!

当然加减法在FPGA中是最容易实现的,那么能否用加减法实现一个变量乘以一个小数的运算呢?答案是肯定的。

下面就让我来介绍一下我的实现方法。大家都知道FPGA中对一个变量进行2的整数次幂的操作是最容易实现,那我们就想办法把小数展开成2的“多项式”(加双引号意思可能这么表述不严谨)就行了,正次幂向右移,负次幂向左移,小数肯定可以转换成2的负次幂的多项式之和。为此我用LABVIEW编写了一个转换小程序,下面就举例验证说明一下。

假如要实现result=variable*0.5137,保证精度达到0.0001,其中variable为32位变量,请写出FPGA实现的表达式?

如何解答?思路前文已经阐述了,就是把0.5137转换成2的负次幂的多项式,如何实现,这里请允许我卖一个小关子,我自己已经用LABVIEW完成里这个转换的小程序,看下图:

可以看出在精度0.0001的条件下0.5137约等于2^(-1)+2^(-6)-2^(-9),那么上题的计算就容易多了。

result=variable[31 downto 1]+variable[31 downto 6]-variable[31 downto 9];

这样的式子在FPGA中运算就非常容易了,二进制的移位和加减法运算实现小数的乘除法,你看懂了吗?如果说精度要求更高,要达到0.000001,那么实现的方法也是一样的,看图:

可以看到后面增加了三项,实现起来也是非常简单!这个小方法你有没有学会呢,欢迎来交流。

有朋友可能会说:”那换一个数呢,比如乘3.1415926“。这个数分两部分3和0.1415926,主要是实现0.1415926这个数的展开,再比如要求精度达到0,就是展开多项式的计算之和没有误差,也简单,请看图:

可以看到要实现精度达到0,则要求变量至少有41位,即至少是个41位二进制数的变量才行。如果只是32位的数,那么就要求有一个精度,如图:

只要精度要求达到10^(-10)就已经戳戳有余。

致读者,希望本文分享的方法能对读者有所帮助,也欢迎来讨论,这个软件实现起来也很简单。文中不足之处欢迎批评指正,谢谢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。