vivado如何⽣成BRAM初始值的coe⽂件?
Vivado中BRAM IP核是经常会⽤到的,⽽⼀种⽐较简便的给RAM赋初值的⽅式就是通过⼀个coe⽂件进⾏加载,那么如何⽤matlab来产⽣这样⼀个可直接使⽤的coe⽂件呢?
COE⽂件的通⽤格式
⾸先我们来了解下COE⽂件的通⽤格式:
COE⽂件是⼀种ASCII⽂本⽂件,⽂件头部定义数据基数(Radix),可以是2,10或16。数据则以向量的形式给出,每个向量以分号结尾。Vivado会解析COE⽂件格式,并在⽣成IP核时导出相关的MIF格式⽂件,⽤于⾏为级仿真。
COE⽂件的通⽤语法格式如下:
Keyword =Value ; 注释
<Radix_Keyword> =Value ; 注释
<Data_Keyword> =Data_Value1, Data_Value2, Data_Value3;
COE语法不区分关键词的⼤⼩写;分号后为注释。
与定义数据值的基数相关的关键词:
Radix:⽤于⾮存储类型IP核的基数定义;
Memory_Initialization_Radix:定义存储器初始化值的基数。
fprintf格式与数据值相关的关键词:
CoefData:定义滤波器的系数;
Memory_Initialization_Vector:定义块存储器与分布式存储器的数据;
Pattern:⽤于位相关器(Bit Correlator)COE⽂件;
Branch_Length_Vector:⽤于Interleaver COE⽂件。
COE⽂件最后定义的关键词必须是 Coefdata或 Memory_Initialization_Vector ,之后的关键词定义都会被忽略。Block Memory COE
Memory_Initialization_Radix=10;
Memory_Initialization_Vector =Data_Value1, Data_Value2, Data_Value3;
Matlab产⽣coe⽂件的代码:
fid = fopen( '', 'w+');
fprintf(fid, 'Memory_Initialization_Radix = 10;\r\n');
fprintf(fid, 'Memory_Initialization_Vector = \r\n');
fprintf(fid, 'Memory_Initialization_Vector = \r\n');
fprintf(fid, '%g,\r\n',Data_Value( 1:end-1));
fprintf(fid, '%g;\r\n',Data_Value( end));
fclose(fid);
(左右滑动可查看完整代码)
⽣成的MIF⽂件
COE⽂件提供了⼀种设置内存初始化值的⾼层次⽅法,但实际上并不能直接使⽤。当⽣成IP核时,Vivado会将COE⽂件转换为MIF⽂件。MIF⽂件保存了原始值,⽤于存储类IP核的初始化和仿真模型。
MIF⽂件中每⼀⾏代表⼀个存储位置,如第⼀⾏代表地址0,第⼆⾏代表地址1……每⼀⾏必须是初始化值(⾼位在前),与之相关的内存地址为⼆进制格式。在HDL仿真时,MIF⽂件必须仿真仿真⽬录下。使⽤Vivado Simulator仿真时Vivado会⾃动完成相关操作。
最好将COE⽂件放在与使⽤此⽂件的IP核同⽬录下(即与XCI⽂件同⽬录),这样在使⽤Core Cotainer打包IP核时也会将COE⽂件打包到XCIX⽂件中。当替换COE⽂件时,必须要删掉旧的COE⽂件,否则也会传递到⼯程的综合过程中;需要注意,如果只是在磁盘上删掉了⽂件,⽽不是在⼯程中移除,会导致报告⼀个error。
扫取⼆维码获取
更多精彩
成长助推

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。