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

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

    关注

    160

    文章

    7726

    浏览量

    177651
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1367

    浏览量

    114518
  • IP
    IP
    +关注

    关注

    5

    文章

    1643

    浏览量

    149324
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68330

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

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

收藏 人收藏

    评论

    相关推荐

    labview工程文件如何生成exe

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

    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 380次阅读
    基于FPGA设计的<b class='flag-5'>BRAM</b>内部结构

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

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

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

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

    labview生成exe文件如何配置文件

    LabVIEW是一种用于实时测试、控制和数据采集的编程环境。在开发过程中,您可以使用LabVIEW软件生成可执行文件(.exe),以便在没有LabVIEW开发环境的计算机上运行您的应用程序。生成
    的头像 发表于 12-27 16:28 2052次阅读

    labview的opc生成配置文件

    的数据交互和通信。在 LabVIEW 中生成 OPC 配置文件有助于实现与其他设备的数据传输和共享,本文将详细介绍如何生成 OPC 配置文件。 首先,在 LabVIEW 中
    的头像 发表于 12-26 17:57 1719次阅读

    keil如何生成bin文件

    Keil是一种集成开发环境(IDE),专为ARM架构的嵌入式系统开发而设计。在Keil中生成bin文件是将代码编译并转换为可执行文件的过程。本文将详细介绍Keil生成bin
    的头像 发表于 12-15 13:43 1.1w次阅读

    ADgerber文件怎么生成PCB

    生成ADGerber文件是将电路板设计转化为可供PCB加工厂制造的图像文件的过程。下面详细介绍关于如何生成ADGerber文件。 ADGer
    的头像 发表于 12-07 17:19 3347次阅读

    C语言编程时,各种类型的变量该如何初始化?

    C语言编程时,各种类型的变量该如何初始化? 在C语言中,每个变量都需要在使用之前进行初始化。初始化是为变量分配内存空间并赋予初始值的过程。C语言提供了不同的
    的头像 发表于 12-07 13:53 1123次阅读

    FPGA实现基于Vivado的BRAM IP核的使用

    Xilinx公司的FPGA中有着很多的有用且对整个工程很有益处的IP核,比如数学类的IP核,数字信号处理使用的IP核,以及存储类的IP核,本篇文章主要介绍BRAM IP核的使用。 BRAM是FPGA
    的头像 发表于 12-05 15:05 1547次阅读

    jvm配置堆内存初始值参数

    程序中,堆内存的初始值是非常重要的,它决定了程序在运行过程中能够使用的内存大小。因此,在优化JVM性能的过程中,对于堆内存初始值的合理配置是至关重要的。 首先,我们需要了解JVM中堆内存的基本概念。堆
    的头像 发表于 12-05 14:17 735次阅读

    IGBT的关断瞬态分析—电荷存储初始值

    在稳态部分的分析中,我们详细地推演了电子电流、空穴电流、总电流以及各电压构成部分与多余载流子浓度分布之间的关系,即一维空间的物理关系。
    的头像 发表于 12-01 13:48 627次阅读
    IGBT的关断瞬态分析—电荷存储<b class='flag-5'>初始值</b>