<noframes id="9ddpp">


<form id="9ddpp"><nobr id="9ddpp"><meter id="9ddpp"></meter></nobr></form><form id="9ddpp"><th id="9ddpp"><progress id="9ddpp"></progress></th></form>

<form id="9ddpp"><nobr id="9ddpp"></nobr></form><noframes id="9ddpp">

    fpga論壇|fpga設計論壇

     找回密碼
     我要注冊

    QQ登錄

    只需一步,快速開始

    搜索
    查看: 2257|回復: 5
    打印 上一主題 下一主題

    用matlab產生mif文件和hex文件

    [復制鏈接]
    老怪甲 該用戶已被刪除
    跳轉到指定樓層
    1#
    老怪甲 發表于 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(&#39;randnum.mif&#39;,a,8,256);
    hex文件生成見11樓

    程序:
    function miffile(filename,var,width,depth)
    %    function miffile(filename,var,width,depth)
    %    It creates a &#39;mif&#39; file called filename,which be written with var.
    %    The &#39;mif&#39; file is a kind of file formats which is uesed in Altera&#39;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 &#39;mif&#39; file written
    %    with all kinds of your data.
    %    If the size of &#39;var&#39; is shorter than &#39;depth&#39;,0 will be written for the
    %    lefts.If the size of &#39;var&#39; is greater than &#39;depth&#39;,than only &#39;depth&#39; former
    %    data of &#39;var&#39; 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 &#39;var&#39; data in row first mode, just set var to var&#39;;
    %
    %    example:
    %       a=uint8(rand(16,16)*256);
    %       miffile(&#39;randnum.mif&#39;,a,8,256);

    if(nargin~=4) %% be tired to do more inupts check!
      error(&#39;Need 4 parameters! Use help miffile for help!&#39;);
    end,
      
    fh=fopen(filename,&#39;w+&#39;);
    fprintf(fh,&#39;--%s.\r\n&#39;,datestr(now));
    fprintf(fh,&#39;WIDTH=%d;\r\n&#39;,width);
    fprintf(fh,&#39;DEPTH=%d;\r\n&#39;,depth);
    fprintf(fh,&#39;ADDRESS_RADIX=HEX;\r\n&#39;);
    fprintf(fh,&#39;DATA_RADIX=HEX;\r\n&#39;);
    fprintf(fh,&#39;CONTENT BEGIN\r\n&#39;);

    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);
    2#
    zhiweiqiang33 發表于 2017-11-10 10:50:46 | 只看該作者
    用matlab產生mif文件和hex文件
    3#
    zhangyukun 發表于 2018-3-29 09:10:35 | 只看該作者
    用matlab產生mif文件和hex文件
    4#
    大鵬 發表于 2018-3-29 09:27:49 | 只看該作者
    學習了,謝謝分享!
    5#
    雷磊 發表于 2022-8-16 15:47:20 | 只看該作者
    fpga跨時鐘域信號設計
    http://www.teendilf.com/forum.php?m ... 7&fromuid=54563
    (出處: fpga論壇|fpga設計論壇)
    6#
    宇xx 發表于 7 天前 | 只看該作者
    用matlab產生mif文件和hex文件
    您需要登錄后才可以回帖 登錄 | 我要注冊

    本版積分規則

    關閉

    站長推薦上一條 /1 下一條

    QQ|小黑屋|手機版|Archiver|FPGA論壇 ( 京ICP備20003123號-1 )

    GMT+8, 2022-9-26 01:11 , Processed in 0.061527 second(s), 24 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回復 返回頂部 返回列表
    美女高潮黄又色高清视频app
    <noframes id="9ddpp">

    
    
    <form id="9ddpp"><nobr id="9ddpp"><meter id="9ddpp"></meter></nobr></form><form id="9ddpp"><th id="9ddpp"><progress id="9ddpp"></progress></th></form>

    <form id="9ddpp"><nobr id="9ddpp"></nobr></form><noframes id="9ddpp">