请教:三角函数公式计算在FPGA中如何实现

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
CORDIC算法计算三角函数的FPGA实现
下载积分:600
内容提示:CORDIC算法计算三角函数的FPGA实现
文档格式:PDF|
浏览次数:71|
上传日期: 03:11:03|
文档星级:
该用户还上传了这些文档
CORDIC算法计算三角函数的FPGA实现
官方公共微信本帖子已过去太久远了,不再提供回复功能。FPGA利用cordix产生三角函数图形 - weiqi7777的个人空间 - 中国电子顶级开发网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台
- Powered by X-Space
FPGA利用cordix产生三角函数图形
& 23:14:51
/ 个人分类:
& & &之前,利用cordix原理,用FPGA来实现计算三角函数的值。突发奇想,既然能计算每个三角函数的值,那就可以让输入的值,不断的自增,那输出的结果不就是三角函数的图像了。
想到了,就开始写程序实现了。其实只要编写测试文件,让输入的值,一直加一就可以了。但是利用迭加的原理,输入的角度范围,为-90°到90°。
以下是写好的测试代码的核心部分:
always #5 clk =
&&& reg [7:0]
&&&&&&&& initial begin
&&&&&&&&&&&&&&&&&& // Initialize Inputs
&&&&&&&&&&&&&&&&&& clk = 0;
&&&&&&&&&&&&&&&&&& phi = 0;
&&&&&&&& &
&&&&&&&& &&
&&&&&&&& &&&
for(i=0;i&=84;i=i+1)
&&&&&&&&&&&&&&&&&& & begin
&&&&&&&&&&&&&&&&&&&&&&&&&&& @(negedge clk)
&&&&&&&&&&&&&&&&&&&&&&&&&&& && phi = (phi + (1&&8));
&&&&&&&&&&&&&&&&&& & end
&&&&&&&& &&&
for(i=84;i&=10;i=i-1)
&&&&&&&&&&&&&&&&&& & begin
&&&&&&&&&&&&&&&&&&&&&&&&&&& @(negedge clk)
&&&&&&&&&&&&&&&&&&&&&&&&&&& && phi = (phi - (1&&8));
&&&&&&&&&&&&&&&&&& & end&
&&&&&&&& &&
&利用modelsim仿真。因为modelsin可以将数据改成模拟数据显示。
从仿真图中,可看出,输出的波形的样子很像是三角函数的波形。但是发现,中间会莫名奇妙出现一些很大的负值。这当然就不对了,就说明写的程序有问题。
发现问题了,然后就要去找问题,看问题是出在什么地方了:
用ISE的自带仿真ISIM观察波形:
从输出cos和sin的值第一次变成负数分析:
从图中,可看出,当输入角度大于22016(86°)输出的值就开始不正确了,而且输出的是负值。开始研究输入的值为86的中间迭代过程的值。
首先,从图中可看出,
= 39797&&&&&& y0 = 0&&&&&&&&& z0 = 22013
= 39797&&&&&& y1 = 39797&&&&& z1 = 10496
= 19899&&&&&& y2 = 59695&&&&& z2 = 3697
= 4975&&&&&&& y3 = 64669&&&&& z3 = 103
= -3107&&&&&& y4= 65291&&&&&& z4 = -1722
= 623&&&&&&&& y5 = -58832&&&& z5 = -805
& & &就从这几个数据,就感觉从第五次迭代就有问题了。怎么会出现这么大的负值了。
开始计算每个值
&按照伪代码
&当z&0& x[i+1] =
x[i] - y[i]*2^(-i) & & & & & & & &&& & & & y[i+1] = y[i] +
x[i]*2^(-i)
&否则&& x[i+1] = x[i]
+ y[i]*2^(-i) & & & & & & & &&& & & & y[i+1] = y[i] - x[i]*2^(-i)
&这里就不计算z的值了。但是要考虑Z的符号,从图中,看出,当z大于3后,就小于0了。因此迭代第5次的时候,x和y的运算要变号了。
首先 x[0] = 39797&& y[0] = 0
迭代第一次 &x[1] = x[0]Cy[0] & = 39797&&& & & & & & y[1] = y[0] + x[0] & = 39797 正确
迭代第二次& x[2] = x[1]- y[1]/2 = 19899&&& & & & & &y[2] = y[1] + x[0]/2 = 59695&正确
迭代第三次& x[3] = x[2]- y[2]/4 = 4976& && & & & & &y[3] = y[2] + x[2]/4 = 64669 正确
迭代第四次&&x[4] = x[3]- y[3]/8 =-3107& && & & & & &y[4] = y[3] + x[3]/8 = 65291 正确
迭代第五次& x[5] = x[4]+ y[4]/16= 973& && & & & & &y[5] = y[4]-x[4]/16 &= 65097
从分析迭代第五次结果,就发现,计算出来的值和仿真出来的值不一样。图中,x[5]的值为623,不等于计算出来的973。但是突然发现到,623 = 7 也就是x[5]=x[4] + y[2]/16;发现这个后,马上返回程序查看。
if(z[4][N_Z-1])&&
& & &x[5] = x[4] +
{{4{y[4][W-1]}},y[2][W-1:4]};
& & &y[5] = y[4] - {{4{x[4][W-1]}},x[2][W-1:4]};
& & &z[5] = z[4] + 16'd916;& //3.58° = 0_10100 = 916
& &&&这下,发现错误了。程序中的y[4]写成y[2]了。。真是,找了半天的错误,竟然发现是当初写程序的时候,没注意,一个下标写错了。哎,今天找这错误,找了一下午。所以,各位,以后写程序的时候,要注意这些细节啊。不然,到时候调试错误的时候,很花精力的。
&&& &改正后,用ISIM仿真看看结果有没有正确
& & &从仿真图中,看出。这下结果正确了。。不容易啊。一个小错误。然后再用modelsim看我们的完美三角波形图。
这下,出来的三角函数波形图就完美了。上面余弦,下面是正弦,是不是很酷啊。哈哈能否用verilog实现实数的指数、对数和三角函数运算?
UID466716&帖子62&精华0&积分5645&资产5645 信元&发贴收入385 信元&推广收入0 信元&附件收入2901 信元&下载支出1656 信元&阅读权限50&在线时间139 小时&注册时间&最后登录&
能否用verilog实现实数的指数、对数和三角函数运算?
求教各位大侠,能否用verilog实现实数的指数、对数和三角函数运算?
有相关的算法么???
UID69189&帖子188&精华0&积分12975&资产12975 信元&发贴收入1165 信元&推广收入60 信元&附件收入8022 信元&下载支出1377 信元&阅读权限120&在线时间129 小时&注册时间&最后登录&
拟合,级数,查表,cordic。。。
Theory is grey,
and only the tree of life forever!
UID1047332&帖子99&精华0&积分1424&资产1424 信元&发贴收入495 信元&推广收入0 信元&附件收入0 信元&下载支出211 信元&阅读权限30&在线时间218 小时&注册时间&最后登录&
回复&&open
拟合,级数,查表,cordic。。。
shaweikang1984 发表于
& & 二楼正解!
UID920200&帖子32&精华0&积分1&资产1 信元&发贴收入155 信元&推广收入0 信元&附件收入0 信元&下载支出226 信元&阅读权限10&在线时间14 小时&注册时间&最后登录&
恩!不错!!!!
UID466716&帖子62&精华0&积分5645&资产5645 信元&发贴收入385 信元&推广收入0 信元&附件收入2901 信元&下载支出1656 信元&阅读权限50&在线时间139 小时&注册时间&最后登录&
回复&&open
拟合,级数,查表,cordic。。。
shaweikang1984 发表于
& & 嗯,好像用cordic可以实现正弦函数、余弦函数、正切函数、反正切函数、以10为底的对数、以e为底的对数、以e为底的指数
那么像反正弦函数、反余弦函数、实数的整数指数运算、实数的实数指数运算这些能有算法实现么?
UID924207&帖子3&精华0&积分23816&资产23816 信元&发贴收入15 信元&推广收入0 信元&附件收入0 信元&下载支出184 信元&阅读权限80&在线时间510 小时&注册时间&最后登录&
学习了~~顶一个,正头疼呢,现在有点思路了
UID891707&帖子154&精华0&积分7071&资产7071 信元&发贴收入775 信元&推广收入0 信元&附件收入0 信元&下载支出830 信元&阅读权限50&在线时间226 小时&注册时间&最后登录&
UID1593636&帖子11&精华0&积分286&资产286 信元&发贴收入55 信元&推广收入0 信元&附件收入0 信元&下载支出125 信元&阅读权限20&在线时间16 小时&注册时间&最后登录&
。。。。。。。。。。。。。
[通过 QQ、MSN 分享给朋友]
欢迎访问 TI 热门产品应用指南

我要回帖

更多关于 三角函数公式 的文章

 

随机推荐