- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息与通信工程学院
信息与信号处理综合实验报告
(FPGA部分)
题目: CORDIC 算法
班级:
专业: 信息工程
姓名:
学号:
实验目的
掌握FPGA设计中的流水线技术;
掌握Cordic算法的基本原理及其实现方法;
了解通过在片内生成ROM的方式进行在板模块测试的方法。
实验内容
按实验指导书所给出的步骤,在FPGA上实现Cordic算法用于计算sin(x)。
修改程序使其能够用于计算x2
算法原理解释
实验要求的两部分功能:cordic算法求算sin(x)和x2+y2
旋转模式
Figure SEQ Figure \* ARABIC 1. 圆周系统平面坐标旋转
由图知:
如果使用迭代的方法,旋转的角度可以在多步之内完成,每一步旋转完成其中一小部分,多步之后将会完成一个平面旋转。
为计算更加方便,令,其中表示下一次旋转的旋转方向。为了能确定下一次的旋转方向,我们引入,如果大于0,即为还没有转到目标角度,下一次为逆时针旋转,即,若小于0,说明向量已经旋转超过了目标角度,需要往回转,即顺时针旋转,则。
依此机制迭代多次,多个(i=0…n)相乘会出现增益K。K取决于迭代次数,对于所有初始向量和所有旋转角度而言,K为一个常数(按实验指导书中,此处K=0.6073)
旋转模式中,Z为输入,是需要旋转的角,当Z旋转变为0时,程序结束,即为已知目标角度,经过旋转将一向量从0度旋转到目标角度。
经N次迭代后,上述方程转化为:
所以如果设,那么N次迭代后Cordic算法输出变为:
,这里我们要计算sinx所以只要输出y即可。
向量模式
向量模式中,XY为输入,当Y=0时结束,大致算法思想变为已知某向量位置,经过旋转,最终使向量转到x轴上结束。
迭代过程大致与旋转模式相同,但在旋转方向判断上,改用代替,如果大于0,即为向量还在x轴上方,下一次为顺时针旋转,即,若小于0,说明向量已经旋转到x下方,需要往回转,即逆时针旋转,则。
向量模式下最终的结果为:
算法的FPGA实现
由于实验中的text文件中代码相对简单,均是给输入变量赋初值并不断累加的过程,此处就不在赘述,只相对详细的介绍主函数的部分,另外,chipscope部分实验指导书中也已经细致的阐述,此处只简单介绍需要改动的部分。
六次迭代计算sin(X)
主要输入及输出变量释义:
DATA_WIDTH=8;
//数据长度,主要由迭代次数决定,随迭代次数增多, 的值会越来越小,需要表示精度就越来越高,当迭代6次时,=1.7899°,即20h’00145d,所以用8位恰好可以表示。
PIPELINE=8; //流水线长度,关于流水线的部分将在后面详细阐述。
phase_in; //输入的角度值
phase_in_reg; //将输入角度经过变换后,实际参与运算的值
sin_out; //输出sin的值
eps; //转过的角度值
x0~7,y0~7,z0~7; //中间变量,分别储存第i次迭代后的函数值
程序流程图:
由于代码较长,所以这里只用流程图代替说明。
程序说明
关于角度值与函数值:
由于输入时,参与运算的都是旋转的角度值,范围是0~2π,而输出时为sinx值,是函数值,有正负,范围为-1~+1。
于是这里规定:
在输入中,将0000_0000~1111_1111表示0~2π的角度值,0000_0001表示360/256。
在输出时,采用补码表示,第一位为符号位,0000_0000~0111_1111表示0~+1,1000_0000~1111_1111表示-1~-1256。最低位表示
关于X的初值:
前面算法说明的时候已经说过,这里取k,即0.60725,但由于是用16进制表示,先转换成二进制。因为是有符号位8位二进制数,恰好k第一位也是0,所以只要直接乘以27,左移7位再转化即可。
关于象限和Z正负的判断:
由于坐标系总是将所有数从大到小分成四部分(即四个象限),所以前两位即为象限信息,[00]为第一象限,[01]为第二象限,[10]为第三象限,[10]为第四象限。
Z的首位即为符号位,0为正,1为负。
象限调整的必要性:
不管是旋转模式还是向量模式,最大旋转角度大约在-99.88°~99.88°,也就是说旋转覆盖角度只能为第一四象限,所以要进行象限调整。
X、Y计算中2-
相当于对上一次的X、Y值除2,采用向右移位,空位补0的方法实现
流水线的采用原因及长度选取:
如果某个设计的处理流程分为若干步骤,且整个数据处理是单流向的,没有反馈或迭代运算,前一个步骤的输出是下个步骤的输入,可以采用流水线结
文档评论(0)