马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
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等,越大精度越高。 |