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文件的主要内容,如果未能解决你的问题,请参考以下文章
ISE14.2如何将FPGA程序和microblaze的程序一起固化到flash里面去?
FPGA实验--模拟一个四选一多路选择器 求修改quartus II 自动生成testbench模板?