查看: 3677|回复: 1

mif文件生成方法总结

[复制链接]
  • TA的每日心情
    开心
    2014-2-20 10:23
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2017-7-27 18:32:48 | 显示全部楼层 |阅读模式
    分享到:
    方法1:利用Quartus自带的mif编辑器
    优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑;
    缺点:一旦数据量过大,一个一个的输入会使人崩溃;
    使用方法:在quartus中,【file】/【new】,选择Memory  Initialization file,弹出如下窗口:
    index1.png

    Number of words:可寻址的存储单元数,对于8bit地址线,此处选择256;
    words size:存储单元宽度,8bit;
    然后点击“OK”.

    index2.png

    • 在表格中输入初始化数据;
    • 右键单击左侧地址值,可以修改地址和数据的显示格式;
    • 表中任一数据的地址=列值+行值,如图中蓝色单元的地址=24+4=28;
    对每个单元填写初始值之后,将文件保存即可。

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

    无论使用什么编辑器,必须保证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;
    方法3: 高级语言 生成  C语言

    1. #include <stdio.h>
    2. #include <math.h>

    3. #define PI 3.141592
    4. #define DEPTH 128     /*数据深度,即存储单元的个数*/
    5. #define WIDTH 8       /*存储单元的宽度*/

    6. int main(void)
    7. {
    8.     int i,temp;
    9.     float s;

    10.     FILE *fp;
    11.     fp = fopen("TestMif.mif","w");   /*文件名随意,但扩展名必须为.mif*/
    12.     if(NULL==fp)
    13.         printf("Can not creat file!\r\n");
    14.     else
    15.     {
    16.         printf("File created successfully!\n");
    17.         /*
    18.         *    生成文件头:注意不要忘了“;”
    19.         */
    20.         fprintf(fp,"DEPTH = %d;\n",DEPTH);
    21.         fprintf(fp,"WIDTH = %d;\n",WIDTH);
    22.         fprintf(fp,"ADDRESS_RADIX = HEX;\n");
    23.         fprintf(fp,"DATA_RADIX = HEX;\n");
    24.         fprintf(fp,"CONTENT\n");
    25.         fprintf(fp,"BEGIN\n");

    26.         /*
    27.         * 以十六进制输出地址和数据
    28.         */
    29.         for(i=0;i<DEPTH;i++)
    30.         {
    31.              /*周期为128个点的正弦波*/
    32.             s = sin(PI*i/64);   
    33.             /*将-1~1之间的正弦波的值扩展到0-255之间*/
    34.             temp = (int)((s+1)*255/2);
    35.             /*以十六进制输出地址和数据*/
    36.             fprintf(fp,"%x\t:\t%x;\n",i,temp);
    37.         }//end for
    38.         
    39.         fprintf(fp,"END;\n");
    40.         fclose(fp);
    41.     }
    42. }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-31 11:09
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-1-9 10:32:51 | 显示全部楼层
    总结得很棒,谢谢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 10:32 , Processed in 0.136611 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.