浙江大学学报(工学版), 2019, 53(10): 2034-2040 doi: 10.3785/j.issn.1008-973X.2019.10.021

通信技术

基于三步旋转坐标旋转数字计算机算法的直接数字频率综合器实现

张亚云,, 刘家瑞,, 王志宇, 莫炯炯, 郁发新

Implementation of direct digital frequency synthesizer based on three-step rotation coordinate rotation digital computer algorithm

ZHANG Ya-yun,, LIU Jia-rui,, WANG Zhi-yu, MO Jiong-jiong, YU Fa-xin

通讯作者: 刘家瑞,男,助理研究员. orcid.org/0000-0002-1567-3422. E-mail: jrliu@zju.edu.cn

收稿日期: 2018-08-22  

Received: 2018-08-22  

作者简介 About authors

张亚云(1994—),女,硕士生,从事数字集成电路的研究.orcid.org/0000-0003-3640-689X.E-mail:yyzhangstu@zju.edu.cn , E-mail:yyzhangstu@zju.edu.cn

摘要

提出基于三步旋转机制的高精度低时延坐标旋转数字计算机 (CORDIC)算法. 该算法通过对输入角度进行二极化重编码来免除剩余旋转角度的运算,利用三步旋转机制对迭代次数进行压缩,结合合并迭代技术进一步减少迭代次数,降低输出时延. 以16位输出位宽为例,对三步旋转CORDIC算法和流水线迭代式算法进行实现,仿真结果表明:三步旋转CORDIC算法与流水线迭代式算法相比,改善了输出精度,输入到输出的时延降低了75%,硬件开销下降了29.2%. 基于三步旋转CORDIC算法,实现了相位累加器位宽为24的直接数字频率综合器 (DDFS);使用加法树结构对多输入加法器进行优化,以提高电路工作频率. 仿真结果表明,该算法的最大幅度误差为8.24 × 10−6,输出时延为38.5 ns.

关键词: 坐标旋转数字计算机 (CORDIC) ; 二极化重编码 ; 三步旋转 ; 合并迭代 ; 加法树 ; 现场可编程门阵列

Abstract

A high precision and low output delay coordinate rotation digital computer (CORDIC) algorithm based on three-step rotation mechanism was proposed. The operation of the residual rotation angle was avoided by binary to bipolar recoding of the input angle, the number of iterations was compressed by three-step rotation mechanism, and the number of iterations and output delay were reduced by combining with merging iteration technique. The three-step rotation CORDIC algorithm and pipeline iterative algorithm were implemented by taking 16-bit output bit-width as an example. The simulation results show that the three-step rotation CORDIC algorithm improves the output accuracy, reduces the input-output delay by 75%, and reduces the hardware overhead by 29.2% compared with the pipeline iterative algorithm. The direct digital frequency synthesizer (DDFS) with a phase accumulator of 24 bits bit-width was implemented based on the three-step rotation CORDIC algorithm, and the multi-input adder was optimized with the addition tree structure in order to improve the circuit frequency. The simulation results showed that the maximum amplitude error of the algorithm was 8.24 × 10−6, and the output delay was 38.5 ns.

Keywords: coordinate rotation digital computer (CORDIC) ; binary to bipolar recoding ; three-step rotation ; merging iteration ; adder tree ; field programmable gate array

PDF (962KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

张亚云, 刘家瑞, 王志宇, 莫炯炯, 郁发新. 基于三步旋转坐标旋转数字计算机算法的直接数字频率综合器实现. 浙江大学学报(工学版)[J], 2019, 53(10): 2034-2040 doi:10.3785/j.issn.1008-973X.2019.10.021

ZHANG Ya-yun, LIU Jia-rui, WANG Zhi-yu, MO Jiong-jiong, YU Fa-xin. Implementation of direct digital frequency synthesizer based on three-step rotation coordinate rotation digital computer algorithm. Journal of Zhejiang University(Engineering Science)[J], 2019, 53(10): 2034-2040 doi:10.3785/j.issn.1008-973X.2019.10.021

坐标旋转数字计算机 (coordinate rotation digital computer, CORDIC)的概念起源于笛卡尔坐标系中的角度旋转,算法采用一组基本角度的加减组合来逼近目标角度,单个基本角度的旋转可以通过移位和加法运算完成[1],这使得其具有精度可以调节、硬件实现简便、速度快的优点. CORDIC算法本身作为一个强大的数学运算工具,可以用来作通用的科学计算[2-3],因而在快速傅里叶变换、离散余弦变换和数控振荡器、直接数字频率综合器(direct digital frequency synthesizer, DDFS)等数字信号处理和通信领域有着极其广泛的应用[4-7].

传统的直接数字频率综合器采用只读内存(read only memory, ROM)查找表完成从累加器输出相位到幅度的转换,然后经数模转换器(digital to analog converter, DAC)和低通滤波器(low pass filter, LPF)完成数字信号到模拟信号的转换[8]. 将CORDIC算法应用于DDFS中的相幅转换模块,与ROM查找表相比,可以有效降低高精度DDFS所需占用的存储资源,提高电路速度.

传统的流水线迭代式CORDIC算法依赖于迭代次数保证算法精度,本次迭代的旋转方向需要等待上次迭代完成才能确定[9]. 对于精度要求高的情况,需要迭代很多次,导致输出时延过长,硬件消耗大. 随着数字通信系统向实时性和高集成度趋势的发展,研究者们提出多种改进方案:史方显等[10]提出选择迭代式的CORDIC算法,有效减少了迭代次数,但z通路的复杂运算使得其存在硬件消耗较大的问题. 张佳等[11]设计的三角函数运算单元提高了精度,但所耗费的资源很大. 徐成等[12]提出免除缩放因子的双步旋转机制,将两次基本旋转合并成一次迭代,减少了一半的迭代次数,但输出时延很大;祁艳杰等[13]采用并行CORDIC算法模块代替查找表,对进位保存加法器进行改进,提高了运算速度,但所消耗的资源增加,精度较低.

针对目前CORDIC算法实现时存在的时延大和资源消耗大的问题,结合三步旋转机制、角度二极化重编码技术和合并迭代技术,提出改进的低时延低消耗CORDIC算法. 结合加法树技术,实现了20位定点小数的高精度低时延DDFS,与其他方案相比,在资源、时延和精度上都有优化.

1. 三步旋转CORDIC算法

1.1. 角度二极化重编码

CORDIC的基本思想如下:通过基本角度集 $\left\{ {\left. {{\theta _i}} \right\}} \right.$包含的角度的线性组合来逼近输入角度. 如图1所示,向量 $\left( {{{ x}_n},{{ y}_n}} \right)$逆时针旋转角度 $\theta $,得到与其模值相同的向量 $\left( {{{{ x_m}}},{{{ y_m}}}} \right)$,这可以通过依次旋转一组基础角度 ${\theta _i}$来完成,即通过依次旋转 ${\theta _1}$${\theta _2}$, ···, ${\theta _N}$来完成.

图 1

图 1   向量旋转图

Fig.1   Vector rotation diagram


以流水线迭代方式实现CORDIC算法时,取 ${\theta _i} = \arctan \,\,({2^{ - i}})$. 初始迭代值取(1,0)乘上模校正因子后的值,即 $({x_0},{y_0},{z_0}) = (K,0,\theta )$,其中 $K$为模校正因子,

$K = \prod\limits_{i = 0}^{N - 1} {\cos \;{\theta _i}} .$

根据如下迭代公式,以流水线结构完成迭代[9]

$\left. {\begin{array}{l} {{x_{i + 1}} = {x_i} - {d_i}{2^{ - i}}{y_i},} \\ {{y_{i + 1}} = {y_i} + {d_i}{2^{ - i}}{x_i},} \\ {{z_{i + 1}} = {z_i} - {d_i}{\theta _i},} \\ {{d_i} = {\rm sgn}\; ({z_{ i}}).} \end{array}} \right\}$

引入的 ${z_i}$表示剩余未旋转角度,用 ${d_i}$来指示旋转的方向, ${d_i}$取−1时进行逆时针旋转, ${d_i}$取1时进行顺时针旋转. 由于该次迭代的方向由 ${d_i}$上次迭代结果给出,输出时延随着迭代次数的增加而增加. 流水线结构提高了数据的吞吐率,但每步迭代都占用相应的硬件资源,因此硬件消耗随着迭代次数的增加而增加.

考虑到 $\left[ {0,{{\text{π}} / 8}} \right]$内的角度 $\theta $可以用N位的二进制小数形式表示为

$\theta = \sum\limits_{i = 2}^N {{b_i}{2^{ - i}}} .$

式中: ${b_i}$取0或1,对 ${b_i}$的取值进行极化处理,即令 ${r_{i + 1}} = 2{b_i} - 1$,则 ${r_i}$取−1或1. 相应地, $\theta $可以表示为

$\theta = {\varphi _0} + \sum\limits_{i = 3}^{N + 1} {{r_i}{2^{ - i}}} {\text{,}}$

${\varphi _0} = \sum\limits_{i = 3}^{N + 1} {{2^{ - i}}} = \frac{1}{4} - {\left( {\frac{1}{2}} \right)^{N + 1}}.$

这种对二进制小数位值进行极化处理的编码方式,称为角度二极化重编码[14-15].

与取 $\left\{ {\left. {\arctan \,\,({2^{ - i}})} \right\}} \right.$角度集作为基本角度集的传统CORDIC算法不同,角度二极化重编码将输入角度 $\theta $分解为一个较大的角度 ${\varphi _0}$和若干个 ${2^{ - i}}$弧度的组合[16]. 在坐标旋转时,先旋转一个较大的角度 ${\varphi _0}$,然后每次旋转 ${2^{ - i}}$弧度,加快了收敛到目标角度的进程. 此外,对于 ${b_i}$的极化处理不需要消耗额外的硬件资源,当 ${b_i} = 1$时,对应 ${r_{i + 1}} = 1$,逆时针旋转 ${2^{ - i}}$弧度;当 ${b_i} = 0$时,对应 ${r_{i + 1}} = - 1$,顺时针旋转 ${2^{ - i}}$弧度,每次的旋转方向在得到 $\theta $时已确定,即由 $\theta $的二进制位值决定,这既消除了流水线迭代式算法中剩余旋转角度运算通路所消耗的资源,也提高了算法的并行性.

1.2. 三步旋转与多路选择器

经过角度二极化重编码处理后,单次的旋转迭代公式变为

$\left. \begin{array}{l} {x_{i + 1}} = {x_i} - {r_i}\tan \left( {{2^{ - i}}} \right){y_i}, \\ {y_{i + 1}} = {y_i} + {r_i}\tan \left( {{2^{ - i}}} \right){x_i}. \end{array} \right\}$

$\tan \,\,({2^{ - i}})$进行泰勒展开可知, $ i \geqslant m =$ $ \left\lfloor {{{(N - {{\log }_2}3)} / 3}} \right\rfloor $时, $\tan \,\,({2^{ - i}}) \approx {2^{ - i}}$,因而式(6)可以化为

$\left. \begin{array}{l} {x_{i + 1}} = {x_i} - {r_i}{2^{ - i}}{y_i}, \\ {y_{i + 1}} = {y_i} + {r_i}{2^{ - i}}{x_i}. \\ \end{array} \right\}$

对于 $m \leqslant i < {N / 2}$阶段的旋转迭代,采用三步旋转的方式来压缩迭代次数. 对于这一阶段的迭代来说, ${x_i} \times {2^{ - (3i + 3)}}$${y_i} \times{2^{ - (3i + 3)}}$等于机器零,按式(7)连续迭代3次并除去机器零项,可得

$\left. \begin{aligned} &{x_{i + 3}} = {x_i}\left( {1 - \frac{{{r_i}{r_{i + 1}}}}{{{2^{(2i + 1)}}}} - \frac{{{r_i}{r_{i + 2}}}}{{{2^{(2i + 2)}}}} - \frac{{{r_{i + 1}}{r_{i + 2}}}}{{{2^{(2i + 3)}}}}} \right) - \sum\limits_{j = i}^{i + 2} {{r_j}{2^{ - j}}{y_i}} , \\ & {y_{i + 3}} = {y_i}\left( {1 - \frac{{{r_i}{r_{i + 1}}}}{{{2^{(2i + 1)}}}} - \frac{{{r_i}{r_{i + 2}}}}{{{2^{(2i + 2)}}}} - \frac{{{r_{i + 1}}{r_{i + 2}}}}{{{2^{(2i + 3)}}}}} \right) + \sum\limits_{j = i}^{i + 2} {{r_j}{2^{ - j}}{x_i}} . \end{aligned} \right\}$

式(8)省去了中间迭代的过程,从 $({x_i},{y_i})$经三步旋转直接得到 $({x_{i + 3}},{y_{i + 3}})$,即在1个时钟周期内完成了3次迭代. 对应的结构图如图2所示.

图 2

图 2   三步旋转结构示意图

Fig.2   Schematic diagram of three-step rotation structure


三步旋转可以在1个时钟周期内完成3次迭代,减少了迭代次数. 通过图2可以看出,相比于式(6)的迭代,三步旋转可以节省硬件资源.

对于 $i < m$的迭代,即 $({x_m},{y_m})$的求解,可以通过多路选择器完成. 对于 $\left[ {0,{{\text{π}} / 8}} \right]$的角度 $\theta $来说, $i$从3开始取值,则初始迭代值 $({x_0},{y_0}) = (K,0)$在逆时针旋转 ${\varphi _0}$后可以得到 $({x_3},{y_3})$,计算公式为

$\left. \begin{array}{l} {x_3} = {x_0} - \tan \left( {{\varphi _0}} \right){y_0}, \\ {y_3} = {y_0} + \tan \left( {{\varphi _0}} \right){x_0}. \\ \end{array} \right\}$

根据式(6)和r3, ···, rm−2, rm−1的所有可能取值线下计算出 $({x_m},{y_m})$的所有可能取值,将 $({x_m},{y_m})$的所有可能取值存在一个小的ROM查找表或寄存器组中(对于20位的定点算法的实现来说,仅需要地址位宽为3 bit的查找表或寄存器组). 在第一阶段时,直接通过一个多路选择器,从这个小的ROM查找表或寄存器组中选出正确的初始迭代值,然后进行三步旋转迭代. 由于m的取值小,该多路选择器的地址位 ${r_3} \cdot \cdot \cdot {r_{m - 2}}{r_{m - 1}}$位宽不会太大,与多次迭代式(6)相比,大大减少了从输入到输出的时延和耗费的硬件资源.

1.3. 合并迭代和区间折叠

对于 $i \geqslant m$的迭代,由式(7)推导出两次迭代合并后的公式[17]

$\left. \begin{array}{l} {x_{i + 2}} = {x_i} - {y_i}{r_i}{2^{ - i}} - {y_i}{r_{i + 1}}{2^{ - i - 1}} - {x_i}{r_i}{r_{i + 1}}{2^{ - 2i - 1}}, \\ {y_{i + 2}} = {y_i} + {x_i}{r_i}{2^{ - i}} + {x_i}{r_{i + 1}}{2^{ - i - 1}} - {y_i}{r_i}{r_{i + 1}}{2^{ - 2i - 1}}. \end{array} \right\}$

$i > {{(N - 1)} / 2}$时, ${x_i}{r_i}{r_{i + 1}}{2^{ - 2i - 1}}$${y_i}{r_i}{r_{i + 1}}{2^{ - 2i - 1}}$等于机器零,因此对于这一阶段的n次迭代,可以合并成如下形式:

$\left. \begin{array}{l} {x_{i + n}} = {x_i} - {y_i}\displaystyle\sum\limits_{j = i}^{k + n - 1} {{r_j}{2^{ - j}}} , \\ {y_{i + n}} = {y_i} + {x_i}\displaystyle\sum\limits_{j = i}^{k + n - 1} {{r_j}{2^{ - j}}} . \end{array} \right\}$

由式(11)可知,这一阶段由 $({x_i},{y_i})$可以一步计算出 $({x_{i + n}},{y_{i + n}})$,硬件实现时,用移位相加结构一步完成这一阶段的迭代,因而输出时延极大减小.

对于 $\left[ {0,{{\text{π}} / 8}} \right]$区间角度的正余弦值的求解,可以通过上面这种多路选择器、三步旋转和合并迭代的三阶段运算完成. 对于 $\left( {\left. {{{\text{π}} / 8},{{\text{π}} / 4}} \right]} \right.$区间的角度,可以用如下的两角差公式进行求得:

$\left. \begin{aligned} &\sin\,\, \left(\frac{\text{π}}{4} - \theta \right) = \frac{{\sqrt 2 }}{2}(\cos \theta - \sin \theta ), \\ &\cos \,\,\left(\frac{\text{π}}{4} - \theta \right) = \frac{{\sqrt 2 }}{2}(\cos \theta + \sin \theta ). \end{aligned} \right\}$

可以看出,对 $\left[ {0,{{\text{π}} / 8}} \right]$区间角度的正余弦值作一次加减法,再乘上固定缩放因子 ${{\sqrt 2 } / 2}$可得 $\left( {\left. {{{\text{π}} / 8},{{\text{π}} / 4}} \right]} \right.$区间角度的正余弦值. 利用三角函数的对称性,可以求得 $\left[ {0,2{\text{π}} } \right]$区间角度的正余弦值,即整个 $\left[ {0,2{\text{π}} } \right]$区间的角度可以折叠到 $\left[ {0,{{\text{π}} / 8}} \right]$区间.

2. 三步旋转CORDIC算法的实现

根据前面描述的算法原理,算法实现的整体流程如下:根据输入角度的二进制位值,从可能的初始值中选择正确的初始值完成第1阶段的迭代;然后通过三步旋转得到第2阶段的迭代结果,再通过合并迭代完成第3阶段的迭代;最后根据两角差公式和三角函数对称性,进行角度还原. 角度还原包括一次加法运算和缩放 ${{\sqrt 2 } / 2}$运算,其中缩放 ${{\sqrt 2 } / 2}$可以通过移位相加结构实现,因为 ${{\sqrt 2 } / 2}$可以用二进制小数的形式表示为(0.101 101 010 000 010 1)2. 利用硬件描述语言Verilog,按照如图3所示的算法框图,实现了输出位宽为16位(包括1位符号位)的三步旋转CORDIC算法,输入数据位宽取18位(高4位指示角度所属区间范围),中间计算结果采用18位.

图 3

图 3   三步旋转算法实现框图

Fig.3   Block diagram of three-step rotation algorithm realization


在相同的输出位宽(N=16)的情况下,比较流水线迭代式算法和三步旋转算法的误差. 利用Matlab实现了流水线迭代式CORDIC算法和提出的三步旋转算法,开展定点化误差仿真,仿真时输入角度的分辨率取2−15,角度取 $\left[ {0,{{\text{π}} / 2}} \right]$,误差分析时均采用绝对误差. 用Verilog实现了输出位宽相同的2种算法,利用Vivado软件进行综合来评估资源消耗. 2种算法的精度、资源和时延的对比如表1所示. 表中,Tclk为时针周期.

表 1   2种算法的性能对比

Tab.1  Performance comparison of two algorithms

算法 最大幅值
误差/10 −5
硬件开销
LUT+FF
输出时延
传统流水线算法 43.7 1 619 16 Tclk
三步旋转算法 18.7 1 146 4 Tclk

新窗口打开| 下载CSV


表1 可以看出,三步旋转算法的查找表(look-up table, LUT)和寄存器(flip-flop, FF)开销总共为1 146个,与传统流水线算法相比,硬件开销下降了29.2%;三步旋转CORDIC算法的输出时延为4个时钟周期(Tclk),与传统流水线算法相比下降了75%,这是由于三步旋转算法采用三步旋转和合并迭代的方法对迭代次数进行了压缩. 三步旋转CORDIC算法的最大幅值误差为18.7×10−5,比传统算法的误差小. 传统算法采用θi=arctan (2i)的线性组合来逼近输入角度 $\theta $,经过有限次的旋转迭代后,总旋转的角度与输入角度的差值较大;三步旋转CORDIC算法采用角度二极化重编码的方式(见式(4))对输入角度进行分解,对于角度 ${\varphi _0}$的旋转,根据式(9)采用线下计算的方式取得更高的精度,而后直接根据输入角度的二进制位值决定旋转 ${2^{ - i}}$弧度的方向,基于这两点,三步旋转CORDIC算法与传统算法相比,能够达到更高的精度.

3. 基于三步旋转CORDIC算法的DDFS实现

利用改进的三步旋转CORDIC算法,实现DDFS中的相幅转换模块,并将结果送到DAC,结构框图如图4所示. 累加器负责对频率控制字进行累加,将累加得到的角度进行区间折叠;然后将角度转换到 $\left[ {0,{{\text{π}} / 8}} \right]$,根据转换后的角度位值选择正确的值进行三步旋转,经合并迭代后得到正余弦值;再根据三角函数公式和对称性得到原角度的正余弦值,送到DAC.

图 4

图 4   基于三步旋转的DDFS结构

Fig.4   DDFS structure based on three-step rotation


3.1. 相位累加器和加法树

相位累加器对给定的频率控制字进行累加得到相位,当累加到 $2{\text{π}}$后,将累加结果减去 $2{\text{π}}$;接着累加,可得多个周期的正余弦波形.

为了提高电路的系统速度,对算法中多输入的加法器进行优化. 采用加法树结构将加法运算流水化,可以使电路满足更严格的时序约束,提高电路的系统时钟频率. 3级加法树结构的示意图如图5所示,即将操作数两两相加;然后用流水线寄存器进行寄存,对寄存后的结果进行两两相加然后寄存,直到最后一级输出. 算法实现时考虑速度和资源的折中,可以调整单级加法树中加法器的输入个数.

图 5

图 5   3级加法树的示意图

Fig.5   Schematic diagram of three-stage addition tree


3.2. DDFS的实现与仿真结果分析

基于图4,用Verilog 硬件描述语言实现了20位定点小数的DDFS,即相位累加器的位宽取24,其中包括1位符号位;然后将相位折叠到 $\left[ {0,{{\text{π}} / 8}} \right]$,即用20位小数表示折叠后的相位. 通过Modelsim仿真得到的正余弦波形如图6所示. angle_init信号是0到2π线性增加的相位,溢出后再从0开始增加. angle信号为折叠到 $\left[ {0,{{\text{π}} / 8}} \right]$后的相位,sin和cos信号是生成的两路正交信号.

图 6

图 6   Modelsim仿真图

Fig.6   Modelsim simulation diagram


在Matlab中对DDFS进行20位小数的定点化仿真,仿真所得的正弦值和余弦值绝对误差如图7所示. 图中,Es为正弦值误差,Ec为余弦值误差, $\theta $为输入角度. 图7中黑点标示了误差的最大值,可以看出算法的幅度误差不超过8.24×10−6.

图 7

图 7   三步旋转CORDIC算法的正、余弦值绝对误差

Fig.7   Sine and cosine absolute error of three-step rotation CORDIC algorithm


将算法实现后输出的数据导入Matlab中,对输出波形进行频谱分析,计算出无杂散动态范围(spurious free dynamic range, SFDR). 输出信号频率为120 MHz时的频谱图(500 MHz采样频率)如图8所示. 图中,f为信号频率,Amp为信号幅度,SFDR为105.03 dB.

图 8

图 8   输出频率为120 MHz时的输出信号频谱图

Fig.8   Spectrum of output signal when output frequency is 120 MHz


对于实现的Verilog代码进行综合,选择Xilinx的XC5VLX30型号的现场可编程门阵列(field programmable gate array, FPGA)芯片. 基于该算法和文献[10]、[13]、[18]算法实现的DDFS的最大幅度误差、输出时延及硬件消耗的对比,如表2所示. 可以看出,本文的硬件开销比文献[10]、[13]都小,这是由于采用角度二极化重编码省去了剩余旋转角度的计算,即消除了z通路的运算. 角度二极化重编码后旋转的角度是直接由角度的位值决定的,这使得本文的精度更高. Xin等[18]采用循环迭代和流水线相结合的方法,重复使用移位寄存器和加法器减少了硬件开销,但是这使得输出时延很大. 虽然Xin等[18]的硬件开销为本文的37.48%,但是输出时延是本文的4.27倍. 本文采用三步旋转和合并迭代技术极大地压缩了迭代次数,利用加法树对多输入加法器进行适当的优化,提高了电路的工作频率,达到了更低的输出时延,即38.5 ns.

表 2   4种方案的最大幅度误差、输出时延及硬件消耗对比

Tab.2  Comparison of maximum amplitude error, output delay and hardware consumption of four schemes

采用
方案
最大迭
代次数
最大幅
度误差
输出时延/
ns
硬件开销
LUT+FF
文献[10] 7 2.0 × 10−5 43.5 4 590
文献[13] 48.5 × 10−5 41.0 5 170
文献[18] 24 9 × 10−5 164.5 1 328
本文 2 8.2 × 10−6 38.5 3 543

新窗口打开| 下载CSV


4. 结 语

针对流水线迭代式CORDIC算法硬件开销大和输出时延大的缺点,提出基于三步旋转机制的低时延低消耗CORDIC算法. 从数学上分析三步旋转算法降低时延和资源消耗的原理,即利用三步旋转和合并迭代压缩迭代次数,结合区间折叠和角度二极化重编码技术消除剩余旋转角度运算通路;用Verilog语言实现了算法,通过仿真对比三步旋转算法和流水线迭代式算法的性能. Matlab仿真结果和Vivado综合结果表明:与流水线迭代式CORDIC算法相比,在精度稍有改善的情况下,三步旋转算法的硬件开销降低了约29.2%,从输入角度到输出正余弦值的时延减少了75%. 利用该算法,结合加法树技术实现了DDFS. 仿真结果表明,与以往的实现方案相比,在精度、硬件开销和输出时延方面均有一定的优化.

参考文献

CHEN L B, HAN J, LIU W Q, et al

Algorithm and design of a fully parallel approximate coordinate rotation digital computer (CORDIC)

[J]. IEEE Transactions on Multi-Scale Computing Systems, 2017, 3 (3): 139- 151

DOI:10.1109/TMSCS.2017.2696003      [本文引用: 1]

AGGARWAL S, MEHER P K, KHARE K

Concept, design, and implementation of reconfigurable CORDIC

[J]. IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2016, 24 (4): 1588- 1592

DOI:10.1109/TVLSI.2015.2445855      [本文引用: 1]

MILFORD D, SANDELL M

Singular value decomposition using an array of CORDIC processors

[J]. Signal Processing, 2014, 102: 163- 170

DOI:10.1016/j.sigpro.2014.03.022      [本文引用: 1]

TANG A M, YU L, HAN F J, et al. CORDIC-based FFT real-time processing design and FPGA implementation [C]// 2016 IEEE 12th International Colloquium on Signal Processing and its Applications. Melaka, Malaysia: IEEE, 2016: 233-236.

[本文引用: 1]

SHABANI A, TIMARCHI S

Low-power DCT-based compressor for wireless capsule endoscopy

[J]. Signal Processing: Image Communication, 2017, 59: 83- 95

DOI:10.1016/j.image.2017.03.003     

QU X J, CHEN H, ZHANG Y B, et al

Design of DDS based on hybird-CORDIC architecture

[J]. International Journal of Computational Intelligence Systems, 2011, 4 (3): 306- 313

DOI:10.1080/18756891.2011.9727787     

ZHANG C Z, HAN J A, LI K

Design and implementation of hybrid CORDIC algorithm based on phase rotation estimation for NCO

[J]. The Scientific World Journal, 2014, 2014: 1- 8

[本文引用: 1]

KANG C Y, SWARTZLANDER E E. An analysis of the CORDIC algorithm for direct digital frequency synthesis [C]//IEEE International Conference on Application-Specific Systems, Architectures and Processors. San Jose, California: IEEE, 2002: 111-119.

[本文引用: 1]

VOLDER J E

The CORDIC trigonometric computing technique

[J]. IRE Transactions on Electronic Computers, 1959, EC-8 (3): 330- 334

DOI:10.1109/TEC.1959.5222693      [本文引用: 2]

史方显, 曾立, 陈昱, 等

改进型高速高精度CORDIC算法及其在DDFS中的应用

[J]. 电子学报, 2017, 45 (2): 446- 451

DOI:10.3969/j.issn.0372-2112.2017.02.025      [本文引用: 4]

SHI Fang-xian, ZENG Li, CHEN Yu, et al

Direct digital frequency synthesizer based on an improved high speed and high precision CORDIC algorithm

[J]. Acta Electronica Sinica, 2017, 45 (2): 446- 451

DOI:10.3969/j.issn.0372-2112.2017.02.025      [本文引用: 4]

张佳, 唐威, 盛廷义, 等

一种80位扩展双精度浮点三角函数运算单元的设计

[J]. 微电子学与计算机, 2014, (4): 23- 26

[本文引用: 1]

ZHANG Jia, TANG Wei, SHENG Ting-yi, et al

Design of a 80 bits extended double precision floating-point trigonometric computing unit

[J]. Microelectronics and Computer, 2014, (4): 23- 26

[本文引用: 1]

徐成, 秦云川, 李肯立, 等

免缩放因子双步旋转CORDIC算法

[J]. 电子学报, 2014, 42 (7): 1441- 1445

DOI:10.3969/j.issn.0372-2112.2014.07.031      [本文引用: 1]

XU Cheng, QIN Yun-chuan, LI Ken-li, et al

Double-step scaling free CORDIC

[J]. Acta Electronica Sinica, 2014, 42 (7): 1441- 1445

DOI:10.3969/j.issn.0372-2112.2014.07.031      [本文引用: 1]

祁艳杰, 刘章发

基于Parallel_CORDIC的高精度高速度直接数字频率合成器的FPGA实现

[J]. 电子学报, 2014, 42 (7): 1392- 1397

DOI:10.3969/j.issn.0372-2112.2014.07.023      [本文引用: 4]

QI Yan-jie, LIU Zhang-fa

FPGA implementation of high speed and high precision direct digital frequency synthesizer based on Parallel_CORDIC

[J]. Acta Electronica Sinica, 2014, 42 (7): 1392- 1397

DOI:10.3969/j.issn.0372-2112.2014.07.023      [本文引用: 4]

MADISETTI A, KWENTUS A Y, WILLSON A N

A 100-MHz, 16-b, direct digital frequency synthesizer with a 100-dBc spurious-free dynamic range

[J]. IEEE Journal of Solid-State Circuits, 1999, 34 (8): 1034- 1043

DOI:10.1109/4.777100      [本文引用: 1]

姚亚峰, 付东兵, 杨晓非

基于CORDIC改进算法的高速DDS电路设计

[J]. 华中科技大学学报:自然科学版, 2009, (2): 25- 27

[本文引用: 1]

YAO Ya-feng, FU Dong-bing, YANG Xiao-fei

Implement of high speed DDS circuit design using improved CORDIC algorithm

[J]. Journal of Huazhong University of Science and Technology: Natural Science Edition, 2009, (2): 25- 27

[本文引用: 1]

JUANG T B, HSIAO S F, TSAI M Y

Para-CORDIC: parallel CORDIC rotation algorithm

[J]. IEEE Transactions on Circuits and Systems I: Regular Papers, 2004, 51 (8): 1515- 1524

DOI:10.1109/TCSI.2004.832734      [本文引用: 1]

姚亚峰, 冯中秀, 陈朝

超低时延免迭代 CORDIC 算法

[J]. 西安电子科技大学学报, 2017, 44 (4): 162- 166

DOI:10.3969/j.issn.1001-2400.2017.04.028      [本文引用: 1]

YAO Ya-feng, FENG Zhong-xiu, CHEN Zhao

Ultra-low latency and omit-iteration CORDIC algorithm

[J]. Journal of Xidian University, 2017, 44 (4): 162- 166

DOI:10.3969/j.issn.1001-2400.2017.04.028      [本文引用: 1]

XIN R, ZHANG X T, LI H, et al. An area optimized direct digital frequency synthesizer based on improved hybrid CORDIC algorithm [C]//IEEE International Workshop on Signal Design and its Applications in Communications.[S. l.]: IEEE, 2007: 243-246.

[本文引用: 4]

/