微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一个16位数除3有没有简单的实现办法

一个16位数除3有没有简单的实现办法

时间:10-02 整理:3721RD 点击:

一个16位数除3有没有简单的实现办法,使其在很短的时间出结果?
因为除数是固定的比较小的数3,所以有没有求解的捷径?

可以用查表的方式


移位加法来近似计算即可。



   计算复杂度根精度有关,当需要精度较高的结果时,连加的个数可能偏多,此时可以仿照booth乘法器的处理形式,采用4-2压缩器来减小连加的个数。

只要商就行,不需要余数,所以精度应该不算高

a/3=0.333333*a,采用一个乘法器就可以了

16比特数a除以3,先将a乘以43691,然后再逻辑右移17比特,可以试试

16比特数a除以3,先将a乘以43691,然后再逻辑右移17比特,可以试试

不知道你除3想要一个什么样的结果,如果要一个近似数,则采用级数的方法(简单说就是二分法)。如果要得到商和余数,可以考虑从从左边往右;用FOR循环,前面补两个0,每次得到的余数拿过来和下一个bit组合成三位数,一直到16BIT除完。

但是如果用循环移位的话延迟就大了,16个周期

如果频率不高的话,组合逻辑完成,否则中间分成几段进行运算。

小编采用我的方法,没错的

   能说说原理吗?如果除的不是3,如何解决?谢谢

有本书叫“hacker's delight”
也有中译本,方法是上面学来的  楼上可以找来看看

查表最快,一个周期搞定 ,就65536种情况。

查表至少需要16kbyte的存储空间,对嵌入式系统来说开销太大

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top