在我们使用FPGA中的Rom时,我们需要提前准备好数据,然后FPGA运行时直接读取ROM中的数据就行了。此时就需要用到Rom的初始化配置文件.mif(Memory initialization file)。
首先先介绍一下mif文件的格式
WIDTH=8;
DEPTH=128;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENT BEGIN
0 : 80;
1 : 86;
2 : 8C;
3 : 92;
4 : 98;
END;
第一行为mif数据的深度,8代表每个数据都是8bit;
第二行是数据的宽度,128代表总共有128的数据;
第三行是指地址的格式 HEX即代表以16进制来寻址;
第四行代表数据存储的格式也为16进制;
在content begin和end之间就是存储的数据;
存储数据的格式为“地址(HEX):数据(HEX);”
知道mif文件的格式我们就可以通过程序来自动生成数据文件了,这里我是用matlab生成的。
width=8;
depth=128;
%设置128个点为一个周期
t = 1:depth;
sinValue = sin(2*3.14159265358979*t/depth);
sinValue = (sinValue + 1)/2;
%设置数据最大值
sinValue = sinValue * 255;
%对浮点数四舍五入
sinValue = round(sinValue);
addr=0:depth-1;
strWidth=strcat(‘WIDTH=’,num2str(width));
strDepth=strcat(‘DEPTH=’,num2str(depth));
%打开文件
fid=fopen(‘f:test.mif’,’w’);
%设置数据宽度
fprintf(fid,strWidth);
fprintf(fid,’;\n’);
%设置数据深度
fprintf(fid,strDepth);
fprintf(fid,’;\n\n’);
%设置地址格式
fprintf(fid,’ADDRESS_RADIX=HEX;\n’);
%设置数据格式
fprintf(fid,’DATA_RADIX=HEX;\n\n’);
fprintf(fid,’CONTENT BEGIN\n’);
%写数据
fprintf(fid,’\t%X : %X;\n’,[addr;sinValue]);
fprintf(fid,’END;\n’);
fclose(fid);
代码比较简单就不多加解释了,主要就是按照文件格式写数据。通过这样我们可以快速生成rom的数据表