在Xilinx的FIR、Block Memory等 IP核的配置中,需要使用COE(Coefficient)文件来进行初始化。
写COE文件
一般是通过Matlab设计好参数后,再生成COE文件。具体代码如下。
x = 1:512;
fid = fopen('test.coe','w');
fprintf(fid, 'memory_initialization_radix=10;\n');
fprintf(fid, 'memory_initialization_vector=\n');
fprintf(fid, '%d,\n', x);
fclose(fid);
其中radix可以为2,、10、16。上面的为Block Memory的coe文件生成方法。
对于FIR IP核的coe文件则可使用如下代码。
x = randn(1,512);
q_width = 12;
fid = fopen('FIR_coe.coe','w');
coe_data = round(x/max(abs(x))*(2^(q_width-1)));
fprintf(fid,'Radix = 16;\r\n');
fprintf(fid,'Coefficient_Width = %d;\r\n',q_width);
fprintf(fid,'CoefData = \r\n');
fprintf(fid,'%x,\r\n',coe_data);
fclose(fid);
读COE文件
对于一个未知工程,有时候可能需要回读COE文件来验证设计是否正确。Matlab官方提供了一个coeread函数,其介绍如下。
但笔者一直未能正确调用该函数,故使用另一种方法来实现coe文件的回读。
x_rd = textread('test.ce', '%d', 'delimiter', ',', 'headerlines', 2);
textread函数的前两个参数就不再解释了,‘delimiter’参数值为’,'代表了读的过程中跳过该字符;’headerlines‘参数的值为2代表txt文件的标题行数,在读的过程中也会跳过。
删除COE文件
删除文件coe文件时,可在Design Sources中的Coefficient Files找到欲删除的文件,右击后点击Remove File from Project。如果要彻底删除coe文件,则勾选下面的选项框。
如果手动从文件夹中删除coe文件后,则必须再到工程中删除一遍,否则将会报错。
更新COE文件
经测试在生成IP核时无论是选择Global还是Out of context per IP的综合选项,如果更新了COE文件,都必须重新生成IP核。