试了下高云的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);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。