北邮信息工程信号与信息处理综合实验FPGA实验二报告(CORDIC算法)_第1页
北邮信息工程信号与信息处理综合实验FPGA实验二报告(CORDIC算法)_第2页
北邮信息工程信号与信息处理综合实验FPGA实验二报告(CORDIC算法)_第3页
北邮信息工程信号与信息处理综合实验FPGA实验二报告(CORDIC算法)_第4页
北邮信息工程信号与信息处理综合实验FPGA实验二报告(CORDIC算法)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信号与信息处理综合实验报告信息与通信工程学院信号与信息处理综合实验报告(fpga部分)班级: 姓名: 学号: 序号: 日 期: 第8页 实验二 cordic算法一、实验目的(1) 掌握fpga设计中的流水线技术;(2) 掌握cordic算法的基本原理及其实现方法;(3) 了解通过在片内生成rom的方式进行在板模块测试的方法。二、 实验内容(1) 按实验指导书所给出的步骤,在fpga上实现cordic算法用于计算sin(x)。(2) 修改程序使其能够用于计算x2+y2。(扩展)三、程序基本信息(一)、程序模块描述:本次实验里涉及了两个程序,一个是原始程序,另一个是对原始程序作简单修改后的功能拓展

2、,代码本身基本是类似的。以下只对原始程序作较为详细的说明,而功能拓展只简单说明修改的情况。1、cordic算法计算sin(x)(6次迭代):模块名:cordic。以下介绍程序中的输入输出参数和临时变量,在这里首先要说明一点,本程序主要进行的是二进制位运算,因此所有角度和函数值也都是采用二进制表示,具体描述如下:角度值:均采用8位二进制数表示,也就是00000000-11111111(十进制0-255),对应角度值中的0-2,因此10000000对应(180),01000000对应2(90),依此类推。每一最低位表示360256。函数值:程序中输出的三角函数值同样采用8位二进制数表示,但三角函数

3、有正有负,因此实际采用的是8位补码,第一位是符号位(0为正,1为负),后面7位为数据位,即00000000-01111111(0-127)对应0-+1,而10000000-11111111(128-255)对应-1到-1256,每一最低位表示1256。输入及输出参数:clk:时钟信号;rst:重置信号;ena: 启动信号,该信号置1时系统开始运算过程;phase_in(8位二进制数):输入的角度值;sin_out(8位二进制数):输出的sin函数值函数变量(仅在运行中调用):cos_out(8位二进制数):计算得到的cos函数值,与sin_out同时产生但不输出;phase_in_reg(8位

4、二进制数):程序中实际参与运算的角度值,下面会进行说明;x0-x6、y0-y6、z0-z6(均为8位二进制数):在迭代算法中使用的临时参数,x和y参数存储三角函数值,z存储角度值。x0、y0、z0存储初值,其它参数存储6次迭代的临时值。quadrant(8个1位存储器):存储输入角度值的相位信息,具体用处见下面说明。pipeline:流水线,必须和数据位长相同。本程序使用8级流水线。主要工作流程:以下先用流程图简单的说明工作过程。可见程序本身的流程并不复杂,但是某些流程涉及到算法本身,下面作详细说明。(1) x0初值问题:这里置x0=1/an。原因:六次迭代后的输出值如下:xn=anx0sin

5、z0在本程序中,x0取值用8位数表示为1an2777,二进制表示为01001101(十六进制表示为4d)。(2) 迭代运算:此段代码是程序的主要部分,简单的说就是实现cordic算法的旋转模式:它采用二进制位运算,以下对一些复杂地方作简要说明:zi(di)正负的判断:通过判断zi符号位(首位);2-i的实现:即每次迭代时对xi或yi作除2操作,具体实现方法为把原二进制值向右移动一位,移出的空位补0。每次迭代时,z的值要减去的角度值满足公式tan-12-i。(3) 根据原输入角度值所在象限对迭代后的结果进行处理:利用三角函数的性质,由于结果是在角度位于第一象限的情况下获得的,因此可作如下处理。

6、(输入角度在)第二象限:sinx值不变,cosx值取负。 第三象限:sinx和cosx值均取负。 第四象限:cosx值不变,sinx取负。 取负方法:所有二进制位取反加一(补码)。2、cordic算法计算sin(x)(10次迭代):鉴于8次和10次迭代都是原程序(6次迭代)的拓展,且10次迭代的修改更多,因此本次实验中我只做了10次迭代的功能拓展。这个程序是对6次迭代的程序进行修改后获得的,基本代码与工作流程完全相同,以下只说明修改的地方。(1)数据位长度:由上述公式可得,每次xi、yi和zi的变化范围随迭代次数增加而减小,若仍采用原先的8位二进制数存储数据,到了较高次迭代时会出现数据过小而无

7、法完全表示的情况,因此数据位长需要增加。本程序中,xi、yi和zi位长度都增加到10(zi按理论值应增加到12,但实际测试时计算结果出现了较大误差,由于时间所限无法排错而放弃),相应的,流水线也增加到10级;(2)增加迭代次数及对应临时变量,修改输出变量;(3)重新计算原程序使用的角度值,优化计算结果;(4)修改测试文件的信号,以实现位长的对应;(5)修改相关判断语句。四、功能测试记录 1、cordic算法计算sin(x)值: 在测试文件中赋几个角度值,测试程序(6次迭代和10次迭代)计算的精确度。 由于modelsim仿真相对来说比较容易执行,因此以下计算结果均通过modelsim功能仿真展

8、现。 以下按(角度值,6次迭代程序中的表示,10次迭代程序中的表示)的格式给出测试时使用的角度值: 0,0,0,11.25,00001000,0000100000, 22.5,00010000,0001000000,33.75,00011000,0001100000, 45,00100000,0010000000,56.25,00101000,0010100000, 67.5,00110000,0011000000,78.75,00111000,0011100000, 90,01000000,0100000000。 6次迭代计算结果(仿真): 10次迭代计算结果(仿真): 该程序仿真时,在某一

9、段时间内会出现多个计算结果的情况,它们可以分成几组,每组对应一个输入的角度值,且每组中的计算结果非常相近,组与组之间的结果差别较大,可根据这个特点区别。以下列出具体结果时,随机选择每组中一个结果进行说明。 部分计算结果值上图中无法全部显示,以下是放大图: 计算结果分析表: 下表基于上面的仿真结果(取4位小数),误差均取绝对值,绿色格是6次迭代程序的计算结果,红色格是10次迭代程序的计算结果。011.2522.533.7545理论值00.19510.38270.55560.7071计算结果11111000(-0.0547)00010110(0.1719)00101100(0.3438)01000

10、111(0.5547)01011011(0.7109)误差0.05470.02320.03890.00090.0038计算结果0000001101(0.0254)0001101100(0.2109)0011001000(0.3906)0100011111(0.5605)0101101001(0.7051)误差0.02540.01580.02350.00050.00256.2567.578.7590理论值0.83150.92390.98081计算结果01101001(0.8203)01110110(0.9219)01111100(0.9687)01111101(0.9766)误差0.01120.

11、00200.01200.0234计算结果0110100111(0.8262)011011001(0.9238)0111110111(0.9824)0111111001(0.9863)误差0.00050.00010.00160.0137 由上表可得平均误差: 6次迭代:0.0189; 10次迭代:0.0092。 可见10次迭代的计算结果不仅精度高且更准确。 另外从上表中可以看出,输入角度从0变化到90时,计算结果的误差呈现由大变小再变大的趋势,在两端时误差大,中间(45左右)误差小。其原因可能是cordic算法以线性运算为主,而sin(x)图形在x为45左右时大致呈线性,0和90附近时则呈非线性

12、,因此cordic算法在sin(x)大致呈线性变化的区间内结果比较接近理论值。 2、chipscope在板调试波形: chipscope内核定义文件按如下设置: trigger parameters选项卡中,number of trigger ports设为2,trig0和trig1的trigger width均设为1(两个1位触发源); capture settings选项卡中,去掉data same as trigger选项,data width设为16(16个数据信号); net connections选项卡中,按如下设置信号(所有信号均来自顶层测试文件): 时钟信号(clock sig

13、nals):clk_bufgp, 2个触发信号(trigger signals):rst1_buf,ena: 16个数据信号(data signals):cordic_inst/sin_out7:0(输出的函数值),angle_in7:0(输入的角度值)。 下图是用此cdc文件进行仿真的波形截图:该图中上半部分为输入的角度值,下半部分为输出结果。由该波形可以看出,输入一个角度值后会在下一个角度值输入时给出运算结果。五、调试过程中的主要问题及难点1、modelsim仿真信号混乱。应该在确保选中测试文件的情况下进行仿真。2、modelsim仿真输出波形出现红色线条。红色线条无法正常输出计算结果,检查测试文件信号设置是否有误。另外流水线和数据位长不一致也会出现此情况。3、双击cdc文件进行chipscope信号编辑时,系统报错提示无法打开。源程序出现问题,需根据错误提示进行修改。4、双击“analyze design using chipscope”时,系统报错。可能由如下原因导致:(1)chipscope内核定义文件(cdc文件)的设置有误,一般来说就是某些信号没有设置完整,在“net connections”选项卡中这些信号会显示为红色。(2)顶层测试文件中实例化ipcore模块语句中,ipcore名字与工程中创建的ipcore名字不一致。5、chip

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论