对数函数的FPGA实现
2017-05-18卢小冰
卢小冰
摘 要:CORDIC算法常用于高效地實现多种超越函数求值,但算法的通用性使其在FPGA上的实现具有一定的难度。利用此算法在对数方面的推导公式,介绍一种基于查表、移位、加法及除法等操作,在FPGA上得以实现的方法。
关键词:坐标旋转数字计算机(CORDIC)算法 对数函数 FPGA实现 查表法
中图分类号:TP302 文献标识码:A 文章编号:1672-3791(2017)03(c)-0204-02
对数函数在粒子滤波、RBF神经网络、图像处理等领域广泛运用。CORDIC算法(The Coordinate Rotation Digital Computer)是一种用于计算一些常用的基本运算函数和算术操作的循环迭代算法。CORDIC算法主要由加法、移位实现,从而大大降低了占用的FPGA资源。该文介绍一种由CORDIC算法推导的对数函数在FPGA上的实现。
1 CORDIC算法
1.1 CORDIC算法基本原理
CORDIC算法主要用于计算三角函数、双曲函数、指数和对数,其基本思想是通过一系列固定的与运算基数相关的角度不断偏摆来逼近所需的旋转角度,使得矢量旋转和定向运算不需要三角函数查表及乘、开方、反三角函数等复杂的数学运算,其原理如图1所示。对于矢量旋转角度变成,则有:
式中,。CORDIC算法一般工作在旋转和矢量两种模式下。旋转模式为将矢量旋转一个给定的角度;矢量模式为将输入矢量旋转到轴,同时记录下旋转的角度。文献中给出了CORDIC算法具体的公式推导和两种工作模式下次迭代后的最终结果。
1.2 CORDIC算法的对数运算推导
根据对数和反双曲余切函数的线性关系,以10为底的对数可以通过计算反双曲余切函数得到:
2 算法中的FPGA实现
2.1 算法的设计
CORDIC算法推导的对数函数,是基于小数跟的乘积,考虑到FPGA小数实现的问题,将其转换为:
(3)
从式子可以看出,算法将由小数乘法转换为移位加法求和后的乘法,从而大大降低硬件电路的复杂性。其次,的实现是通过查表法在FPGA中实现。
2.2 算法的实现
CORDIC算法的实现主要通过简单的移位算法、高速流水线处理及查表查询完成。简单移位及高速流水线处理,快速精确完成式子(3)的系数的计算,同时对反正切函数的参数进行处理,反正切函数参数涉及除法,采用ip核完成得到参数;取得参数后,通过查表法,对应读出存储在ram中的反正切函数值,此步骤简化了反正切函数高难度高复杂度的运算量,大大提高了运算速度及效率。最后,通过IP核完成乘法运算。整个算法过程,简化了复杂的运算步骤,便于在FPGA上的实现。
2.3 算法的实现结果
算法在Diamond 3.0软件环境下,使用Verilog HDL语言实现以上算法,并在Lattice公司的ECP2M系列芯片LFE2M20 E7F256C中进行验证,采用Diamond提供的逻辑分析仪取得分析结果,分析结果如图1所示,系统时钟采用27 MHz;表1为理论值与实际值的对比;结果表明该设计达到要求。
3 结语
CORDIC算法推导出的对数函数在FPGA中的运用,已经在Lattice芯片得到验证,验证结果与理论值一致。同时,若对模块稍加修改同样可以移植到其他的系统中,这对大多数对系统资源比较敏感的嵌入式系统来说更具有很强的现实意义。
参考文献
[1] 阎啸,秦开宇,高援开,吴绍炜. 基于CORDIC算法的频谱分析技术研究[J].电子科技大学学报,2006,35(3):335-338.
[2] Andraka Ray.A survey of CORDIC algorithms for FPGA base computer[C].In Proceedings of the 1998 ACM/SIGDA Sixth International Symposium on Field Programmable Gate Arrays,1998:191-200.
[3] Muller J M.A few results on table-based methods[J].Reliable Computing,1999,5(3):279-288.