云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 北邮 FPGA 实验三 - 图文

北邮 FPGA 实验三 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/3 21:26:33

3.2 用CORDIC算法计算??????(??)

1)建立工程,并将压缩包中的Cordic.v添加到工程中;

2)为该文件设计测试文件,并进行功能仿真和时序仿真,观察并分析从一个角度值x的输入到它对应的sin(x)输出所对应的时间; 3)按以下步骤在工程中添加一个ROM IPCore;

输入IPcore文件名并点击Next,选择

下的

存储器类型选择单口ROM

5

,并点击Next。

点击Next,在第二个页面上设置RAM的位宽和深度,例如:

点击Next,在第3个配置页面上找到下图所示位置:

此处需要加载用于初始化存储器的文件。

根据文件中注释所提供的量化规则设置一些角度值存在一个.coe文件中,.coe文件的样例见压缩包中的angle.coe,可用任一文本编辑器打开,文件以 “memory_initialization_radix=16; memory_initialization_vector=“

开头,其后的数据以十六进制表示,数据之间以空格或逗号分割,文件的长度和数据位宽应与ROM的设置保持一致。其他选项保持为默认选项,点击Generate按钮生成IPcore。

此时在工程目录下的ipcore_dir文件夹中会产生一系列与设定的IP core同名的文件,其中包含一个.v文件和一个.xco文件,xco文件是包含IP core配置信息的核心文件,.V文件的格式与verilog module相同,其内容较为复杂,对使用者而言通常只关注它的模块头,作为实例化时的参考。

4)产生一个用于在板测试的顶层文件,将cordic模块和ROM模块在该文件中进行实例化,参加压缩包中的cordic_top.v

5)添加约束文件,参见压缩包中的cordic.ucf文件。自行设置Chipscope中的信号连接,用Chipscope工具进行在板测试,记录数据,并计算迭代次数为8次时的平均误差。;

6)修改迭代次数为10次,重新进行仿真和测试。 3.3 用CORDIC算法计算 ????+????

将程序修改为计算 ??2+??2的工作模式,重复上述测试。

6

四 实验分析

4.1 用CORDIC算法计算??????(??)(8次迭代) 4.1.1. 实验原理

8次迭代的输入角度值和输出函数值均采用10位二进制数表示

用0000000000~1111111111表示0~2π,因此200H表示π,100H表示π/2; 用0000000000~1111111111表示函数值?1~+1;

此时采用补码形式,0~511对应0~+1,512~1024对应?1~0; x0初值为

12^9?=134??

????设输入的角度值为16进制表示数X,将X换算成带符号的十进制数x,则与角度值之间的换算关系为

xα=?π

512设CORDIC算法计算得到的输出函数值为Y,将Y换算成10进制带符号数y,则计算结果的10进制表示为

??

????????= 5124.1.2. 实验描述

本程序中所有角度和函数值都是采用二进制表示,具体描述如下: 1) 模块名:Cordic;

2) 角度值:采用10位二进制表示,用0000000000~1111111111表示0~2π,

因此200H表示 π,100H表示 π/2; 3) 函数值:采用10位二进制补码表示,用0000000000~1111111111表示函数

值?1~+1;此时采用补码形式,0~511对应0~+1,512~1024对应?1~0; 4) 输入及输出参数: clk:时钟信号; rst:重置信号;

ena:启动信号,该信号置1时系统开始运算过程; phase_in(10位二进制数):输入的角度值; sin_out(10位二进制数):输出的???????(?) 函数值; 5) 函数变量

cos_out(10位二进制数):计算得到的?????? ? 函数值,与sin_out同时产生但不输出;

phase_in_reg(10位二进制数):程序中实际参与运算的角度值,下面会进行说明; x0-x8、y0-y8、z0-z8(均为10位二进制数):在迭代算法中使用的临时参数,x和y参数存储三角函数值,z存储角度值。x0、y0、z0存储初值,其它参数存储8次迭代的临时值;

7

quadrant(10个1位存储器):存储输入角度值的相位信息,具体用处见下面说明;

PIPELINE:流水线,必须和数据位长相同。本程序使用10级流水线。 4.1.3. 主要工作流程

下面进行算法当中数据变化的详细说明: 1) 初值问题 这里置??0=1/????

其原因是xn=An???0?????????0 2) 迭代运算

此段代码是程序的主要部分,简单的说就是实现CORDIC算法的旋转模式: ????+1=???????????????2??? ????+1=????+??????????2??? zi+1=??????????tan?1(2???) Where

????= ?1 ???? ????<0 ,+1 ?????????????????

它采用二进制位运算,对一些复杂地方进行相应说明: ① zi(????) 正负的判断:通过判断符号位(首位); ②2??? 的实现:即每次迭代时对????或????作除2操作

具体实现方法为把原二进制值向右移动一位,移出的空位补0; ③ 每次迭代时,?? 的值要减去的角度值满足公式 tan?12??? 3) 结果处理

利用三角函数性质,由于结果是在角度位于第一象限情况下获得的,因此作如下处理:输入角度在第一象限:????????值不变,????????值不变;输入角度在第二象限:????????值不变,????????值取反;输入角度在第三象限:????????值取反,????????值取反;输入角度在第四象限:????????值取反,????????值不变;取负方法:所有二进制位取反加一(补码)。 4.2 用CORDIC算法计算??????(??)(10次迭代)

这个程序是对8次迭代的程序进行修改后获得的,基本代码与工作流程完全相同,以下只说明修改的地方。 1)数据位长度:由上述公式可得,每次、和的变化范围随迭代次数增加而减小,若仍采用原先的10位二进制数存储数据,到了较高次迭代时会出现数据过小而无法完全表示的情况,因此数据位长需要增加。本程序中,????、????和????位长度都增加到16。

2)增加迭代次数及对应临时变量,修改输出变量; 3)重新计算原程序使用的角度值,优化计算结果; 4)修改测试文件的信号,以实现位长的对应; 5)修改相关判断语句。

8

搜索更多关于: 北邮 FPGA 实验三 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3.2 用CORDIC算法计算??????(??) 1)建立工程,并将压缩包中的Cordic.v添加到工程中; 2)为该文件设计测试文件,并进行功能仿真和时序仿真,观察并分析从一个角度值x的输入到它对应的sin(x)输出所对应的时间; 3)按以下步骤在工程中添加一个ROM IPCore; 输入IPcore文件名并点击Next,选择 下的存储器类型选择单口ROM 5 ,并点击Next。 点击Next,在第二个页面上设置RAM的位宽和深度,例如: 点击Next,在第3个配置页面上找到下图所示位置: 此处需要加

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com