在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2127|回复: 0

[转贴] FPGA中有关加减乘除运算的位宽问题

[复制链接]
发表于 2020-2-16 09:14:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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等,越大精度越高。
版权声明:本文为CSDN博主「鹏博奋斗」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liupeng542346217/article/details/80300246
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-21 20:42 , Processed in 0.012848 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表