Verilog编写2FSK第①步MATLAB生成.mif文件
在Verilog生成DDS前,需要先用MATLAB生成.mif文件供quartus调用。
- 需要在开头创建.mif文件并且文件设置地址:
DDSfil = fopen('D:\WXD\MATLAB\DDS.mif','wt');%D:\WXD\MATLAB\DDS.mif(.mif文件生成地址)wt(以只写的方式打开文件)
- 添加正弦函数参数:
AM=2^9;%信号幅度这里我设置的是512
ADC=2^9;%直流分量,我只需要正值,所以将信号向上抬升了512,此时信号幅值为1024.
FS=2^10;%采样频率1024
t=[0:1/FS:1];%采样时刻从0到1以1/FS为分辨率
s=AM*sin(2*pi*t-pi/2) + ADC;%生成信号,可进行修改相移数值,来进行一周期内波形的选择
- 添加.mf文件内标准格式:
fprintf(DDSfil, '%s\n','DEPTH=1024;');%数据深度
fprintf(DDSfil, '%s\n','WIDTH=10;');%数据位宽
fprintf(DDSfil, '%s\n','ADDRESS_RADIX=UNS;');%地址格式可为HEX DEC UNS
fprintf(DDSfil, '%s\n','DATA_RADIX=HEX;');%数据格式可为HEX DEC UNS
fprintf(DDSfil, '%s\t','CONTENT');%s数据地址
fprintf(DDSfil, '%s\n','BEGIN');%数据开始读取
以上文件格式不可修改,是生成.mif 文件的必要信息。
- 将数据写入.mif文件
for i = 1:1:FS%从1到FS
fprintf(DDSfil, '\t%g',i-1);%数据地址,从0开始编码到1023共1024个数据如果需要从1开始计数设置为i;
fprintf(DDSfil, '%s',':');%冒号左边是地址,右边是数据,所以这里需要输出个':'
fprintf(DDSfil, '%x',round(s(i)));%以X为16进制放置采样后量化数值的
fprintf(DDSfil, '%s\n',';');%分号结尾/n以下一行开始下一组数据存储
end
- 最后将.mif文件格式结尾加上
fprintf(DDSfil, '%s\n','END');%该语句必不可少,为.mif结束语句,如果缺少,quartus编译无法通过
以上代码直接按顺序粘贴紧MATLAB中即可运行,需要注意的是文件生成地址。.mif文件可通过记事本打开查看。
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真③(信号调制仿真)
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真②(调用.mif生成2FSK载波波形——DDS)