理想的CORDIC架构取决于具体应用中速率与面积的权衡。可以将CORDIC算法等式直接翻译成迭代型的位并行设计,然而位并行变量移位器并不能很好地映射到FPGA中。由于需要若干个FPGA单元,因此导致设计规模变大,从而使设计时间变长。
为了达到所需要的精度,需要解决两个问题,即迭代次数和数据宽度。Yu Hen Hu设计了一种算法,该算法可以解决CORDIC迭代中基于总量化误差(Output Quantization Error,OQE)的问题。一旦确定了OQE,即可计算有效小数位的数目。
为了说明增加迭代次数n对硬件成本的影响,下面给出两种情况,即数据通路b为6个小数位和14个小数位。假设一个切片中包含两个LUT,如表5.8所示。
表5.8 不同迭代次数和数据宽度对硬件资源成本的影响
Yu Hen Hu提出OQE由两种误差组成:
(1)近似误差。CORDIC旋转角度存在有限个基本角度量化所带来的量化误差。
(2)舍入误差。取决于实际实现中使用的有限精确度的代数运算。
可根据下面的参数定义上述两种误差:①迭代次数n;②数据路径中小数位的位数b;③最大向量的模值 ( )。
由于总是执行全套的伪旋转,所以基于最坏情况的误差用于保证某个水平的数值精度。为了说明这一点,当尝试找到3个随机向量幅度时,考虑在每个迭代后(标定后)的误差,如表5.9、表5.10和表5.11所示。在每种情况下,数据宽度为19个小数位。
注 :这个误差是CORDIC输出与浮点参考幅度进行比较的。
表5.9 不同迭代次数时,所得到的幅度和误差(1)
表5.10 不同迭代次数时,所得到的幅度和误差(2)
表5.11 不同迭代次数时,所得到的幅度和误差(3)
使用向量模式时,目标就是通过迭代使向量趋近x轴。有限次的旋转通常导致剩余一个小角度δ,从而引起近似误差,如图5.17所示。
只执行一次迭代的例子,如图5.18所示。开始时,模为1的向量,其初始角度为60°。第一次迭代将向量旋转45°,从而导致了δ=15°的角度量化误差。对于一次迭代,其伸缩因子K为
图5.17 近似误差
图5.18 一次迭代的误差
因此,旋转向量的幅度现在是 。等式给出x的值为 。用这个值除以伸缩因子K(1),得到了真正的量化幅度为cos15°。
图5.18中对应的x的输出表示为
为了计算近似误差的上界,必须找出δ的上界。Yu Hen Hu提出δ的上界为
其中,a(n-1)为最终的旋转角度。
从图5.19可知,近似误差可以表示为
图5.19 近似误差的表示
Yu Hen Hu 推导出的舍入误差可以表示为
式(5.27)中,b为数据路径中的小数位个数;n为迭代次数。
为了计算有效位d eff ,必须首先计算OQE。前面已经提到了OQE的计算方法:
因此有效位d eff 表示:
这种方法求得的d eff 依赖于所选择的b和n。然而,希望先指定d eff ,然后求出b和n。因此,Yu Hen Hu采用的方法是通过取不同组的b和n,将计算出的d eff 值编制成表,通过查表找到所需的d eff ,其对应的b和n即为可知。
一小部分OQE与d eff 之间的关系如表5.12所示。
表5.12 一小部分OQE与d eff 之间的联系
并不是所有计算器都允许计算以2为底的对数运算。因此,可使用下面的运算来代替:
使用OQE方程可以计算出一个表,从而对一组n和b可以预测出d eff 。假如输入被限制在±0.5的范围内,那么 。使用 的值,3≤n≤9和8≤b≤10,仿真值如表5.13所示。
表5.13|v(0)|=0.5,且3≤n≤9和8≤b≤10时的仿真值
续表
给定一个d eff ,通过d eff 表就可以找出n和b。例如,希望计算包含6个小数位精度的向量幅度。通过查表5.13,能够提供该精确度的最有效的结构是n=4、b=8。当使用这组值设计CORDIC系统时,相对于浮点设计,最坏情况下所产生的误差小于2 -6 。