基于流水线结构的cordic算法的实现
基于并行流水线设计的CORDIC加速器[发明专利]
![基于并行流水线设计的CORDIC加速器[发明专利]](https://img.taocdn.com/s3/m/f7bf7ea7be1e650e53ea99a0.png)
专利名称:基于并行流水线设计的CORDIC加速器专利类型:发明专利
发明人:毕卓,戴益君,韩冰,王镇,张莹
申请号:CN201210234809.1
申请日:20120709
公开号:CN102799412A
公开日:
20121128
专利内容由知识产权出版社提供
摘要:本发明涉及一种基于并行流水线设计的CORDIC加速器。
它包括一个角度预处理模块、一个CORDIC内核模块、一个数据后端处理模块和一个控制器模块。
本发明先将外部数据线,控制线读入相关的数据信号和控制信号至控制器模块,随后将待求的角度传输至角度预处理模块,然后将处理好的角度与从控制器模块读入的初值一起传送至CORDIC内核模块,其中CORDIC内核模块采用并行16级流水线结构,快速计算出通过角度预处理模块后角度的正弦和余弦这两个数值,随后将计算出的数据和从控制器模块输出的相位控制信号一同传送至后端数据处理模块,判定出所对应初始相位的正余弦值的正负,最后将正弦值,余弦值传送至控制器模块,根据外部控制信号需要正弦值或余弦值,给出相关的结果。
申请人:上海大学
地址:200444 上海市宝山区上大路99号
国籍:CN
代理机构:上海上大专利事务所(普通合伙)
代理人:何文欣
更多信息请下载全文后查看。
基于CORDIC算法的NCO实现

ChinalntegratedCircult1.引言数字控制振荡器(NCO,numericalcontrolledos-cillator)是软件无线电、直接数据频率合成器(DDS,Directdigitalsynthesizer)、快速傅立叶变换(FFT,FastFourierTransform)等的重要组成部分,同时也是决定其性能的主要因素之一,随着芯片集成度的提高,在信号处理、数字通信领域、调制解调、变频调速、制导控制、电力电子等方面得到越来越广泛的应用。
图1为NCO的基本图示。
在系统时钟的控制下,相位寄存器以频率控制字(步长)累加,相位寄存器的输出与相位控制字相加,然后输入到函数发生器,产生期望的函数样值。
实现NCO的关键部分是相位-幅度变换电路,即图1中的函数发生器。
传统的实现方法是使用查找表,其优点是简单,准确,但是缺点也是显而易见的,存放相位-幅度的查找表ROM的大小和相位精度的位数成指数关系。
当精度要求很高的时候需要使用外部的ROM来扩展,这样将会降低系统的处理速度。
虽然也有人提出一些改进的查找表方式,来压缩ROM空间[1][2],但是,随着微电子技术的发展,使用实时计算来替代查找表的方式是一大趋势,其能有效的提高系统的处理速度。
在实时算法中,相比较泰勒级数法和反函数求值法两种方法,泰勒级数法的实西安电子科技大学电路设计研究所田力冯琦基于CORDIC算法的NCO实现摘要:NCO在信号处理方面有着广泛的应用。
而函数发生器是NCO中的关键部分,本文基于FPGA用状态机和流水线方法实现了CORDIC算法,并取代了传统的ROM查找表法。
最后通过QuartusII软件给出仿真结果,验证了理论的正确性。
关键字:数字控制振荡器CORDIC现场可编程门阵列TheimplementationofNCObasedonCORDICalgorithmLITian,QIFeng(InstituteofElectronicCAD,XidianUniversity)ABSTRACT:FunctiongeneratoristhemainpartofNCOwhichiswidelyusedinsignalprocessing.AnewCORDICalgorithmimplementedbythestatemachineandpipelinebasedonFPGAisproposedtoreplacethetraditionallook-uptableROMmethodinthispaper.ThesimulatedresultofQuartusIIshowsthatthegiventheoryisefficient.KEYWORDS:NCOCORDICFPGA图1数字控制振荡器结构图现需要乘法器,在硬件的复杂性和速度上受到一些限制;反函数求值法在速度上要比坐标旋转数字计算机(CORDIC,COordinateRotationsDIgitalComput-er)算法慢。
CORDIC算法原理及实现

图4.1 圆坐标系旋转
CORDIC算法原理 --圆坐标系旋转原理
上面的方程组同样可写成矩阵向量形式:
x2 cos y sin 2 sin x1 y cos 1
例如一个90o相移为:
x2 0 1 x1 - y1 y 1 0 y x 1 1 2
x (i 1) x (i ) y (i ) di 2 i y (i 1) y (i ) x (i ) d i 2 i z (i 1) z (i ) d i e (i )
1
z
(0)
通过设定x(0)=1和z(0)=0来计算tan-1y(0)。向量模式 中,判决算子di 满足下面条件:
d i sign ( x (i ) y (i ) )
因此 我们输入x(0)和y(0)(z(0)=0),并通过迭代使y(0) 取值趋近于0。
CORDIC算法原理 --向量模式
CORDIC算法原理 --圆坐标系旋转原理
前面所示的伪旋转现在可以表示为(对每次迭代):
x (i 1) x (i ) d i (2 i y (i ) )
(4.7) 在这里引入第三个方程,被称为角度累加器,用来在 每次迭代过程中追踪累加的旋转角度: z (i 1) z (i ) d i (i ) (4.8) 这里:di=±1。符号di是一个判决算子,用于确定旋转的方向。 上述三个方程式为圆周坐标系中用于角度旋转的CORDIC算法的 表达式。在本章的后续部分中我们还将看到CORDIC算法被用于其 它的坐标系,通过使用这些坐标系可以执行更大范围的函数计算。
CORDIC算法原理 --圆坐标系旋转原理
基于流水线CORDIC算法的数字下变频实现

I lme t t n o mp e n a i fDDC s d o i ei e o Ba e n P p l d CORDI Al o ih n C g rt m
Z NG Jn 。 i —o g HE i GE Ln d n
w ih r q i s a h g o u fROM o a he e hg e ou in h i p p rp r o e i ei e r h tc u o mpe na in h c e ur u e v l me o e t c iv ih rs l t .T s a e o p s s a p p l d a c i t r fri l me tt o n e e o o C o P fDD n F GA,whc ih,b e n C s a d o ORDI l oi m,c n s v o sd r b e h r wa s u c sa d i r v h p e e f r C ag r h t a a e c n ie a l a d r r o r e n mp o et e s e d p r m- e e o a c sw l n e a e1 i a y u n i t n e r ra ay i a d smu ain rs l r rs ne . .F n l ,a q a t a i ro n s n i lt u t ae p e e td l z o l s o e s
( .B in i o 4 , nt , B in 0 0 3, hn ) 1 e igMa b x 7 U i7 e ig10 8 C ia j l 9 j ( .Ifr ai n ier gU iesy L Z e gh u4 0 0 ,C ia 2 nom t nE gnei nvr t,P A, h n zo 5 0 2 hn ) o n i
CORDIC算法研究及其硬件实现

”
厩
结 构 电路 见 图 3 由图 3可 以看 出 ,O D C算法 通 过 。 CR I 采 用 流水 线结 构 , 把每 一次 的迭代 过 程进 行 展开 , 高 提 了运 行速 度 ,明显 地 简化 了硬 件 架构 。在 流水线 架 构
中, 每一 级 的移位 器移 位宽 度 固定 , 位器 可 简化 至 只 移
Xlk i i i i i- ・ ・ + yd2 = Y =i M ii 。‘ d2 () 5 () 6
从而逼近所需旋转 的角度选取 固定旋转角度恰好使得 计算只有移位和相加 因此使乘法在硬件上得到很好 的
实现。
1 算法原理及 改进
在 直角 坐标 系 中 ,设 一个 矢 量 A 的坐标 为 ( ,) xY ,
2 1 年( 3 卷) 4 00 第 9 第 期
信 . 技术 电
O R O D l C算法研 究及其硬件实现
丁 晓红 - ,
(. 1 西北师范大学 数信学 院, 甘肃 兰州 70 7;. 3002 甘肃政法学院 计算机科 学学 院 , 甘肃 兰州 707 ) 300 摘 要:O DC算法可 以通过迭代方法完成矢量旋 转 , 而完成三角 函数的运算 。 C RI 从 扩展 的 C R I O DC算法在选 择不 同模 式和
: 兰 竺
f 多路选掸器拄捌
需 连 线 即可 ,简 化 了系统 设计 ,增加 了系统 的运 行 速
度; 同时 ,O IC算法采用流水线架构 以后 , C RD 每一步的 角度判断都并行计算 , 对于每一级计算过程而言 , 所用 到的角度数值是一个常数 。显著地增加硬件的最大时
=CS ( + ・ 2 ) O y d ・ 0
其 中 ,= d l时为逆 时针 旋转 ,=一1时为顺 时针 旋 转 。 d 若
课程设计零_Cordic_pipeline

课程设计零:Cordic 算法的流水线结构设计1.1 CORDIC 算法的基本原理假设直角坐标系内有一个向量a ,记作()00,x y ,向量b 是向量a 旋转0z 角度后得到的向量,记作(),n n x y ,如图所示:00,)a y x,n x y图1-1 向量旋转示意图由向量旋转的几何关系,可以得到以下的方程:00000000cos [tan ]cos [tan ]n nx z x y z y z y x z =-⎧⎨=+⎩ (0-1)从a 旋转到b 可以通过多次旋转来逐步逼近。
例如依次旋转45°、26.57°、14.04°……。
假设向量b 是向量a 通过n 次旋转以后得到的,其中第i 次旋转的角度为i θ,那么第i 次旋转的表达式为:11cos [tan ]cos [tan ]i i i i i i i i i i x x y y y x θθθθ++=-⎧⎨=+⎩ (0-2)为了便于硬件实现,规定第i 次旋转的角度1tan (2)i i θ--=±,即45°、26.57°、14.04°……,这样,每次旋转的tan i θ的值可以通过移位实现,每旋转一次,i 加1,由于在[/2,/2]ππ-内,无论i θ正负,cos i θ始终是正值,所以将式(0-2)改写为下式,即:11111[2][2]tan (2)()cos(tan 2)i i i i i i i i i i i i i i i i i i ii x K x y d y K y x d z z d d sign z K -+-+--+--⎧=-⋅⋅⎪=+⋅⋅⎪⎪=-⋅⎨⎪=⎪⎪=⎩ (0-3)其中,i K 是第i 次旋转后产生的增益,化简后得到:1/i K =1i z +是每次旋转后,向量a 与向量b 之间的夹角。
若0i z >,则说明向量a 还需要进行逆时针旋转才能更接近b ,1i d =;若0i z <,则1i d =-。
一种基于CORDIC算法的高速高精度数字鉴相器

文章编号:1001-893X (2008)04-0076-04一种基于CO R D I C 算法的高速高精度数字鉴相器3严 平,汪学刚,钱 璐(电子科技大学电子工程学院,成都610054)摘 要:提出了一种基于CORD I C 算法的高速、高精度数字鉴相器。
该数字鉴相器根据正交解调原理测相,采用高速全流水线结构在FPG A 上实现,利用CORD I C 算法实现了数字下变频(DDC )和相角的计算。
本方法不需要正交本振信号与参考信号严格同步,并且允许输入信号的频率与DDC 的NCO 频率存在一定频偏,便于工程实现。
经时序仿真验证,系统工作时钟可达100MHz,在30dB 的信噪比条件下,测相误差小于0.004rad,样本标准差小于0.03rad 。
关键词:正交解调;数字鉴相器;CORD I C 算法;频偏;流水线结构;FPG A 中图分类号:T N763.3;T N953 文献标识码:AA Hi gh -speed and Hi gh -accuracy D i git al Phase De modul atorBased on COR D I C Algor ith mYAN Ping,WAN G Xue -gang,Q I AN Lu(School of Electr onic Engineering,University of Electr onic Science and Technol ogyof China,Chengdu 610054,China )Abstract:An i m p r oved structure of digital phase de modulat or based on CORD I C algorithm is p resented .Phase -shift is measured according t o the p rinci p le of quadrature de modulati on .D igital down converti on (DDC )and calculati on of angle are realized by CORD I C algorith m.The l ocal oscillati on need not be syn 2chr onous with the reference signal,and the frequency of input signal is all owed t o deviate fr om the frequen 2cy of NCO t o a certain extent .Si m ulati on with FPG A shows that phase -shift measure ment is at high -s peed and high -accuracy:it can work at 100MHz syste m cl ock,the err or of phase de modulati on is less than 0.004rad,and the sa mp le standard deviati on is less than 0.03rad when S NR is 30dB.Key words:quadrature de modulati on;digital phase de modulat or;CORD I C algorithm;frequency deviati on;p i p line structure;FPG A1 引 言数字式鉴相器在雷达、通信系统中广泛应用,如雷达系统中的数字式干涉仪测向、高精度高速相位测距等,通信系统中的BPSK 、QPSK 等。
流水线CORDIC算法的FPGA实现

流水线CORDIC算法的FPGA实现作者:赵林军来源:《电脑知识与技术·学术交流》2008年第30期摘要:从CORDIC算法的基本原理出发,讨论其工作过程以及旋转角的覆盖范围,在此基础上,给出了具有流水线结构的FPGA实现结构以及增益因子的大小与流水线级数的确定关系,给出了VHDL实现算法,经程序设计与Quartus6.0调试与仿真,结果表明采用FPGA实现的CORDIC算法具有较好的运算精度。
关键词:CORDIC;VHDL;实现;流水线中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)30-0716-02The Implementation of Pipeline CORDIC Algorithm Based on VHDLZHAO Lin-jun(Shanxi University of Technology, Hanzhong 723003, China)Abstract: From the basal principle of CORDIC algorithm, this paper discusses the algorithmic course of work and its coverage range of revolution angle. Based on this, the article gives a pipelined structure which realized by FPGA and a VHDL program. Compiled and simulated by QuartusⅡ6.0, its operational results has a higher precision. Finally, the essential way to improve the CORDIC performance has been pointed out.Key words: CORDIC; VHDL; Implementation; Pipeline1 引言CORDIC(Coordinate Rotation Digital Computer)算法是J.Vocder[1]于1959年在美国航空控制系统的设计中提出来的一种用于计算平面直角坐标系和极坐标系下函数值的循环迭代算法,J.S Walther[2]将其推广了CORDIC算法,将圆周旋转、线性旋转与双曲线旋转均包括到了同一个CORDIC迭代方程之中,由于该算法仅涉及移位与加减运算,便于软硬件实现,因而受到了人们的广泛关注。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于流水线结构的cordic算法的实现摘要系统在处理数据的时候,一个指令周期含有多个时钟脉冲,每个脉冲周期由不同的部件完成不同的操作。
非流水线结构是指一个指令周期完成以后再接受下一条处理数据的指令;而流水线结构,每个时钟脉冲都接受下一条处理数据的指令,只是不同的部件做不同的事情,就象生产线流水操作一样,并不是等一个或一批产品做完,再接受下一批生产命令,而是每个工序完成以后,立即接受下一批生产任务。
这样提高了系统处理数据的速度。
随着超大规模集成电路(Very Large Scale Integrated circuits , VLSI)技术的飞速发展,经常需要用硬件快速和精确地进行三角函数值的计算,而坐标旋转算法(Coordinate Rotational Digital Computer, CORDIC)能够将多种难以用硬件电路直接实现的复杂的三角函数运算分解为统一的加减、移位操作,极大地降低了硬件设计的复杂性。
在现代信号处理中,经常会遇到三角函数、超越函数和坐标转化等问题。
传统的实现方法有查找表多项式展开等方法,但是这些方法在精度、速度、简单性和效率方面往往不能兼顾。
CORDIC 算法则可以很好地兼顾这几方面的要求。
CORDIC算法只使用移位和加减运算,硬件实现简单。
使用流水线结构,每级CORDIC使用独立的单元,这样使运算速度非常快。
当流水线填满之后,每个时钟周期就会得到一个结果。
从CORDIC算法的基本原理出发,讨论其工作过程以及旋转角的覆盖范围,在此基础上,给出具有流水线结构的FPGA实现方法以及增益因子的大小与流水线级数的确定关系,给出了verilog实现算法,在Quartus6.0调试与仿真,验证采用FPGA实现的CORDIC算法的有效性。
关键词: CORDIC 算法 旋转 迭代 verilog 语言 流水线一、 CORDIC 算法原理CORDIC ,即坐标旋转算法(Coordinate Rotations Digital Computr ),是由Voider J 等人于1959 年在设计美国航空导航控制系统的过程中提出来的算法。
其基本思想是通过一系列固定的、与运算基数相关的角度不断偏摆以逼近所需的旋转角度。
由于这些固定的角度与计算基数有关,运算只有移位和加减。
这在FPGA 实现上就有了很大的优势,可以大大的节约硬件资源。
CORDIC 算法包括圆周系统、线性系统、双曲系统,利用三种系统可以实现多种超越函数,再利用函数之间的关系就可以实现更广泛的函数运算。
该算法可以把某个坐标在直角坐标系(x, y)和极坐标系(,)R θ之间进行坐标变换。
1971 年Walter J 提出了统一CORDIC 算法,引入参数m 将CORDIC 算法实现的三种迭代模式圆周、线性和双曲线变换都包括了进来。
统一于一个表达式下,形成目前所用到的CORDIC 算法最基本的数学基础。
如图1-1,初始角为向量1V 旋转角度θ后得到新的向量2V ,根据简单的几何关系有:211211cos sin (1) cos sin (2)x x y y y x θθθθ=-⎧⎨=+⎩经过整理式(1)和式(2),可以得到:211211cos (tan ) (3)cos (tan ) (4)x x y y y x θθθθ=-⎧⎨=+⎩ 从上述分析可知,假设向量经过i 次旋转,每次旋转的角度记作i θ,每一次旋转的角度方向记作i d (−1或+1) ,这样经过n 次旋转后,总共转过的角度为1n i ii d ϕθ==∑我们可将cos θ去除,就得到了伪旋转公式如下:*2*21111tan tan x y y x x y θθ⎧=-⎪⎨=+⎪⎩ 即旋转所得到的(y,x)较真实的值变大-1cos θ倍,但是这样可以简化cordic 过程。
正是通过每次旋转的角度的累积来接近所需要旋转的角度,这样就需要一个因子来判断下一步的旋转向什么方向,即应该加上还是应该减去新旋转的角度。
所以,上述旋转方程应该添加一个旋转因子,即:-1-1-22i i i i i i i i i ix x d y y y d x ++⎧=⎪⎨=+⎪⎩ 在这里,引入一个角度累加器,来判别旋转因子1-i i i i z z d θ+=下面写出经过推广的CORDIC 算法:1/21/21/21/21/211()(0)1tan()cos() (5)()(0)tan()1()(0) n i i i i i i ni i i x n x m d m m y n y m d m z n z d θθθθ==⎛⎫-⎡⎤⎡⎤= ⎪⎢⎥⎢⎥-⎣⎦⎣⎦⎝⎭=+∏∑ (6)其中m =1对应图(1)的圆周旋转运算,而m = −1或0分别对应双曲旋转运算和线性旋转运算,i d 表示旋转的方向,i d =-1表示顺时针旋转,i d =1表示逆时针旋转。
为了表示方便,对式(5)中的1/2tan()i m θ做强制约束,使其等于2i -,这样带来的好处是1/2tan()i m θ就转换成了硬件中的移位运算。
---() (7)-() arctan(2) 12 0 (8)arctan (-2) -1i i i i i i i sign z d sign y m m h m θ⎧=⎨⎩⎧=⎪==⎨⎪=⎩旋转模式向量模式 式(6)和式(5)等价于以下的迭代公式:-1-11-22 (9)-i i i i i i i i i i i i i i x x d y y y d x z z d θ+++⎧=⎪=+⎨⎪=⎩使结果0n z →的旋转称为旋转模式,使0n y →的旋转称为向量模式,旋转过程会带来系数的变换,为了校正,引入校正系数K 。
-1-2-1/20-2-1/21(12)110 (10)-1(1-2)n i i n i i m K m m ==⎧+⎪=⎪⎪==⎨⎪=⎪⎪⎩∏∏ 经过计算,当n 趋近于无穷大时, 1.6467K ≈,1/0.6073K ≈,最终可以通过乘以1/K 来矫正旋转得到的数据。
根据推导,式(9)的n 次迭代可以得到如下结果(m=1,旋转模式)00000000cos -sin cos sin (11)0n n n x x z y z y y z x z z =⎧⎪=+⎨⎪→⎩给定初始条件00,0x K y ==,迭代结果为00cos sin 0n n nx z y z z =⎧⎪=⎨⎪→⎩所以,将所需产生的角度值作为0z 输入,迭代结果输出n x 和n y 就是需要的三角函数值。
采用的迭代方程组为式(9)。
二、 设计分析与实验过程因为角度测定范围要覆盖~ππ-,确定数据格式为 ***.****,****,****,*共计16位,最高位是符号位,而后是两个整数位,低13位为小数位。
按照上面提及的迭代序列:0,1,2,…n-1,所覆盖的角度只有99.9~99.9-+ ,而一般都要求覆盖~ππ-,所以我们采用增加迭代的方法来扩大角度覆盖范围,即增加两个i = 0的迭代,则移位序列为0,0,0,1,2,…n-1。
系统采用流水线结构,总计有18(16+两个0)级流水单元,示意图如图2所示。
图2中的加法单元实际可以完成加减运算,移位器所执行的移位操作则与移位序列对应,角度序列i θ选用如下序列,需存储的角度值(弧度)为下表(1)表1:计算正余弦时的初始弧度值图2:按照图2的结构,用VHDL 描述流水线结构,各流水单元功能简单描述如下表2:各流水单元功能描述在圆周系统中,旋转模式下判决因子:=()di sign zi ,因此,我们输入0x 和0z ,通过迭代,使0z 趋近于0,就可以计算0cos()z 和0()sin z 。
当要计算的角度为30度时,每次旋转的值如下:三、硬件实现使用的主要工具是quartus ii和modelSim SE6.5,其中验证的时候还使用了matlab程序加以验证。
我们的仿真结果如下:其中定标方式采用如下:角度值:8Q , 三角函数值:14Q 计算正余弦值,输入的角度依次是20°30°40°50°60°70°,得到的结果如下:由上述结果可以看出,cordic 算法的精度很高,完全能够满足工程需要。
流水线结构的cordic 速度快,当流水线填满后,每次时钟周期都能够输出一个结果。
只使用移位和加减运算,方便硬件电路的实现。
利用不同的旋转模式和不同的坐标系统以及各种函数之间的关系,coridc 还可以完成更多的超越函数运算,我们完成了三角函数、乘除法、双曲函数、指数、对数的运算。
四、 实验心得与体会大学期间,学习和实践都很重要,实践是为了将我们的理论知识运用到现实生活中。
只有学以致用,才能到达我们学习的目的。
只有不断地付诸实践,才可能会有回报。
在这次科研训练中,我们加强了自己的思考能力和动手能力,对所学的知识有了更深刻的认识。
大学里的学习专业性很强,所以我们要开阔自己的视野,在实践中锻炼自我,发现自己各方面的不足,只有这样才能够提高自己的思考问题的能力和解决问题的能力。
此次科研训练,我们尽力使其完善,也得到了各方面的帮助,但由于经验及专业方面的知识不是很充足,所以也会存在一些不可避免的问题。
我们经常说“学以致用”,很多人感慨在大学里学到的很多知识在工作的时候无法应用。
但是从这次科研训练的过程和结果来看,实践的过程是运用理论知识的最佳时机。
在此要非常感谢在科研训练中给我们提供了很大指导和帮助的老师,我们正是有了你们的细心教导,才能顺利完成了任务。
五、参考文献[1] 杨宏, 李国辉, 刘立新. 基于FPGA的CORDIC算法的实现[J]. 西安邮电学院学报, 2008年1月, 13(1).[2] 李滔, 韩月秋. 基于流水线CORDIC算法的三角函数发生器[J]. 系统工程与电子技术, 2000, 22(4).。