试了下高云的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);
    }
}

ngHackerX86
22 声望24 粉丝

000000


引用和评论

0 条评论