一、开拓工具
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;endalways @(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; endendendmodule
上面这些代码便是将ROM IP核中的数据读出的程序,个中包括了发送到DA芯片驱动的接口。将这些读出的数据通过DA芯片输出便是一个完全的波形了。波形文件用的是正点原子自带的软件天生的,发出什么样的波形是根据你天生什么文件决定的。
之以是用调用ROM IP核的方法去输出波形,是由于这种方法相对大略一点。实在也可以利用CORDIC 算法,没有根本就利用这个算法是相称吃力的,以是还是怎么大略怎么来呗。
DA芯片利用的是TLV5614,一个十二位多通道的芯片,速率还凑活,比不上高速的DA芯片,正常利用只要驱动调好了就没问题。