HLSBOOK学习笔记(二) CORDIC
写在最前: 这一章介绍的HLS优化方式,是为变量选择正确的数据表示,这也是(一)中所铺垫过的
CORDIC算法简介及优化
CORDIC(Coordinate Rotation Digital Computer),坐标旋转数字计算法,能够计算三角、双曲和其他数学函数,可以根据需求调整精度(有些像工数讲的数值分析,学过不动点迭代法的同学应该能更好理解这里的CORDIC算法)CORDIC只使用加法、减法、移位和查找表实现简单算法,在FPGA中实现效率高,在硬件算法中经常用到。
要权衡运算结果精度、性能、设计资源利用率
这样就会把向量正转θ.
如果θ是45°,那么
但是这样计算,计算效率不高。将旋转矩阵强制转化成易于乘法的常数,比如,设置为2的幂数,就尅通过移位来计算而不需要计算乘法。这样则需要乘上一个因子,对旋转矩阵进行一个缩放。可以将旋转矩阵变化成如下的形式:
(图里右上角元素写错了)
取tan2θi = 2-i,与2-i相乘等价于右移i位,这基本上不需要任何资源。则此旋转矩阵变成了
这是正转,反转只需要在将2-i换成-2-i即可。
因为每一个旋转矩阵都是被缩放了的,因此最终结果还要乘上一个比例因子还原回来,这个比例因子为
这是个收敛级数,收敛于0.607252935.可以将每一个θi对应的值存储到片上内存中,随用随找。下表是前七次迭代的旋转角度、比例因子和CORDIC增益(就是累积,比如1.41421*1.11803=1.58114)