3020|0

118

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

基于坐标移位变换的dds(NCO)cordic [复制链接]

用基于cordic算法写的dds的verilog程序,带modelsim的仿真程序,写这个主要是在做dds时想用cpld来做,但是我的cpld资源太少,只有570个LE,而我又想用12位以上的da,大家懂的,如果刷波表是做不来的,所以就写了这个基于cordic算法的dds,也可以说是一个nco,看怎么用,基于cordic算法的dds速度较快,因为其中用到了流水相结构。把这个代码稍微修改一下就可以利用硬件来实现求开方,以及对数,以及反正切非常方便,而且速度快,耗费资源少。
//level 2
always @ (posedge clk,negedge rst_n)
begin
    if(!rst_n)
    begin
        x2 <=12'b0;
        y2 <=12'b0;
        z2 <=12'b0;
    end
    else
    if(ena)
        if(z1[11]==1'b0)
        begin
            x2 <= x1-{y1[DATA_WIDTH-1],y1[DATA_WIDTH-1:1]};
            y2 <= y1+{x1[DATA_WIDTH-1],x1[DATA_WIDTH-1:1]};
            z2 <=z1-12'h12e;//26deg
        end
        else
        begin
            x2<= x1+{y1[DATA_WIDTH-1],y1[DATA_WIDTH-1:1]};
            y2<= y1-{x1[DATA_WIDTH-1],x1[DATA_WIDTH-1:1]};
            z2<= z1+12'h12e;
        end
end
这是其中一级流水线的verilog代码。
整体只耗费了505个LE,最快速度111.32M,即可实现两路正交正弦的输出。
此外dds中相位截断是个大问题,会使产生的信号变差,基于cordic的dds因为可以直接把地址寄存器和你的累加器位数做到一致所以可以免去相位截断的烦恼,同时可以提高精度,这里为了使cpld能装下我的代码,我就没有考虑相位截断了。

wave.bmp (2.1 MB, 下载次数: 0)

wave.bmp

cordic_16_tb.v

782 Bytes, 下载次数: 7

cordic_16.v

8.51 KB, 下载次数: 2

售价: 1 分芯积分  [记录]

wave.bmp

2.1 MB, 下载次数: 3

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表