0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

教你们怎么生成BRAM初始值的coe文件

FPGA之家 来源:成长助推 作者:成长助推 2021-06-07 11:52 次阅读

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:定义存储器初始化值的基数。

与数据值相关的关键词:

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(‘Coe_File.coe’,‘w+’); fprintf(fid,‘Memory_Initialization_Radix = 10; ’); fprintf(fid,‘Memory_Initialization_Vector = ’); fprintf(fid,‘%g, ’,Data_Value(1:end-1)); fprintf(fid,‘%g; ’,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。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    161

    文章

    7817

    浏览量

    178143
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114705
  • IP
    IP
    +关注

    关注

    5

    文章

    1708

    浏览量

    149558
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68621

原文标题:vivado | 如何生成BRAM初始值的coe文件?

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ads1232重复上电AD初始值相差很大怎么解决?

    传感器,AD也成线性变化,测量没有问题,只是初始AD变大了。请问这是什么情况,怎么解决,在网上有看到遇到类似问题的,但是没看到解决办法。初始化有进行偏移校准,偏移校准去掉也是一样的,包括PWDN拉高前延时1ms也没效果。
    发表于 12-17 06:39

    ads124s08把AIN0端口接入的采集电压断开或者接通,芯片的寄存器所有配置都变成默认的初始值了,为什么?

    题是我把AIN0端口接入的采集电压断开或者接通,芯片的寄存器所有配置都变成默认的初始值了,整个芯片进行复位。我不知道这个是原因。下面是我的连接图。
    发表于 12-13 07:06

    AFE4404没有接外部时钟,4404寄存器的为初始值,能够通过IIC修改寄存器吗?

    1、首先AFE4404寄存器默认使用外部时钟,CLK引脚是否必须要先接一个时钟,通过修改寄存器的改为内部时钟,然后再停止外部时钟?? 2、假如没有接外部时钟,4404寄存器的为初始值,能够通过IIC修改寄存器? 3、通过I
    发表于 12-06 06:35

    使用ADS1256的8个Single-Ended输入去采集压力传感器数据,压力传感器空载时AIN0-AIN7 8个通道初始值不是直线,为什么?

    最近使用ADS1256的8个Single-Ended输入去采集压力传感器数据,发现在压力传感器空载的时候,AIN0-AIN7 8个通道的初始值不是一条直线, 而是有规律地被拉低,刚好与读取数据
    发表于 12-04 07:45

    labview程序生成exe文件怎么还原

    在LabVIEW中,程序生成exe文件后,通常这个过程是不可逆的,即exe文件无法直接“还原”回原始的LabVIEW项目文件(.vi或.lvproj)。exe
    的头像 发表于 09-04 17:12 1433次阅读

    labview工程文件如何生成exe

    生成可执行文件(EXE)是LabVIEW程序开发过程中的一个重要步骤,它允许用户在没有安装LabVIEW的计算机上运行程序。以下是步骤和注意事项: 1. 准备工作 在开始生成EXE文件
    的头像 发表于 09-04 17:09 1730次阅读

    labview怎么生成可执行文件

    生成可执行文件(EXE)是LabVIEW程序开发中的一个重要步骤,它允许用户将LabVIEW项目打包成一个独立的应用程序,便于在没有安装LabVIEW的计算机上运行。 1. 准备工作 在开始生成
    的头像 发表于 09-04 17:07 1042次阅读

    SinaPos的输入接口

    输入接口包括 19 个不同数据格式的输入。 功能块的初始配置期间,这些输入均设置有初始值。输入接口一览如下:
    发表于 09-02 14:41 0次下载

    copy table中存放的是否为初始值不为0的data段所在PFlash的地址信息?

    1. copy table中存放的是否为初始值不为0的data段所在PFlash的地址信息?(比如:int a = 10; 变量a被存放到了PFlash的0x8030001c处,copy table
    发表于 07-02 07:51

    HAL库时钟定义初始值错误怎么解决?

    在DriversCMSISDeviceSTSTM32F4xxSourceTemplatessystem_stm32f4xx.c文件中 第140行这个,是用MX 生成的代码
    发表于 05-14 07:58

    Allegro生成光绘文件

    Allegro生成光绘文件
    发表于 05-06 10:37 1次下载

    基于FPGA设计的BRAM内部结构

    再看末级触发器对BRAM时序性能的影响,下图依次展示了7系列FPGA、UltraScale+和Versal芯片在未使用和使用末级触发器两种情形下时钟到输出的延迟。
    发表于 04-25 10:42 418次阅读
    基于FPGA设计的<b class='flag-5'>BRAM</b>内部结构

    Linux中文件MD5校验方法

    由于生成的md5信息中,每个md5后都紧跟着对应的文件的路径(可能是相对路径),于是将生成的md5保存到某个文件中,以后可以使用该
    发表于 04-22 12:40 679次阅读

    TC275在内存分段预警处理之后,设置的全局变量初始值不正确怎么解决?

    大家好想问一下,tc275里,自己在地图文件里定义有了新的存档段,又设置了首地位置,段内对象可写,4字节对齐。但是在内存分段预警处理之后,设置的全局变量初始值不正确,板子上电后会给出一个随机,而不会是自己设定的
    发表于 01-22 06:40

    LTC2943在初始化的时候要如何确定Qlsb的初始值呢?

    最近公司在使用一款LTC2943的库仑计,但是在初始化的时候要如何确定Qlsb的初始值呢?或者可以提供一个STM32作为MCU的例程最好。
    发表于 01-04 06:47