求大神帮帮忙,搞不出来啊

发布: 2017-7-15 21:11 | 作者: battyson | 来源: EETOP 赛灵思(Xilinx) 社区

A *(8/9)怎么用verilog实现,或者说怎么个思路方法。结果要精确到小数点后5位(二进制),A是整数,不能用乘法器,请大神给点思路。我现在只有一点思路,就是在A *8这个地方采用左移3位的方法,但是除以9就不知道怎么弄了。难道要自己写个除法器感觉太麻烦,既然是个固定数,肯定有一个技巧。请各路大神不吝赐教。
吾要单片机 (2017-7-15 23:03:25)
应该需要用到除法器的,由于除数的常数,那么除法器设计简单一些,资源占用较少。
ProwWei (2017-7-16 10:08:13)
如果对计算结果的精度要求不高,可以用移位和加法来近似表示(1/9)这个数;比如用(1/16+1/32+1/64+1/1024+1/2048+1/4096+1/2^16+1/2^17+1/2^18)来近似(18位定点描述小数位,偏差<1e-5),通过移位和加法实现; 但是这个近似式在A的值超过一定位宽后,精度就会下降,需要用更长的位宽。如果A的最大值较大,又对结果精度要求高,不如做一个牛顿迭代除法器。建议关注应用本身对计算的要求,底层硬件的实现工具会帮你。
battyson (2017-7-16 12:59:43)
回复 2# 吾要单片机 不能用除法器的
江山无限辉 (2017-7-18 09:29:49)

QUOTE:

如果对计算结果的精度要求不高,可以用移位和加法来近似表示(1/9)这个数;比如用(1/16+1/32+1/64+1/1024+1/ ... ProwWei 发表于 2017-7-16 10:08
我也觉得此方法合理,用定点。将8/9用定点表示,然后与A相乘,结果再做截取
越是故乡明 (2017-7-18 22:08:10)
同意楼上观点
tezhi (2017-7-18 22:47:46)
學習學習~~~~~~~~~~~
rayslike (2017-7-19 15:23:49)
0000000000000000000000

网络资源