【FPGA】:matlab生成coe文件

文章目录

  • 一.coe文件的说明
  • 二. coe文件产生的示例
    • 1. 正余弦
    • 2. 三角波
    • 3. 矩形波
  • 三. 参考资料

一.coe文件的说明

    COE文件是一种ASCII文本文件,文件头部定义数据基数(Radix),可以时2、10或16。数据以向量的形式给出,每个向量以分号结尾。Vivado会解析COE文件格式,并在生成IP核时导出相关的MIF格式文件,用于行为级仿真。
    最好将COE文件放在与使用此文件的IP核同目录下(即与XCI文件同目录),这样在使用Core Cotainer打包IP核时也会将COE文件打包到XCIX文件中。当替换COE文件时,必须要删掉旧的COE文件,否则也会传递到工程的综合过程中;需要注意,如果只是在磁盘上删掉了文件,而不是在工程中移除,会导致报告一个error。
    COE文件的通用语法格式如下:

Keyword =Value ; 注释
<Radix_Keyword> =Value ; 注释
<Data_Keyword> =Data_Value1, Data_Value2, Data_Value3;

    COE语法不区分关键词的大小写;分号后为注释。下面是与定义数据值的基数相关的关键词:

    RADIX: 用于非存储类型IP核的基数定义(比如FIR滤波器);
MEMORY_INITIALIZATION_RADIX: 定义存储器初始化值的基数。
下面是与数据值相关的关键词:

    COEFDATA: 定义滤波器的系数;
MEMORY_INITIALIZATION_VECTOR: 定义块存储器与分布式存储器的数据;
    PATTERN: 用于位相关器(Bit Correlator)COE文件;
    BRANCH_LENGTH_VECTOR: 用于Interleaver COE文件。
    COE文件最后定义的关键词必须是COEFDATA或MEMORY_INITIALIZATION_VECTOR,之后的关键词定义都会被忽略。下面给出几个COE文件的示例。
(1).Block Memory COE File

; This .COE file specifies the contents for a block memory of depth=16, and width=4.
memory_initialization_radix=2;
memory_initialization_vector=
1111,
1111,
1111,
1111,
1111,
0000,
0101,
0011,
0000,
1111,
1111,
1111,
1111,
1111,
1111,
1111;

(2).FIR COE File

; Example of a Distributed Arithmetic (DA) FIR Filter .COE file
; with hex coefficients, 8 symmetrical taps, and 12-bit coefficients.
Radix = 16;
CoefData= 346, EDA, 0D6, F91, F91, 0D6, EDA, 346;

二. coe文件产生的示例

深度为4096,位宽为8

1. 正余弦

%% sin-cos wave data write in coe file
clear all ;
clc ;
N = 4096 ;
y = zeros(N , 1) ;
for i = 1:1:N 
    x = i ;
    %y(i,1) = ceil( 127*sin(x*2*pi/N) ) + 127 ;
    y(i,1) = ceil( 127*cos(x*2*pi/N) ) + 127 ;
end   
plot(y);
hold on;
fid = fopen('cos_4096.coe','wt');    
%- standard format
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- write data in coe file
for i = 1:1:N
    fprintf(fid,'%d,\n',y(i,1));  
end
fclose(fid);

2. 三角波

%% triangle wave data write in coe file
clear all ;
clc ;
N = 4096 ;
y = zeros(N , 1) ;
for i = 1:1:N 
    if(i < 2049)
        y(i,1) = fix( (i/8) - 1 ) ;
    else
        y(i,1) = fix( ((4096 - i )/8) ) ;
    end
end   
plot(y);
hold on;
fid = fopen('triangle_4096.coe','wt');    
%- standard format
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- write data in coe file
for i = 1:1:N
    fprintf(fid,'%d,\n',y(i,1));  
end
fclose(fid);

3. 矩形波

%% rectangle wave data write in coe file
clear all ;
clc ;
N = 4096 ;
y = zeros(N , 1) ;
for i = 1:1:N 
    if(i < 2049)
        y(i,1) = 255 ;
    else
        y(i,1) = 0 ;
    end
end   
plot(y);
hold on;
fid = fopen('rectangle_4096.coe','wt');    
%- standard format
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- write data in coe file
for i = 1:1:N
    fprintf(fid,'%d,\n',y(i,1));  
end
fclose(fid);

三. 参考资料

  1. Vivado使用技巧(9):COE文件使用方法

你可能感兴趣的:(fpga开发)