欢迎大家来到IT世界,在知识的湖畔探索吧!
本文以正弦波为例,使用FPGA生成波形。
一、开发工具
1、软件平台:Quartus II
2、芯片:不重要
二、步骤
1、设置ROM IP核
设置ROM IP核,根据使用的DA芯片选择对应的位数和数据量,选择生成好的mif文件,一个存储波形的ROM IP核就创建好了。
下面是设置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核的模块。
对于这三个参数,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
欢迎大家来到IT世界,在知识的湖畔探索吧!
上面这些代码就是将ROM IP核中的数据读出的程序,其中包括了发送到DA芯片驱动的接口。将这些读出的数据通过DA芯片输出就是一个完整的波形了。波形文件用的是正点原子自带的软件生成的,发出什么样的波形是根据你生成什么文件决定的。
之所以用调用ROM IP核的方法去输出波形,是因为这种方法相对简单一点。其实也可以使用CORDIC 算法,没有基础就使用这个算法是相当吃力的,所以还是怎么简单怎么来呗。
DA芯片使用的是TLV5614,一个十二位多通道的芯片,速度还凑活,比不上高速的DA芯片,正常使用只要驱动调好了就没问题。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/30423.html