matlab 2016读取mif文件

本文使用代码及测试用例下载如下

【免费】MATLAB读取mif文件资源-CSDN文库

背景

mif文件介绍

mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据。生成QuartusII11.0可用的mif文件,有如下几种方式:

方法1:利用Quartus自带的mif编辑器

优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑;

缺点:一旦数据量过大,一个一个的输入会使人崩溃;

方法2:利用mif软件来生成

无论使用什么编辑器,必须保证mif文件的格式如下:冒号左边是地址,右边是数据;分号结尾;

需求

项目需要将QuartusII11.0生成的mif文件读取到matlab中进行数据分析

实现

思路

从网上找到帖子

参考帖子
https://blog.csdn.net/weixin_43239754/article/details/106073535
感谢作者的分享。

这里作者读取了mif文件又将mif文件转换成coe文件

我这里仅仅需要读取mif文件即可

所以可以使用,但是实际运行过程中,这个帖子的代码运行总是报错,发现是matlab版本问题,我的matlab是2016,太低了。

这里我修改代码实现再2016能够读取mif文件

并给出测试用例

代码

function DATA=mifread(file_in_fullpath)




%file_in_fullpath = 'InputB1152.mif';
file_in_fullpath = 'checkB_1152.mif';

%% 一些说明
% 输入.mif文件的路径
% 输出转换后的.coe文件及其路径(输出的路径与.mif在同一目录下)
% .coe文件位宽默认16位
%% 读取文件
%----------------------------------------------
index_doc_mif=strfind(file_in_fullpath,'.mif');
if(isempty(index_doc_mif))
    error('非.mif格式文件')
end
%----------------------------------------------
index_slash=strfind(file_in_fullpath,'\');
if(isempty(index_slash))
    index_slash=0;
    file_path=mfilename('fullpath');
    index_slash0=strfind(file_path,'\');
    file_path=file_path(1:index_slash0(end));
else
    file_path=file_in_fullpath(1:index_slash(end));
end
%----------------------------------------------
fid_in=fopen(file_in_fullpath,'r');
try
    A=textscan(fid_in,'%s','Delimiter','/n');
catch
    error('在路径下没有找到.mif文件')
end
fclose(fid_in);
%% 提取主要参数
File_str=A{1,1};
%File_str_test = ['Mary Ann Jones','Christopher Matthew Burns','John Paul Smith'];
%pat = ['Ann','Paul'];
index_DEPTH_GP=(strfind(File_str,'DEPTH'));
%index_DEPTH=strfind(File_str_test,pat);
index_WIDTH_GP=(strfind(File_str,'WIDTH'));
index_ADDRESS_RADIX_GP=(strfind(File_str,'ADDRESS_RADIX'));
index_DATA_RADIX_GP=(strfind(File_str,'DATA_RADIX'));
index_CONTENT_GP=(strfind(File_str,'CONTENT'));
index_BEGIN_GP=(strfind(File_str,'BEGIN'));
index_END_GP=(strfind(File_str,'END'));

index_DEPTH=76;
index_WIDTH=75;
index_ADDRESS_RADIX=77;
index_DATA_RADIX=78;
index_CONTENT=79;
index_BEGIN=79;
%index_END=663;
index_END=669;

if(   isempty(index_DEPTH) ...
   || isempty(index_WIDTH) ...
   || isempty(index_ADDRESS_RADIX) ...
   || isempty(index_DATA_RADIX)...
   || isempty(index_BEGIN) ...
   || isempty(index_END) )

    error('你打开.mif文件错误或已损坏')
end
%-------------------------------DEPTH-----------------------------------
DEPTH=regexp(File_str(index_DEPTH),'\.?\d*','match');DEPTH=char(DEPTH{1});DEPTH=str2num(DEPTH);
%-------------------------------WIDTH-------------------------------------
WIDTH=regexp(File_str(index_WIDTH),'\.?\d*','match');WIDTH=char(WIDTH{1});WIDTH=str2num(WIDTH);
%---------------------------ADDRESS_RADIX----------------------------------
splitStr = regexp(File_str(index_ADDRESS_RADIX),'\=','split');
ADDRESS_RADIX=splitStr{1,1}{1,2};
ADDRESS_RADIX(isspace(ADDRESS_RADIX)) = [];ADDRESS_RADIX(ADDRESS_RADIX==';')=[];
%----------------------------DATA_RADIX------------------------------------
splitStr = regexp(File_str(index_DATA_RADIX),'\=','split');
DATA_RADIX=splitStr{1,1}{1,2};
DATA_RADIX(isspace(DATA_RADIX)) = [];DATA_RADIX(DATA_RADIX==';')=[];
%-------------------------------------------------------------------------
%% 数据裁剪补齐
addr_and_data=File_str(index_BEGIN+1:index_END-1);
DATA=[];
if size(addr_and_data,1)

你可能感兴趣的:(嵌入式系统,matlab,mif文件读取)