FPGA_rookie

MATLAB生成mif文件

0
阅读(2747) 评论(1)


在 FPGA 的学习过程中,经常遇到需要生成一个正弦信号作为信号源。正弦信号的生成方法有ROM/RAM查表、CORDIC、NCO、IIR滤波器等方法。其中个人认为ROM查表法最为简单,因此我经常使用ROM查表法生成一个正弦波。


在ROM查表法中,最重要的步骤就是如何得到一个存储着完整周期正弦波数据的ROM初始化文件,这个文件可以是跨平台的hex文件,对于 Quartus II 也可以是 mif 文件。这里简单介绍下如何用 MATLAB 生成一个存储着正弦波的 mif 初始化文件。



%%
close all;
clear all;
clc;
format long g
%%
width = 14 ;   % 数据宽度
depth = 2^14 ; % 数据深度
%%
n = 0 : 1/depth : 1-1/depth ; n = n';
sine = sin(2*pi*n);
%%
sin_int = floor(sine * ( 2^( width - 1 ) - 1 ) );
if ( max( sin_int ) > 2^( width - 1 ) - 1 )
    fprintf('生成数据的最大值为 %d ,超出了 %d bit有符号数可表示的最大正值,请返回程序检查!\n\n',max( sin_int ),width);
elseif ( min( sin_int ) < -1*2^( width - 1 ) )
    fprintf('生成数据的最小值为 %d ,超出了 %d bit有符号数可表示的最大负值,请返回程序检查!\n\n',min( sin_int ),width);
else
    fprintf('生成数据的范围正确!\n\n');
%%
    fid=fopen('sine_data.mif','w');      %打开待写入的.mif文件
    fprintf(fid,'WIDTH=14;\n');          %写入存储位宽14位
    fprintf(fid,'DEPTH=16384;\n');       %写入存储深度16384
    fprintf(fid,'ADDRESS_RADIX=UNS;\n'); %写入地址类型为无符号整型
    fprintf(fid,'DATA_RADIX=DEC;\n');    %写入数据类型为10进制
    fprintf(fid,'CONTENT BEGIN\n');      %起始内容
    for i = 1 : depth
        fprintf(fid,'\t%d:%d;\n',i-1,sin_int(i));
    end
    fprintf(fid,'END;\n');
    fclose(fid);%关闭文件
end
%%


执行程序后在该 MATLAB 文件所在的文件夹内即可找到 sine_data.mif 这个文件,为了验证其格式是否正确,可以使用 QUARTUS II 打开该文件,若可以打开,则基本可以确定生成的 mif 文件格式正确。以后如果要生成其他数据的mif文件,套用此模块即可。


  1. ***此内容已被管理员屏蔽***