【小技巧】使用MATLAB产生coe文件和mif文件供FPGA调用方法整理

目前主流的FPGA,就是xilinx的FPGA和英特尔(原altera)的FPGA,在使用过程中,经常需要调用一些数据到ROM核中。下面总结下调用方法。

1.产生coe,用于xilinx的FPGA:

fid = fopen ('dat.coe','w');
fprintf( fid, 'memory_initialization_radix=10;\n');%生成索引
fprintf( fid, 'memory_initialization_vector =\n' );
for i=1:length(y)%循环打印 32表示的是4bit*8 这里可以自己改
    fprintf(fid,'%d',round(1023*y(i)));%一个一个将矩阵里面的数值打印进去
    if i<length(y)
        fprintf(fid,',\n');%打印逗号
    else
        fprintf(fid,';');%最后一行的分号
    end
end
fclose(fid);

       注意,这里导入的数据为y,我乘以了1023,意思是将数据y进行量化,扩大了10个位宽。运行之后,将产生一个ceo文件。

其内部数据如下:

 

然后在vivado,ISE等软件中,IP核设置的时候调用coe文件就可以了。 

2.产生mif,用于英特尔(原altera)FPGA:

clear all;clc;close all;
depth = 256;            %存储器的深度
width = 8;              %存储器的宽度
fid = fopen('dat.mif','w');%fopen函数以写方式打开文件,如不存在,自动创建
fprintf(fid, 'DEPTH=%d;\n', depth); %fprintf函数可以将数据按指定格式写入到文本文件中
fprintf(fid, 'WIDTH=%d;\n', width); %数据的格式化输出:fprintf(fid, format, variables)
fprintf(fid, 'ADDRESS_RADIX=UNS;\n');%\n是换行,使光标下移一格
fprintf(fid, 'DATA_RADIX=UNS;\n');
fprintf(fid, 'CONTENT BEGIN\n');
for a = 0 : 15
       addr = a;       
       num = round(1023*y(a));
       fprintf(fid, '%d : %d;\n',addr,num);
end
fprintf(fid, 'END;');
fclose(fid);

同上,运行,这里数据为y,运行之后

其数据如下

扫描二维码关注公众号,回复: 13990167 查看本文章

 

 然后在vquartusii等软件中,IP核设置的时候调用mif文件就可以了。 

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/124441036