数字系统设计报告.docxVIP

  • 9
  • 0
  • 约4.83千字
  • 约 8页
  • 2017-02-06 发布于重庆
  • 举报
数字系统设计报告

基于FPGA的cordic算法设计及实现FPGA简介由于本次cordic算法的设计和实现是基于FPGA的,因此,先对FPGA做一个简单介绍。FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。FPGA由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。FPGA设计的基本流程如下:Cordic算法原理如图所示,初始向量旋转角度之后得到向量,此向量有如下关系: 注:为待求角假设初始向量经过N次旋转之后得到新向量,且每次旋转角度正切值都为2的倍数,则第次旋转角度为,即 容易得到角度,其中或-1,表示旋转角度的方向,第步旋转可以表示为:其中称为校模因子,当旋转次数一定时,趋于一个常数,而由极限 可知,算法每一步就可以简化为:从而可以看出,对于移动的角度,现在只需要硬件加减法器和移位器就可以算出结果。引入Z,表示次旋转后相位累加的部分和,则:经过n次旋转之后,Z→0,即与目标角重合。算法设计思路进行端口说明和数据类型定义。输入端口为时钟和初始相位,输出端口为sin和cos。参数设置方面将迭代次数设置为8次。输入相位在每次时钟的下降沿来临时增加2。初始化数据,,为输入相位,输入相位的高两位表示角度在哪个象限。再增加一个符号位,即判决算子用来判断每次迭代的旋转方向。开始进行迭代运算,如果,则顺时针旋转45°,否则逆时针旋转45°。一共进行八次迭代,每次迭代旋转角度的正切值都为2的倍数。设置9个两位寄存器,用来保存每次旋转后相位的高两位,即用来判断角度在哪个象限。每经过一个时钟周期,会有8个角度进行旋转 ,最先输入的角度进行第8次旋转,后面的7个角度依次进行第7次,第6次,第5次,……,第1次的旋转,这样依次进行下去就会输出一系列连续的正弦波和余弦波。功能仿真结果(用modelsim实现)课后感悟数字系统设计这门课已经结课了,虽然只有短短六周的课程,但是姚老师课堂上的认真讲解以及课后的严格要求让我学到了很多数字系统设计的知识,每次作业都是对我知识的提升,对于Verilog语言我从什么都不懂到现在自己都可以编一些简单的小程序了,还有每周的实验课也让我对FPGA和DSP的设计流程有了新的认识。相信这些知识将会在未来给我很大的帮助。附录:源程序(verilog实现)module cordic(sin,cos,eps,phase_in,clk);input [7:0] phase_in;input clk;output reg [8:0] sin,cos,eps;parameter PIPELINE = 8;//迭代次数为8次parameter K = 8h4D;//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 [PIPELINE:0];integer i;initialbegin for(i=0;i=PIPELINE;i=i+1) quadrant[i] = 2b0;end//phase_in[7:6] 判断角度在哪个象限//00 表示在第一象限;01 表示在第二象限;10表示在第三象限;11 表示在第四象限//初始化: x0 = K,y0 = 0,z0 = phase_in always @ (posedge clk)//stage 0begin x0 = {1b0,K}; //增加一个符号位,0 表示正 y0 = 9b0; z0 = {3b0,phase_in[5:0]};//控制输入相位的范围在0到pi/2endalways @ (posedge clk)//stage 1begin if(z0[8])//顺时针为负,1表示负 begin x1 = x0 + y0; y1 = y0 - x0; z1 = z0 + 8h20;//顺时针转45° end else begin x1 = x0 - y0; y1 = y0 + x0; z1 = z0 - 8h20;//逆时针转 45° endend/*********************************************//x(n+1) = x(n) + {{n{y(n)[16]}},y

文档评论(0)

1亿VIP精品文档

相关文档