APP下载

基于自适应查找表法的FPGA内高精度求模取对数模块设计

2016-07-01徐修峰

雷达与对抗 2016年2期

徐修峰

(中国电子科技集团公司第三十八研究所,合肥230088)

基于自适应查找表法的FPGA内高精度求模取对数模块设计

徐修峰

(中国电子科技集团公司第三十八研究所,合肥230088)

摘要:作为通用的处理器,FPGA优势不言而喻,但也存在一些明显的不足,复数的求模取对数运算就是其中之一。介绍了一种利用CORDIC算法完成高精度的求模运算,再利用自适应查找表法实现高精度取对数运算。该流程实现简单,运行速率快。

关键词:FPGA;CORDIC;求模值;取对数;自适应查找表法

0引言

在现代雷达信号处理过程中,通常将回波信号分解为实部和虚部来进行处理,最后再将处理后的数据进行复信号求模取对数操作,或者当信号由实域转换为频域之后也需要对得到的复信号进行求模操作。因此,对于复数信号的求模和取对数操作是必不可少的一个环节,在雷达信号处理中有着广泛的使用。

近年来,FPGA技术的发展异常迅猛,已经逐渐成为雷达信号处理的主要高速处理器。利用FPGA进行雷达信号处理,实时性强,灵活快捷,处理能力强,易于模块化设计,开发周期短,支持在线编程,并具有很强的通用性和可扩展性。但是,FPGA技术仍有一些不足之处有待解决。例如,利用FPGA来实现复杂的公式运算就是一件非常复杂或者是不可能实现的任务。针对这些问题,一系列的特定功能的算法及模块应运而生。本文着重介绍其中利用CORDIC算法来实现复数求模功能的模块和利用查找表方式实现求对数的模块[1],并针对现有的查找表占用资源太大的方式提出了改进措施。

1基于CORDIC算法的复数求模

在雷达信号处理系统中,求模取对数运算是必不可少的环节。在一些处理速度要求不高的系统中,求模运算通常由DSP芯片或者软件实现,但对于速度要求很高的场合则只能利用FPGA来实现求模去对数运算。在新推出的FPGA芯片中,目前均已包含了CORDIC运算的核[2]。以Xilinx芯片为例,其推出的CORDIC运算核能够实现复数的旋转、求模等功能,能够直接实现复数的求模操作。该种方式速度快,程序简单,但需要消耗一定数量的乘法器资源。

CORDIC是由Volder在1959 年提出的。这种算法可以应用在圆周坐标、线性坐标和双曲线坐标中。利用CORDIC算法可以通过移位和加减运算,能够递归计算出常用函数值,如sin、cos等函数。Walther J在1974年利用它研究出了一种能够计算出多种超越函数的统一算法。如今Xilinx FPGA推出了CORDIC IP核。利用该IP核可以方便快捷地实现复数的求模操作,按照其既定的输入输出格式即可实现以往在FPGA中较难实现的开根号的操作[3]。

图1给出了Xilinx的CORDIC IP核的调用(a)及参数设置(b)过程,所采用的软件版本为vivado_2014.4。

图1 VIVADO软件CORDIC模块IP核设置界面

样例设计中使用的复数数据的输入位宽分别为16位。由于该模块在使用过程中的最高位必须为符号位扩展,故而将IP核定制为17位,额外增加一位符号位,输出的位宽同时也定制为17位,同样最高位为符号位。输入输出格式要求如图1(b)所示。图2给出了实际使用过程中的IP的输入输出的模块图。

图2 VIVADO软件CORDIC模块IP核输入输出示意图

该IP利用了坐标旋转的方式,将输入的复信号经过旋转与实数坐标轴重合,获得了此时的模值以及旋转角度,从而完成了复数求模的过程。

2基于定长查找表方式的常精度取对数模块设计

在雷达信号处理中,通常将数据进行取对数操作。在FPGA中实现取对数操作通常采用的是查找表的方式,即实现将一定范围内的数据的对数值以查找表的方式存入到FPGA内的存储区域内部,然后以数据为地址索引,取出对应的对数值。该种方式能够快速实现取对数的运算,避免了复杂的运算,也避免了在FPGA内进行取对数操作。但是,该方式的不足在于随着输入数据的位宽增加,其对应的查找表的长度呈指数方式增加,如12位的数据对应的查找表长度为4096,这个一般可以接受,但20位数据对应的长度迅速增加为1 MB。一般的FPGA都很难提供如此大的存储区间,并且由于取对数运算的特殊性,不能通过简单的去除低位的方式来缩减存储区间,因为当输入数据较小时其对数的输出结果却不可被忽略。为了在没有消耗过多存储资源的前提下在FPGA中实现取对数的操作,并且满足特定的精度,需要对现有的查找表方法进行改进。

本文提出了一种自适应的查找表法来实现在FPGA中取对数运算。在FPGA中例化了一个深度为4096的RAM,即地址位宽为12位,数据位宽也为12位。然后,将1~4 096的对数值经过量化后存入到RAM中。FPGA内部是无法表示小数的,所以必须对输出的对数结果进行量化。式(1)给出了量化过程。图3给出了处理之后RAM内储存的数据与地址的对应关系。

RAM_OUT = 4096*log10(Addr)/log10(4096)

(1)

图3 RAM内存储数据

当输入数据的位宽小于等于12位时,可以直接使用该查找表进行取对数操作。将需要取对数的数据连接到RAM的地址线Addr上,然后将RAM的输出的数据作为取对数结果进行使用。

当输入数据的位宽大于12位的时候,比如说输入数据位宽为20时,如果按照之前的方式创建RAM,则RAM的大小必须为1 MB。该存储深度FPGA一般无法承受,即使能够承受也是资源的巨大浪费。所以,如果不作特殊处理,查找表法无法满足FPGA中对于20位宽数据取对数的要求。

针对如上情况,本文提出了自适应查表方式。首先对输入数据进行预处理,然后再使用固定长度的RAM进行查表操作,并且不是简单地对输入数据进行截位操作,同时能够保证结果达到固定的精度。假定输入数据的位宽为20位,步骤如下:

(1) 判断输入数据的最高位是否为1,如是1则取此后的12位,舍去低位,进行查表操作,得出结果之后进行补偿。

(2) 在最高位也为0情况下,判断次高位是否为1,如是则取此后的12位进行查表,然后进行补偿操作。

(3) 在次高位也为0情况下,判断第3高位是否为1,如是则取此后的12位进行查表,然后进行补偿操作。

依次类推,直到只剩下12位的情况下则可直接进行查表,然后得出结果,此时补偿操作所增加的值为0。

图4 自适应查表法流程图

图4中,当Data[20]=1时,即数据位的最高为1,就截取其最高的12位进行取对数操作,即第20位到第9位,然后查出结果后再进行补偿操作。所谓的补偿操作的原理如式(2)所示。

Log10(2n*Data) =n*Log102+Log10(Data)

(2)

其实,其原理就是对数的基本性质之一。在图4中所示的几位补偿操作,其实就是根据式(2)中的n来对数据进行补偿,每相差一位则在输出结果上增加一个Log102,这样就保证了数据运算的正确性。

下面来计算一下截位所产生的误差。当Data[20]=1时,低8位数据被舍弃,其被舍去的数据大小最大为255,假设其为28,而Data[20..8]的最小值为二进制下的20’b10000000000000000000,此时的误差相对最大,转换为十进制则为219。按式(3)进行误差运算可得其误差:

=[Log10(219+28)-Log10(219)]/Log10(219)

=Log10(219+28)/Log10(219)-1=3.7*10-5

(3)

设输入数据有效位宽为A,查找表位宽为B,根据式(3)可得误差计算公式为

=log10(2(A-1)+2(A-B))/log10(2(A-1))-1

(4)

以输入数据位宽A=20为例,查找表采用不同存储深度情况下的误差如表1所示。

表1 不同存储深度下的误差

以查找表位宽B=12为例,对应不同输入数据位宽情况下的误差如表2所示。

表2 不同数据位宽下的误差

如表1、2中所示,采用10位存储宽度即1 024位深度的查找表即可实现精度10-4的取对数精度。当查找表位宽为12时,即采用4 096深度的情况下,输入位宽为16到22位时可实现精度10-5的取对数精度,且误差受数据位宽影响较小,主要的影响因素是查找表的存储深度。该方法简单可靠,精度高,极易于在FPGA中实现。

3结束语

本文中介绍的基于Xilinx软件提供的CORDIC核所进行的求模运算,速度快,精度高,实现简单。本文的自适应查找表法求对数值解决了在FPGA中实现取对数的问题,且所需资源小,速度快,精度高。将求模取对数模块合并入一个模块中,即可实现雷达信号处理过程中的复数信号到其能量域的转换过程,方便快捷,性能好。

参考文献:

[1]牟胜梅,杨晓东.一种改进的基于FPGA 的32 位对数变换器的设计与实现[J].计算机研究与发展,2007,44(7):1252-1258.

[2]祁艳杰,刘章发.基于Parallel_Cordic的高精度高速度直接数字频率合成器的FPGA 实现[J].电子学报,2014,42(7).

[3]邱军海,关键,等.常用雷达视频信号处理算法在FPGA 上的实现[J].海军航空工程学院学报,2006,21(6).

Design of high-precision modulo operation and logarithm module in FPGA based on adaptive lookup table method

XU Xiu-feng

(No.38 Research Institute of CETC, Hefei 230088)

Abstract:It goes without saying that the FPGA, as the general processor, has a variety of advantages. However, it also has some deficiencies such as mod operation and logarithm algorithm of the complex number. A high-precision mod operation is introduced based on the CORDIC algorithm, and then the high-precision logarithmic algorithm is realized through the adaptive lookup table (LUT) method, both of which can be easily implemented with fast operating speed.

Key words:FPGA; CORDIC; modulo value; logarithm; adaptive LUT method

收稿日期:2016-01-20;修回日期:2016-02-23

作者简介:徐修峰(1986-),男,工程师,博士,研究方向:雷达数字信号处理。

中图分类号:TN911.7

文献标志码:A

文章编号:1009-0401(2016)02-0035-03