关于CORDIC的原理及两个模式(旋转模式及向量模式),Xilinx的一份ppt已经讲得非常非常详细了。最近在写处理器时遇到了问题:手写的乘、除法器占用资源巨大(为了同步减少延时不能用流水线设计),尝试了dsp_elements,乘法器可以,但是除法器用不了dsp资源。64位的乘除法器综合下来总共占用10K左右的LUTs,比较浪费。因此想到了几个月前的CORDIC,当时没看懂,现在理解了一下,很是惊奇。这样就可以重复利用乘法器、除法器以及三角函数计算器。公式如下:
旋转模式(就是正向,乘法):
X(i+1)=X(i)
Y(i+1)=Y(i)+2^(-i)*X(i)
Z(i+1)=Z(i)=2^(-i)
标准的乘法器代码如下:
Multiply=(A[00]?(B<<00):0)+(A[01]?(B<<01):0)+(A[02]?(B<<02):0)+(A[03]?(B<<03):0)+(A[04]?(B<<04):0)+(A[05]?(B<<05):0)+(A[06]?(B<<06):0)+(A[07]?(B<<07):0)+
(A[08]?(B<<08):0)+(A[09]?(B<<09):0)+(A[10]?(B<<10):0)+(A[11]?(B<<11):0)+(A[12]?(B<<12):0)+(A[13]?(B<<13):0)+(A[14]?(B<<14):0)+(A[15]?(B&