chenyjwbl的个人空间 https://blog.eetop.cn/1190191 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

(转)如何生成mif文件

已有 1168 次阅读| 2014-5-4 19:47 |个人分类:FPGA

原文网址http://www.cnblogs.com/BitArt/archive/2012/12/11/2813503.html 

mif文件就是存储器初始化文件,即memory initialization file,用来配置RAMROM中的数据。生成QuartusII11.0可用的mif文件,有如下几种方式:

方法1:利用Quartus自带的mif编辑器

优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑;

缺点:一旦数据量过大,一个一个的输入会使人崩溃;

使用方法:在quartus中,【file/new】,选择Memory  Initialization file,弹出如下窗口:

Number of words:可寻址的存储单元数,对于8bit地址线,此处选择256

words size:存储单元宽度,8bit

然后点击“OK”.

 

·  在表格中输入初始化数据;

·  右键单击左侧地址值,可以修改地址和数据的显示格式;

·  表中任一数据的地址=列值+行值,如图中蓝色单元的地址=24+4=28

对每个单元填写初始值之后,将文件保存即可。

 

方法2:利用mif软件来生成

无论使用什么编辑器,必须保证mif文件的格式如下:冒号左边是地址,右边是数据;分号结尾;

  DEPTH = 256;

  WIDTH = 8;

  ADDRESS_RADIX = HEX;

  DATA_RADIX = HEX;

  CONTENT

  BEGIN

  0000 : 0000;

  0001 : 0000;

  0002 : 0000;

  ……(此处省略一千字*.*)

  00FA : 00FF;

  00FB : 00FF;

  00FC : 00FF;

  00FD : 00FF;

  00FE : 00FF;

  00FF : 00FF;

   END;

这里推荐一款mif生成器:Mif_Maker2010.exe,可以百度下载;软件使用方法见《Mif Maker2010的使用方法》。

 

方法3:使用高级语言

  用C语言或者matlab语言等来生成,C语言生成代码如下:本代码生成一个正弦波的数据波形,保存在TestMif.mif中。

#include <stdio.h>

#include <math.h>

 

#define PI 3.141592

#define DEPTH 128     /*数据深度,即存储单元的个数*/

#define WIDTH 8       /*存储单元的宽度*/

 

int main(void)

{

    int i,temp;

    float s;

 

    FILE *fp;

    fp = fopen("TestMif.mif","w");   /*文件名随意,但扩展名必须为.mif*/

    if(NULL==fp)

        printf("Can not creat file!\r\n");

    else

    {

        printf("File created successfully!\n");

        /*

        *    生成文件头:注意不要忘了“;”

        */

        fprintf(fp,"DEPTH = %d;\n",DEPTH);

        fprintf(fp,"WIDTH = %d;\n",WIDTH);

        fprintf(fp,"ADDRESS_RADIX = HEX;\n");

        fprintf(fp,"DATA_RADIX = HEX;\n");

        fprintf(fp,"CONTENT\n");

        fprintf(fp,"BEGIN\n");

 

        /*

        * 以十六进制输出地址和数据

        */

        for(i=0;i<DEPTH;i++)

        {

             /*周期为128个点的正弦波*/

            s = sin(PI*i/64);  

            /*-11之间的正弦波的值扩展到0-255之间*/

            temp = (int)((s+1)*255/2);

            /*以十六进制输出地址和数据*/

            fprintf(fp,"%x\t:\t%x;\n",i,temp);

        }//end for

       

        fprintf(fp,"END;\n");

        fclose(fp);

    }

}

验证生成的数据是否正确:用记事本打开生成的mif文件,同时用Quartus打开mif文件,内容如下:

能成功导入,且数据一致,说明生成正确。(转,完成)



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 175

    访问数
关闭

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

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-5 20:27 , Processed in 0.024340 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部