matlab产生mif 文件,生成.mif文件的matlab程序

天气: 晴朗

心情: 高兴

function mif_Gen(filename,var,width,depth)

%       function miffile(filename,var,width,depth)

%       It creates a 'mif' file called filename,which be written with var.

%       The 'mif' file is a kind of file formats which is uesed in Altera's

%       EDA tool,like maxplus II ,quartus II,to initialize the memory

%       models,just like cam,rom,ram.

%       Using this function,you can easily produce the 'mif' file written

%       with  all kinds of your data.

%       If the size of 'var' is shorter than 'depth',0 will be written for the

%       lefts.If the size of 'var' is greater than 'depth',than only 'depth' former

%       data of 'var' will be written;

%       the radix of address and data is hex

%       filename --the name of the file to be created,eg,"a.mif",string;

%       var ----the data to be writed to the file, can be 3D or less ,int or other fittable;

%       width --the word size of the data,width>=1,int;

%       depth --the number of the data to be writed,int;

%

%       because matlab read the matrix is colum first,if you want to write

%       the 'var' data in row first mode, just set var to var';

%

%       example:

%             a=uint8(rand(16,16)*256);

%             miffile('randnum.mif',a,8,256);

if(nargin~=4) %% be tired to do more inupts check!

error('Need 4 parameters! Use help miffile for help!');

end,

fh=fopen(filename,'w+');

fprintf(fh,'--Created by VICTOR\r\n');

fprintf(fh,'--violet701@126.com\r\n');

fprintf(fh,'--%s\r\n',datestr(now));

fprintf(fh,'WIDTH=%d;\r\n',width);

fprintf(fh,'DEPTH=%d;\r\n',depth);

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);%% clip to fit the width;

[sx,sy,sz]=size(var);%% can only fit 3D or less;

value=var(1,1,1);

sametotal=1;

idepth=0;

addrlen=1;

temp=16;

while(temp

temp=temp*16;

addrlen=addrlen+1;

end,

datalen=1;

while(temp

temp=temp*16;

datalen=datalen+1;

end,

for k=1:sz,

for j=1:sy,

for i=1:sx,

if(~((i==1 ) &&( j==1) &&( k==1)))

if(idepth

idepth=idepth+1;

if(value==var(i,j,k))

sametotal=sametotal+1;

continue;

else

if(sametotal==1)

fprintf(fh,['\t%' num2str(addrlen) 'X:%' num2str(datalen) 'X;\r\n'],idepth-1,value);

else

fprintf(fh,['\t[%' num2str(addrlen) 'X..%' num2str(addrlen) 'X]:%' num2str(datalen) 'X;\r\n'],idepth-sametotal,idepth-1,value);

end,

sametotal=1;

value=var(i,j,k);

end,

else

break;

end,

end,

end,

end,

end,

if(idepth

if(sametotal==1)

fprintf(fh,['\t%' num2str(addrlen) 'X:%' num2str(datalen) 'X;\r\n'],idepth,value);

else

fprintf(fh,['\t[%' num2str(addrlen) 'X..%' num2str(addrlen) 'X]:%' num2str(datalen) 'X;\r\n'],idepth-sametotal+1,idepth,value);

end,

end,

if(idepth

if(idepth==(depth-2))

fprintf(fh,['\t%' num2str(addrlen) 'X:%' num2str(datalen) 'X;\r\n'],idepth+1,0);

else

fprintf(fh,['\t[%' num2str(addrlen) 'X..%' num2str(addrlen) 'X]:%' num2str(datalen) 'X;\r\n'],idepth+1,depth-1,0);

end,

end,

%%%%%%%%%%

%%%%%%%%%%

fprintf(fh,'END;\r\n');

fclose(fh);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值