当前位置:科技动态 > 使用matlab生成mif文件

使用matlab生成mif文件

  • 发布:2023-10-10 10:47

-->

在FPGA中,ROM模块的初始化文件分为两种,一种是hex文件,一种是mif文件。这两个文件都可以通过 Quartus 手动创建并手动输入数据。您还可以使用专用文件编辑器进行编辑。

这里介绍如何使用matlab生成mif文件。

miffile.m文件的源程序如下:

函数miffile(文件名,var,宽度,深度)

% 输入 4 个参数:
% filename:要生成的 .mif 文件的文件名,即目标文件名
% var:数据输入的文件,即源文件文件
% 宽度:数据位宽
% 深度:数据深度
%
% 示例:
% a=unit8(rand(16,16),*255);
% miffile('randnum.mif' ,a,8,255);
%
if(nargin~=4) %输入必须是四个参数!
error('需要4个参数!使用帮助mif文件寻求帮助!');
end,

% 模拟输出mif文件的格式
fh=fopen(filename,'w+');
fprintf(fh,'--Created by xxxx.\r\n');
fprintf( fh,'--support@www.sychzs.cn.\r\n');
fprintf(fh,'--%s.\r\n',datestr(now));
fprintf( fh, 'WIDTH=%d;\r\n',宽度); % 位宽
fprintf(fh,'DEPTH=%d;\r\n',深度); % 深度
fprintf(fh,' ADDRESS_RADIX=HEX;\r\n'); %地址用十六进制数表示
fprintf(fh,'DATA_RADIX=HEX;\r\n'); %数据以十六进制数字表示
fprintf(fh,'CONTENT BEGIN\r\n'); %数据起始标记
%%%%%%%%%
%%%%%%%%%
var= rem(var,2^width);
[sx,sy, sz]=大小(var);
值=var(1,1,1);
sametotal=1;
i深度=0;
addrlen=1;
temp=16;
while(temp<深度) % 计算需要的地址个数,地址长度
temp=temp*16;
addrlen =addrlen+1;
end,
datalen=1;
while(temptemp=temp*16;
datalen=datalen +1;
end
for k=1:sz,
对于 j=1:sy,
对于 i=1:sx,
if(~((i==1) && (j==1) && (k==1)))
if(i深度<深度),
i深度=i深度+1;
if(value==var(i,j,k))
sametotal=sametotal+1;
继续;
else
if(sametotal==1)
fprintf(fh,['\t%' num2str(addrlen) 'X:%' num2str(datalen) 'X;\r\n'],i深度-1,值);
else
fprintf(fh,['\ t[%' num2str(addrlen) 'X..%' num2str(addrlen) 'X]:%' num2str(datalen) 'X;\r\n'],i深度相同,i深度-1,值);
end,
sametotal=1;
value=var(i,j,k);
end,
else
break;
end,
结束,
结束,
结束,
结束,
if(i深度<深度)
if(sametotal==1)
fprintf(fh,['\t%' num2str(addrlen) 'X:%' num2str(datalen) 'X;\r\n'],i深度,value);
else
fprintf(fh,['\t[%' num2str(addrlen)) 'X.. %' num2str(addrlen) 'X]:%' num2str(datalen) 'X;\r\n'],idepth-sametotal+1,idepth,value);
end,
end,
if(i深度<深度-1)
if(i深度==(深度-2))
fprintf(fh,['\t%' num2str(addrlen) 'X:%' num2str(datalen) 'X ;\r\n'],i深度+1,0);
else
fprintf(fh,['\t[%' num2str(addrlen) 'X..%' num2str(addrlen) 'X] :%' num2str(datalen) 'X;\r\n'],i深度+1,深度-1,0);
end,
end,
%%%%%%%%%
%%%%%%%%%
fprintf(fh,'END;\r\n');
fclose(fh);

使用miffile函数的例程如下。将RGB图像的R基色转换为灰度值后,存储在mif文件中:

clc;
全部清除;
%评论
RGBImage=imread('test.JPG');
RImage=RGBImage(:,:,1);
[row, col]=大小(RImage);
OutDate=零(1,row*col);
for i=1:row
for j=1:col
OutData((i-1) *col+j)=RImage(i,j);
结束
结束
miffile('data.mif',OutData,8,row*col)
imshow(RImage);
disp('好的!');

-->

相关文章

最新资讯

热门推荐