zoukankan      html  css  js  c++  java
  • 生成mif文件的几种方法总结

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据。生成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中。

     1 #include <stdio.h>
     2 #include <math.h>
     3 
     4 #define PI 3.141592
     5 #define DEPTH 128     /*数据深度,即存储单元的个数*/
     6 #define WIDTH 8       /*存储单元的宽度*/
     7 
     8 int main(void)
     9 {
    10     int i,temp;
    11     float s;
    12 
    13     FILE *fp;
    14     fp = fopen("TestMif.mif","w");   /*文件名随意,但扩展名必须为.mif*/
    15     if(NULL==fp)
    16         printf("Can not creat file!
    ");
    17     else
    18     {
    19         printf("File created successfully!
    ");
    20         /*
    21         *    生成文件头:注意不要忘了“;”
    22         */
    23         fprintf(fp,"DEPTH = %d;
    ",DEPTH);
    24         fprintf(fp,"WIDTH = %d;
    ",WIDTH);
    25         fprintf(fp,"ADDRESS_RADIX = HEX;
    ");
    26         fprintf(fp,"DATA_RADIX = HEX;
    ");
    27         fprintf(fp,"CONTENT
    ");
    28         fprintf(fp,"BEGIN
    ");
    29 
    30         /*
    31         * 以十六进制输出地址和数据
    32         */
    33         for(i=0;i<DEPTH;i++)
    34         {
    35              /*周期为128个点的正弦波*/ 
    36             s = sin(PI*i/64);   
    37             /*将-1~1之间的正弦波的值扩展到0-255之间*/ 
    38             temp = (int)((s+1)*255/2);
    39             /*以十六进制输出地址和数据*/
    40             fprintf(fp,"%x	:	%x;
    ",i,temp);
    41         }//end for
    42         
    43         fprintf(fp,"END;
    ");
    44         fclose(fp);
    45     }
    46 }

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

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

    【注】:为尊重版权,特标注引用的地址:http://www.cnblogs.com/BitArt/archive/2012/12/11/2813503.html

  • 相关阅读:
    使用Fiddler模拟客户端http响应
    Vim显示行号
    Convert int to byte array
    bare linefeeds received in ASCII mode
    Memory Analyse Tool
    what is the difference between static and normal variables in c++
    Looper Could not create wake pip
    Convert Java Doc to CHM using jd2chm
    ARM(RISC)和x86(CISC)的技术差异
    处理器架构——从RISC与CISC到x86、ARM、MIPS
  • 原文地址:https://www.cnblogs.com/xd-elegant/p/4520727.html
Copyright © 2011-2022 走看看