求大神帮帮忙,搞不出来啊
时间:10-02
整理:3721RD
点击:
A *(8/9)怎么用verilog实现,或者说怎么个思路方法。结果要精确到小数点后5位(二进制),A是整数,不能用乘法器,请大神给点思路。我现在只有一点思路,就是在A *8这个地方采用左移3位的方法,但是除以9就不知道怎么弄了。难道要自己写个除法器感觉太麻烦,既然是个固定数,肯定有一个技巧。请各路大神不吝赐教。
应该需要用到除法器的,由于除数的常数,那么除法器设计简单一些,资源占用较少。
如果对计算结果的精度要求不高,可以用移位和加法来近似表示(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的最大值较大,又对结果精度要求高,不如做一个牛顿迭代除法器。建议关注应用本身对计算的要求,底层硬件的实现工具会帮你。
不能用除法器的
我也觉得此方法合理,用定点。将8/9用定点表示,然后与A相乘,结果再做截取
同意楼上观点
學習學習~
0000000000000000000000
