博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cordic算法的fpga实现
阅读量:5204 次
发布时间:2019-06-13

本文共 1984 字,大约阅读时间需要 6 分钟。

cordic算法参考:http://wenku.baidu.com/view/6c623aa8910ef12d2bf9e732.html

这是百度文库的一个文档,详细介绍了cordic算法的基本内容。我就是读了这个文档后做的cordic算法实现sin cos的运算的。

先谈感悟:做这种迭代型的算法,我觉得用for语句实现是最容易理解的,所以我的设计就是基于for结构实现的,关于算法中重要的位数确定,上边的文档里也有说明,我的选择是z选17位,1位符号位,8位整数,8位小数,x,y选21位,20位小数,一位符号位。所有数都是照这个标准的。

贴代码(贴后格式改变了,没缩进了,凑合看)

module test_cordic(clk,rst_n,z0,en,sin_out,cos_out);//z0是输入角度值,en是运算使能,sin_out,cos_out是运算输出。

input clk,rst_n;

input [16:0] z0;
input en;
output [10:0] sin_out,cos_out;
reg en_buff;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
en_buff<=0;
else
en_buff<=en;
end
reg [16:0] angel[0:9];
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
angel[0]<=17'b00010110100000000;//45
angel[1]<=17'b00001101010011001;//26.6
angel[2]<=17'b00000111000000000;//14
angel[3]<=17'b00000011100011001;//7.1
angel[4]<=17'b00000001110011001;//3.6
angel[5]<=17'b00000000111001100;//1.8
angel[6]<=17'b00000000011100110;//0.9
angel[7]<=17'b00000000001100110;//0.4
angel[8]<=17'b00000000000110011;//0.2
angel[9]<=17'b00000000000011001;//0.1
end
end

reg [16:0]reg_z[0:9];//1 fuhao wei 8 zhengshu 8xiaoshu

reg [10:0] reg_x[0:9];
reg [10:0] reg_y[0:9];
reg [4:0] i;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
for(i=0;i<=9;i=i+1'b1)
begin
reg_x[i]<=0;
reg_y[i]<=0;
reg_z[i]<=0;
end
end
else if(en&&!en_buff)
begin
reg_x[0]<=11'b01001101101;//0.6073<<10 + 1wei fuhao wei
reg_y[0]<=0;
reg_z[0]<=z0;
end
else
begin
for(i=1;i<=9;i=i+1'b1)
begin
if(reg_z[i-1][16])
begin
reg_x[i]<=reg_x[i-1]+(reg_y[i-1]>>i-1);
reg_y[i]<=reg_y[i-1]-(reg_x[i-1]>>i-1);
reg_z[i]<=reg_z[i-1]+angel[i-1];
end
else
begin
reg_x[i]<=reg_x[i-1]-(reg_y[i-1]>>i-1);
reg_y[i]<=reg_y[i-1]+(reg_x[i-1]>>i-1);
reg_z[i]<=reg_z[i-1]-angel[i-1];
end
end
end
end
assign sin_out=reg_y[9];
assign cos_out=reg_x[9];
endmodule

 测试代码较简单,不贴了,贴一个30度求值结果

 

结果是sin30=00111111111;什么意思?最高位符号位是0,代表正数,后10位是小数部分即0.0111111111;转为10进制就是0.499;同理cos30=01101110110转为10进制就是0.8652.当然也可以试试其他角度。

 

转载于:https://www.cnblogs.com/lianjiehere/p/4026019.html

你可能感兴趣的文章
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>
数组去重的方法
查看>>
PHP开发中常见的安全问题详解和解决方法
查看>>
test
查看>>
19号预习
查看>>
C语言小项目-火车票订票系统
查看>>
缓和曲线06七次四项式
查看>>
IDEA快捷键
查看>>
001Spring4.2基本环境搭建
查看>>
A + B 问题
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>
陀螺仪误差分析、处理与选型
查看>>
使用命令行控制 Windows 演示设置
查看>>
T4模板循环生成插入语句
查看>>
(string)与ToString()的区别
查看>>
BS调用本地应用程序的步骤
查看>>
VS2019 高级保存
查看>>
数据库表字段命名规范
查看>>