微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 除以三怎么做?

除以三怎么做?

时间:12-12 整理:3721RD 点击:
如题
digital当中,一个数,要除以三,得到整数即可,被除数5个比特的无符号数
有什么好的办法没有?

如果不是这么小的数3,换成大一点的数,也许我就不懂脑筋,直接乘以倒数了
问题是,我想这么小的数,有没有其他办法

这个例子肯定case最简单,定系数乘除法一般是把系数以2的各次幂展开后做移位吧

楼主可以试试这个算法:
wire[4:0] a; //calculate a/3
wire[4:0] b; //tmp data
wire[3:0] c; //c=a/3
b = a[4:1] + a[4:2] - a[4:3] + a[4]
c = b[4:1] + b[0] ;
如果应该是整除的,结果完全正确;如果有余数的,丢弃余数,取整,应该可以达到你的母的。
没有仿真,纸上自己画了一下,举了几个例子都是可行的。楼主有条件的话,自己仿真试试,呵呵。

直接case出来是怎样?
忘了怎么画五输入的卡罗图了。。。

如下推导,对更多位的输入也适用。估计上面给的也是这个原理。
还有种方法,把输入弄成被3整除的(很好弄,被3整除的条件是和为3的倍数),然后解
b=3x <=> b4...b0 = x3...x0 0+x3...x0 <=> x0 = b0, xi+1 = xi ^ bi+1

就是和上面有个哥们贴的图原理类似。但是这种算法在被除数较小的时候误差较大。所以,我用了两种不同的逼近方法求和取平均,最后结果再用求和之后的值最低位判断是否需要修正即可。
原理总结下来就是用2的幂次相加或相减去逼近。比如,楼上贴图那样:1/3=1/4 + 1/16 + 1/64 + 。。。另外一种就是:1/3=1/2 - 1/8 - 1/32 - 。。。

前面已经说了很简单的查找表,而且精度可以做得很高。

最后结果再用求和之后的值最低位判断是否需要修正即可
怎么判断?没看懂...

如果求和结果是奇数,证明两个结果收敛程度不一致,实验证明和最终相差1,所以把这个1加到最终结果或求和结果上即可。若求和结果为偶数,不需要修正。没有算法理论依据,个人观点。。。

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

网站地图

Top