用matlab生成mif文件
Posted 晓鹏的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用matlab生成mif文件相关的知识,希望对你有一定的参考价值。
module rom_ip( clk,data, rst_n ); input clk; input rst_n; output [7:0] data; reg [7:0] add; rom_ip_mif rom_ip_mif_inst ( .address ( add ), .clock ( clk ), .q ( data ) ); always @(posedge clk or negedge rst_n) if(!rst_n)begin add <= 8‘d0; end else if(add == 8‘hff) add <= 8‘d0; else begin add <= add + 1‘b1; end endmodule `timescale 1ns/1ns module tb_romip(); reg clk; reg rst_n; wire [7:0] data; rom_ip U1( .clk(clk), .data(data), .rst_n(rst_n) ); initial begin clk = 1; rst_n = 0; #20; rst_n = 1; #2000; $stop; end always #10 clk =~ clk; endmodule
a=0:255 miffile(‘rom_ipp.mif‘,a,8,256) 这是在matlab中调用的miffile函数来生成mif文件 ‘’单引号里面为所生成文件的名字 注:所生成的文件在matlab所编译的文件夹内 a 为产生的数据 8为位宽 256为深度 代码内容为 function miffile(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 xxxx.\r\n‘); fprintf(fh,‘[email protected]\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<depth) %%decide the length of addr temp=temp*16; addrlen=addrlen+1; end, datalen=1; while(temp<width) %%decide the length of data 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<depth), 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<depth) 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<depth-1) 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);
以上是关于用matlab生成mif文件的主要内容,如果未能解决你的问题,请参考以下文章