专栏首页Lauren的FPGA对RAM初始化怎么做

对RAM初始化怎么做

RAM的初始化并没有那么神秘,如果是采用Xilinx的IP Core,只需提供一个.coe文件,其内容就是RAM的初始值,只需要注意coe文件的格式就好,这里就不再赘述。

初始化方法

如果是自己写的RTL代码,如何初始化呢?这里提供两个常用方法。来看一个例子,如下图所示。

代码第16行,通过default将所有地址的初始值设置为0;

代码第17行,通过索引结合default的方式,将地址0的初始值设置为4,地址1的初始值设置为5,其余地址的初始值设置为0;

代码第19行至第25行,采用initial语句,通过调用readmemb(类似的还有readmemh)实现对RAM的初始化。使用$readmemb时,需要提供一个.mem文件,文件内容就是RAM的初始值,这里给出一个.mem的例子,如下图所示。

仿真问题

使用$readmemb时,需要把.mem文件加入到Vivado工程中,如下图所示。

如果没有添加此文件,会显示如下Warning信息。

综合问题

无论是default还是readmemb定义的初始值,在综合时都是可以生效的。对于一个深度为4宽度为4的单端口RAM,综合后的网表如下图所示。

通过如下图所示的Tcl命令可获得相应的初始值,与init_data.mem中定义的初始值是一致的。

结论

两种RAM初始化的方式:

-采用default或地址索引加default的方式

-采用$readmemb或$readmemh的方式

思考空间

如果需要对ram_block的2号和3号地址分别定义初始值为1和4,其余地址对应初始值为0,该如何描述?

本文分享自微信公众号 - Lauren的FPGA(Lauren_FPGA),作者:LaurenGao

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度解析ug1292(3)

    通常,我们优先解决建立时间违例。Setup slack与逻辑延迟、布线延迟、时钟歪斜和时钟不确定性有关。因此,首先要明确这几个因素中哪个因素对建立时间违例起关键...

    Lauren的FPGA
  • 触发器的初始值

    复位或者置位的作用是将触发器设定到给定的状态即输出为0或1。如果只是上电复位或置位,那么这个复位或置位操作是没有必要的。这是因为对于初始值,可直接在RTL代码中...

    Lauren的FPGA
  • 学习笔记:人工智能、机器学习和深度学习什么关系

    提到人工智能,很多工程师就会想到机器学习、神经网络或者深度学习。这几个概念有一定的区别,也有一定的关系。

    Lauren的FPGA
  • React + Dva + Antd+umi 实践

    记录一下最近项目所用到的技术React + Dva + Antd + umi ,以免忘记。之前没有用过它们其中一个,也是慢慢摸索,了解数据整个流程。

    特立独行的猫a
  • C++抛出和接收异常的顺序

    异常(exception)是C++语言引入的错误处理机制。它 采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了实现异常处理,...

    Dabelv
  • 抛出和接收异常的顺序

    异常(exception)是C++语言引入的错误处理机制。它 采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了实现异常处理,...

    Dabelv
  • Robot Framework中对出错用例处理的策略

    在默认情况下,当一个测试用例中的某个关键字返回错误时,这个测试用例就停止执行剩余的关键字。RF会继续执行下一个用例。这么做的好处是节省时间--反正这里出...

    叉叉敌
  • Vue响应式原理及总结

    虚拟DOM (Virtaul DOM): 用 js 对象模拟的,保存当前视图内所有 DOM 节点对象基本描述属性和节点间关系的树结构。用 j...

    TimothyJia

扫码关注云+社区

领取腾讯云代金券