|  | 
 
 发表于 2016-5-12 17:00:26
|
显示全部楼层 
| 方法好多种: 1. 移位减,又可以分为每次移动1bit或者多bit,一般我也就做到一次算3个bit. 1bit的,把除数被除数补到相同位宽。优点面积小,但计算cycle长。 一次算两个bit或者3个bit,面积大些但速度快。
 2.  查表,考虑牛顿迭代法。 表也不是很大。
 求 f(x) = 1/x,   计算 f'(x) = -1/x2.
 y = f(x0) + f'(x0)(x-x0) = LUT(i) - (LUT(i)- LUT(i+1) ) *R
 y(x) = 2f(x0) - f(x0)/f'(x0) = 2f(x0) -y2*x
 3. 针对特殊除数,可以考虑泰勒展开。用2的幂次和来近似。
 如下 用最近的2的幂去近似的除,将余数和商迭代知道其和小于除数。 Div/(2^X - K)
 step 1   Div/2^X = M0 ... R0 if K*M0 + R0 >=2^X - K, to step 2, else M= M0, R=R0+K*M0
 step 2  (K*M0+R0)/2
 100/7 = 14 ...2     step 1   100/8 = 12 .. 4    if (12+4) >= 7, to step 2
 step 2   (12+4)/8 = 2 ...0  if (2 +0 )<7  .  result = 12 +2 ...2.
 4. 如果有design ware, 也可以直接调用,一般面积和速度都还不错。
 | 
 |