FPGA中加减乘除运算的注意问题

FPGA中有关加减乘除运算的位宽问题:

1:在进行加减乘除运算时一定要注意位宽,保证足够大的位宽,防止数据溢出,如果溢出结果就会出现错误,尤其是加和乘运算,一定要计算好位宽(位宽的计算可以都取其最大值,看最大值计算后的位宽就是最大位宽,采用这个位宽数据就溢出不了)

2:除法运算时:除法和减法都是缩小数据,得到的最后结果如果要比原来的位宽小的时候,那取数据的低位,把高位抛弃,取低位的位宽数和输出结果的位宽数一致就行

例如:
结果data_out是8位数据位宽
原来的数sum是11位位宽,sum经过除法运算(sum/8,就是右移3位),
那么结果data_out=sum[7:0](即取低8位才是结果)

3:乘法运算时注意位宽足够就行,别溢出

4:乘法:就是左移,移动是位数是2的指数,即*8就是左移3位,*16就是左移4位;除法:就是右移,移动位数原则和乘法一样。

5:除法运算:例子:m=n/9;怎样计算一个数除以9(这个数不是2的整数倍)m是要求的结果,n是原来的数。首先我们可以先解决9,比如我们利用1024(这个数正好是2^10,便于移位计算),因为1024/9=113.7我们取整即为113(64+32+16+1),因此可以得到9=1024/113,这样我们就把1024/113这个数当成9,   即 m = n /(1024/113) = (n*113)/1024 = (n*113) >> 10,这样就有可以转换为移位操作了,就变的简单了,其中那个113可以用乘法的移位来计算,这其中1024是自己任意取的主要是要和2的指数倍相关,便于移位,其中这个1024取的越大,出来的结果的精度就越高,比如还能取2048,4096等,越大精度越高。

版权声明:本文为CSDN博主「鹏博奋斗」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liupeng542346217/article/details/80300246

最新文章