集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3060|回复: 10

用matlab产生mif文件和hex文件

[复制链接]
老怪甲 该用户已被删除
老怪甲 发表于 2010-5-24 09:55:47 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2011-7-13 21:10 编辑

用matlab产生mif文件和hex文件

(Altera的EDA软件,如maxplus,quartus等用到的初始化rom,ram等的文件格式)
使用方法:
example:
      a=uint8(rand(16,16)*256);
      miffile('randnum.mif',a,8,256);
hex文件生成见11楼

程序:
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,'--%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,[&#39;\t%&#39; num2str(addrlen) &#39;X:%&#39; num2str(datalen) &#39;X;\r\n&#39;],idepth-1,value);
            else
              fprintf(fh,[&#39;\t[%&#39; num2str(addrlen) &#39;X..%&#39; num2str(addrlen) &#39;X]:%&#39; num2str(datalen) &#39;X;\r\n&#39;],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,[&#39;\t%&#39; num2str(addrlen) &#39;X:%&#39; num2str(datalen) &#39;X;\r\n&#39;],idepth,value);
       else
         fprintf(fh,[&#39;\t[%&#39; num2str(addrlen) &#39;X..%&#39; num2str(addrlen) &#39;X]:%&#39; num2str(datalen) &#39;X;\r\n&#39;],idepth-sametotal+1,idepth,value);
       end
end
if(idepth<depth-1)
  if(idepth==(depth-2))
    fprintf(fh,[&#39;\t%&#39; num2str(addrlen) &#39;X:%&#39; num2str(datalen) &#39;X;\r\n&#39;],idepth+1,0);
  else
    fprintf(fh,[&#39;\t[%&#39; num2str(addrlen) &#39;X..%&#39; num2str(addrlen) &#39;X]:%&#39; num2str(datalen) &#39;X;\r\n&#39;],idepth+1,depth-1,0);
  end
end

fprintf(fh,&#39;END;\r\n&#39;);        
fclose(fh);
zhiweiqiang33 发表于 2017-11-10 10:50:46 | 显示全部楼层
用matlab产生mif文件和hex文件
zhangyukun 发表于 2018-3-29 09:10:35 | 显示全部楼层
用matlab产生mif文件和hex文件
大鹏 发表于 2018-3-29 09:27:49 | 显示全部楼层
学习了,谢谢分享!
雷磊 发表于 2022-8-16 15:47:20 | 显示全部楼层
fpga跨时钟域信号设计
http://www.fpgaw.com/forum.php?m ... 7&fromuid=54563
(出处: fpga论坛|fpga设计论坛)
宇xx 发表于 2022-9-19 15:09:04 | 显示全部楼层
用matlab产生mif文件和hex文件
嘿哈嘿哈哈 发表于 2022-9-28 08:57:13 | 显示全部楼层
用matlab产生mif文件和hex文件
dameihuaxia 发表于 2022-9-30 09:12:25 | 显示全部楼层
基于Virtex5高性能FPGA的脉冲激光测距系统设计
http://www.fpgaw.com/forum.php?m ... 2&fromuid=58166
(出处: fpga论坛|fpga设计论坛)
嘿哈嘿哈哈 发表于 2022-10-13 09:08:36 | 显示全部楼层
用matlab产生mif文件和hex文件
dameihuaxia 发表于 2022-10-13 17:47:54 | 显示全部楼层
Verilog的135个经典设计实例
http://www.fpgaw.com/forum.php?m ... 1&fromuid=58166
(出处: fpga论坛|fpga设计论坛)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-16 09:52 , Processed in 0.075279 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表