在线刊号(2278-8875)印刷版(2320-3765)
j·m·鲁达吉1,维纳亚克·达拉维2
|
有关文章载于Pubmed,谷歌学者 |
更多相关文章请访问国际电气、电子和仪器工程高级研究杂志
存在各种简单的硬件高效算法,可用于在执行所需的信号处理任务时提高速度。CORDIC就是这样一种简单且硬件高效的算法,它只使用移位和添加算法和表查找来实现不同的功能。它可以有效地实现三角函数和其他函数。本文介绍了传统的展开CORDIC体系结构。该处理器使用Verilog HDL设计,采用结构化编码方法,使用ISIM模拟器进行仿真,并使用Xilinx 14.2 FPGA合成工具实现16位和32位常规基数-2 CORDIC架构。对CORDIC体系结构的输出进行了分析和验证,并与MATLAB中得到的实际值进行了比较。
关键字 |
CORDIC,余弦,正弦,展开架构,Verilog |
介绍 |
大多数负责在FPGA中实现数学函数(如正弦、余弦或平方根)的工程师最初可能会考虑通过查找表(LUT)来实现,如果有乘数,可能会结合线性插值或幂级数。lut是最快的计算方法;但是结果的精度与查找表的大小直接相关。使用幂级数收敛到所需的精度是缓慢的。实际上,查找表的大小是以计算时间为代价的。 |
CORDIC[1],[2],[3]方法用于计算这些初等函数,是上述两种方法之间的折衷,其中精度被保留而不需要任何相当大的内存需求。在现代DSP系统[4],[5]中使用架构需要快速提高性能,同时降低成本和上市时间。通过优化这些结构以改善时序行为和低功耗,可以实现更高的性能。FPGA提供了硬件环境,可以在其中测试专用处理器的功能。它们执行简单的微处理器无法实现的各种高速操作。FPGA提供的主要优势是现场可编程性。为采用CORDIC算法设计的专用处理器的功能实现和测试提供了理想的平台。 |
本文的其余部分按以下方式组织。第二节讨论CORDIC算法及其工作模式。第3节描述了CORDIC算法的展开架构。第4节介绍了结果和相关比较。 |
CORDIC算法 |
坐标旋转数字计算机(CORDIC)是一种迭代算法,用于科学和工程领域,仅使用移位和添加操作来执行几个数学函数。CORDIC在1959年由J.E. Volder[1]首次描述,用于评估三角函数。1971年,J. Walther[2]将CORDIC算法扩展到双曲函数,该算法今天被应用于矩阵计算、数字信号处理、数字图像处理、通信、机器人和图形学等许多应用领域。三角函数和指数函数是通过在圆形,双曲和线性坐标系中旋转来计算的。它们的逆可以在适当的坐标系中以矢量模式实现。 |
在笛卡尔平面上旋转一个矢量,旋转角度θ,可以这样排列 |
![]() |
如果旋转角度受到限制,使得tan (θ) =±2-i,那么乘以tan项就可以简化为一个简单的移位操作。任意角度的旋转可以通过一系列连续的小初等旋转得到。如果每次迭代i的决定是与哪个方向相关,而不是是否旋转,那么cos(θ)项就成为常数。迭代旋转现在可以表示为: |
![]() |
在那里, |
![]() |
从迭代方程中去除缩放常数,得到矢量旋转的移位-相加算法。K的乘积可以应用于系统中的其他地方,也可以作为系统处理增益的一部分,或者通过一定次数迭代的增益的倒数来启动旋转矢量。复合旋转的角度由初等旋转方向的顺序唯一地定义。这个序列可以用一个决策向量表示。所有可能的决策向量的集合是一个基于二元反切线的角度测量系统。一种更好的转换方法是使用附加的加减法,在每次迭代中累积基本旋转角度。初等角可以用任何方便的角度单位表示。这些角值是由一个小的查找表提供的,或者是硬连接的,这取决于实现。角度累加器为CORDIC算法增加了第三个差分方程 |
![]() |
CORDIC旋转器通常以两种模式之一运行,旋转模式和矢量模式[4]。在旋转模式中,矢量(x, y)旋转一个角度θ。角度累加器初始化为所需的旋转角度θ。每次迭代的旋转决策是为了减小角度累加器中残余角的大小。因此,per的决定是基于每一步后剩余角的符号。当然,如果输入角度已经用二进制arctan底数表示,那么角度累加器就可以被消除。 |
对于旋转模式,CORDIC方程为 |
![]() |
经过n次迭代,我们得到如下结果: |
![]() |
![]() |
展开的心形建筑 |
![]() |
展开的结构如图1所示。展开架构有两个优点。首先,移位器的尺寸是固定的,可以在布线中实现。其次,常量可以被硬连接,而不需要存储空间,即ROM保存任意角度值,不需要在每次迭代后更新。计算角度累加器的查找表(LUT)值作为常数分布到角度累加器链中的每个加法器,这样整个CORDIC处理器就简化为一个相互连接的加-减单元数组。与其他结构不同的是,它不需要寄存器,这使得展开结构具有严格的组合电路。它有相当大的延迟,但与迭代过程相比,处理时间减少了。因此展开的实现为更快的应用程序提供了所需的速度 |
以展开方式实现基数-2 CORDIC处理器所需的各种组件是存储角度值tan-1(i)所需的ROM,其中i分别为16位和32位处理器从0到16和32。筒形移位器进行右移,可使用多路复用器实现。每次迭代都需要加/减单元来计算X、Y和z的下一次迭代值。计数器用于计算CORDIC方程的迭代次数。 |
实施及结果 |
CORDIC处理器是通过以下合成描述实现的: |
FPGA平台: |
家庭:Vertex6 |
目标设备:XC6VCX75t |
包:FF484 |
速度等级:-2 |
图2和图3显示了16位和32位CORDIC结构的RTL原理图。 |
![]() |
图4和图5分别为16位和32位CORDIC结构的RTL仿真结果。 |
![]() |
![]() |
![]() |
![]() |
![]() |
结论 |
CORDIC算法是一种广泛应用于DSP应用领域的算法。这影响了DSP系统的成本、速度和灵活性。在fpga上实现基于CORDIC的处理器可以以低成本提高速度,并具有很大的灵活性。 |
在这个项目中,使用Xilinx ISE和VERILOG作为合成工具,设计和模拟了16位和32位基-2 CORDIC架构。对CORDIC体系结构的输出进行了分析和验证,并与MATLAB中得到的实际值进行了比较。实践证明,利用CORDIC处理器可以在降低功耗和资源消耗的情况下实现高速运算,这在DSP应用中是必不可少的。对基-2 CORDIC进行分析。 |
参考文献 |
|