verilog在写cordic函数时应当注意的点:
1.硬件结构主要有三种:
(1)串行接口(利用公式进行迭代),串行结构占用的资源最少, 这缘于对 CORDIC 处理单元的分时复用, 也正因此使得控制单元设计略显复杂, 时序控制较为烦琐, 系统处理速度较低
(2)并行结构(每次迭代利用单独的cordic处理单元),无须控制电路, 只需移位、 加减操作,同时资源量大大增加
(3)并行流水结构(对并行结构添加流水寄存器)减少了关键路径的长度
2.代码应该注意的地方
(1)移位应当使用算数移位(自动补全符号位)
(2)注意算数推导中的初值的计算
(3)迭代公式,计算时去掉了系数cosθ,每次旋转的角度是正确的,但是模值增大了1/cosθ,是一种伪旋转方式
x1 = x0cosθ – y0sinθ = cosθ(x0 – y0tanθ),
y1 = y0cosθ + x0sinθ = cosθ(y0 + x0tanθ),
x(i+1)=xi-yitanθi
(4)要找出θ=arctan(2**(-i))的角度值,即tanθi=2**(-i),并将其作为每次旋转的角度θi,精度由i值决定
(5)每次迭代时需要判断应该逆时针还是顺时针,设置初始角度z=θ,迭代从i=0开始,到n-1结束,当然,也可以设置重复迭代:
z (i+1)= zi-diθi,故zi是每次旋转剩余的角度,di表示应该增加还是减少,最终的目的是使得θ变为零
3.不同坐标系使用的单位不同
x(i+1)=xi-udi(yitanθi)
y(i+1)=yi+di(yitanθi)
z(i+1)=zi-diei;
圆周坐标:u=1,ei=arctan(2**(-i))
线性坐标:u=0,ei=2**(-i)
双曲线旋转:u=-1,ei=tanh(-1)(2**(-i)),求e指数
verilog在写cordic函数时应当注意的点
最新推荐文章于 2023-12-11 20:23:36 发布