资源描述:
《数字系统设计报告.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于FPGA的cordic算法设计及实现1.FPGA简介由于本次cordic算法的设计和实现是基于FPGA的,因此,先对FPGA做一个简单介绍。FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。FPGA由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。FPGA设计的基本流程如下:后端仿真布局布线电路综合功能仿真构想电路设计2.Cordic算法原理如图所示,初始向量(x0,y0
2、)旋转θ角度之后得到向量(x1,y1),此向量有如下关系:x1=x0cosθ-y0sinθy1=y0cosθ+x0sinθ注:θ为待求角假设初始向量经过N次旋转之后得到新向量,且每次旋转角度δ正切值都为2的倍数,则第i次旋转角度为δ=arctan(2-i),即cosδ=(11+2-2i)0.5容易得到角度θ≈siδi,其中si=1或-1,表示旋转角度的方向,第i步旋转可以表示为:xi+1=(11+2-2i)0.5(xi-siyi2-i)yi+1=(11+2-2i)0.5(yi+xi2-i)其中(11+2-2i)0.5称为校模因子,当旋转次数一定时,趋于一
3、个常数,(11+2-2i)0.5≈0.6063而由极限limi→∞1(1+2-i)=1可知,算法每一步就可以简化为:xi+1=xi-siyi2-iyi+1=yi+sixi2-i从而可以看出,对于移动的角度θ,现在只需要硬件加减法器和移位器就可以算出结果。引入Z,表示次旋转后相位累加的部分和,则:zi+1=zi-siarctan2-i经过n次旋转之后,Z→0,即与目标角重合。1.算法设计思路1)进行端口说明和数据类型定义。输入端口为时钟和初始相位,输出端口为sin和cos。参数设置方面将迭代次数设置为8次。输入相位在每次时钟的下降沿来临时增加2。2)初始化数
4、据x0=K,y0=0,z0为输入相位,输入相位的高两位表示角度在哪个象限。再增加一个符号位,即判决算子si,用来判断每次迭代的旋转方向。3)开始进行迭代运算,如果符号位si=1,则顺时针旋转45°,否则逆时针旋转45°。一共进行八次迭代,每次迭代旋转角度的正切值都为2的倍数。4)设置9个两位寄存器,用来保存每次旋转后相位的高两位,即用来判断角度在哪个象限。5)每经过一个时钟周期,会有8个角度进行旋转,最先输入的角度进行第8次旋转,后面的7个角度依次进行第7次,第6次,第5次,……,第1次的旋转,这样依次进行下去就会输出一系列连续的正弦波和余弦波。2.功能仿
5、真结果(用modelsim实现)1.课后感悟数字系统设计这门课已经结课了,虽然只有短短六周的课程,但是姚老师课堂上的认真讲解以及课后的严格要求让我学到了很多数字系统设计的知识,每次作业都是对我知识的提升,对于Verilog语言我从什么都不懂到现在自己都可以编一些简单的小程序了,还有每周的实验课也让我对FPGA和DSP的设计流程有了新的认识。相信这些知识将会在未来给我很大的帮助。附录:源程序(verilog实现)modulecordic(sin,cos,eps,phase_in,clk);input[7:0]phase_in;inputclk;outputr
6、eg[8:0]sin,cos,eps;parameterPIPELINE=8;//迭代次数为8次parameterK=8'h4D;//k=0.607253*2^7//sin和cos之间的转换取决于phase_in[7:6]reg[8:0]x0,y0,z0;reg[8:0]x1,y1,z1;reg[8:0]x2,y2,z2;reg[8:0]x3,y3,z3;reg[8:0]x4,y4,z4;reg[8:0]x5,y5,z5;reg[8:0]x6,y6,z6;reg[8:0]x7,y7,z7;reg[8:0]x8,y8,z8;reg[1:0]quadrant[
7、PIPELINE:0];integeri;initialbeginfor(i=0;i<=PIPELINE;i=i+1)quadrant[i]=2'b0;end//phase_in[7:6]判断角度在哪个象限//00表示在第一象限;01表示在第二象限;10表示在第三象限;11表示在第四象限//初始化:x0=K,y0=0,z0=phase_inalways@(posedgeclk)//stage0beginx0<={1'b0,K};//增加一个符号位,0表示正y0<=9'b0;z0<={3'b0,phase_in[5:0]};//控制输入相位的范围在0到pi/
8、2endalways@(posedgeclk)//stage1be