FPGA如何生成.mi文件

Posted SF8086

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FPGA如何生成.mi文件相关的知识,希望对你有一定的参考价值。

  试了下高云的FPGA,用来做了个DDS,然后就涉及到波表和ROM内容初始化了,存储器初始化文件的话,Xilinx是.coe,Altera是.mif,而高云的软件一打开,要求的文件格式是个不太眼熟的.mi,网上搜不到怎么生成,烦了一会然后回头在高云的文档里挨个Ctrl + F,然后在《云源软件用户指南》里找到相关内容,简单地说就是个ASCII文件,开头要说明一下数据格式、数据深度和数据宽度,然后就是数据了,格式上有二进制、十六进制和带地址十六进制几种。带地址十六进制格式和.mif文件的格式很像。

带地址十六进制格式(Address-Hex File)
Address-Hex 文件是在文件中对有数据记录的地址和数据都进行记录,地址和数据都是由十六进制数 0~F 组成,每行中冒号前面是地址,冒号后面 是数据,文件中只对写入数据的地址和数据进行记录,没有记录的地址默认 数据为 0。
#File_format=AddrHex
#Address_depth=256
#Data_width=16
9:FFFF
23:00E0
2a:001F
30:1E00
 ——来自《云源软件使用手册》

  这个格式的文件可以用如下代码生成:

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

#define PI 3.1415926
#define DEPTH 1024     //数据深度
#define WIDTH 14       //数据位宽

int main(void)
{
    int i,temp;
    float s;

    FILE *fp;
    fp = fopen("TestMi.mi","w");   
    if(NULL==fp)
        printf("Can not creat file!\\r\\n");
    else
    {
        printf("File created successfully!\\n");

        fprintf(fp,"#File_format=AddrHex\\n");
        fprintf(fp,"#Address_depth=%d\\n",DEPTH);
        fprintf(fp,"#Data_width=%d\\n",WIDTH);

        for(i=0;i<DEPTH;i++)
        {
             //正弦波
            s = sin(2*PI*i/DEPTH);
            temp = (unsigned int)((s+1)*(pow(2,13)-1));

            //锯齿波
            //temp = (unsigned int)(pow(2,14) - abs(16*i-pow(2,14)));

            //三角波
            // temp = (unsigned int)(pow(2,14) - abs(32*i-pow(2,14)));

            //以十六进制输出地址和数据
            fprintf(fp,"%x:%04x\\n",i,temp);
        }

        fclose(fp);
    }
}

以上是关于FPGA如何生成.mi文件的主要内容,如果未能解决你的问题,请参考以下文章

前端开发工具vscode如何快速生成代码片段

ISE14.2如何将FPGA程序和microblaze的程序一起固化到flash里面去?

FPGA实验--模拟一个四选一多路选择器 求修改quartus II 自动生成testbench模板?

基于ARM的FPGA加载配置实现 想将ISE生成的bit文件远程下载和调试FPGA。

关于FPGA如何快速生成模块的例化模板(实用)

创建自己的代码片段(CodeSnippet)