如何用FPGA输出正弦波、三角波等

如何用FPGA输出正弦波、三角波等

一、开发工具

1、 软件平台:Quartus ll
2、芯片:不重要

二、步骤

1、设置ROM IP核

设置ROM IP核,根据使用的DA芯片选择对应的位数和数据量,选择生成好的mif文件,一个存储波形的ROM IP核就创建好了。
下面是详细步骤:
1、点击Tool
2、点击MegaWizard,出现下图,点击Next。
3、在框中输入ROM选择ROM:1-PORT,左边框中选择保存地址和创建文件名。选择完毕点击Next进入IP核设置界面。
4、根据DA选择相应的位宽和容量。
5、红框里面是是否优化,我一般取消勾选。
在这里插入图片描述
6、在file name处选择需要用到的数组.mif文件,剩下就是一路点击next,这样一个ROM IP核就创建好了。
在这里插入图片描述

2、程序编写

开始编写程序调用ROM IP核,根据之前设定的参数,软件会自动生成相应的代码,至于代码怎么写我们不用管,我们只需要了解三个参数就够了,分别是:address(数据地址)、clock(时钟)、q(读出的数据),顶层文件编写如图,将信号链接到需要使用ROM IP核的模块。
ROM IP核顶层文件
对于这三个参数,clock可以使用系统时钟,所以直接关联到系统时钟就可以了,address是ROM核中数据存放的地址,由于我们是输出的正弦波是连续信号,所以地址直接累加就可以了,q是ROM核根据输入的地址读出的数据,也就是我们想要的数据,这个数据是可以直接发给DA芯片的。
下面展示一些 ROM IP核的读代码

module da_wave_send(
    input                 clk         ,  //时钟
    input                 rst_n       ,  //复位信号,低电平有效
    
    input        [11:0]    rd_data     ,  //ROM读出的数据
    output  reg  [11:0]    rd_addr     ,  //读ROM地址
    output       [11:0]    da_data1        //输出给DA的数据  
);
parameter  FREQ_ADJ = 12'd900;  //频率调节
reg    [11:0]    freq_cnt  ;
assign da_data1 = rd_data;
always @(posedge clk or negedge rst_n) begin
    if(rst_n == 1'b0)
        freq_cnt <= 12'd0;
    else if(freq_cnt == FREQ_ADJ)    
        freq_cnt <= 12'd0;
    else         
        freq_cnt <= freq_cnt + 12'd1;
end
always @(posedge clk or negedge rst_n) begin
    if(rst_n == 1'b0)
        rd_addr <= 1'd0;
    else begin
        if(freq_cnt == FREQ_ADJ) begin
            rd_addr <= rd_addr + 1'b1;
        end    
end     
endmodule

上面这些代码就是将ROM IP核中的数据读出的程序,其中包括了发送到DA芯片驱动的接口。将这些读出的数据通过DA芯片输出就是一个完整的波形了。波形文件用的是正点原子自带的软件生成的,发出什么样的波形是根据你生成什么文件决定的。
之所以用调用ROM IP核的方法去输出波形,是因为这种方法相对简单一点。其实也可以使用CORDIC 算法,没有基础就使用这个算法是相当吃力的,所以还是怎么简单怎么来呗。
DA芯片使用的是TLV5614,一个十二位多通道的芯片,速度还凑活,比不上高速的DA芯片,正常使用只要驱动调好了就没问题。

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值