vivado中bram的种类与使用

article/2025/10/9 12:22:56

vivado中bram的种类与使用

  • vivado中bram的分类
  • 单端口ram
    • 初始化
    • 工作时序
    • 仿真验证
  • 简化的双端口RAM
    • 初始化
    • 端口定义
    • 仿真结果
  • 双端口RAM
    • 初始化
    • 端口定义
    • 功能仿真
      • 单端口读数
      • 双端口读数
      • 双端口一读一写
      • 双端口写数据

vivado中bram的分类

在vivado中打开IP catalog,在其中搜索“block memory”即可找到bram的相关IP。bram共有以下几类:
在这里插入图片描述
前三项分别是:单端口ram、简化版双端口ram和真正的双端口ram。

那么我们分别例化看一下它们的工作时序。

单端口ram

初始化

vivado给出了一种比较方便的给ram赋初值的方式:通过load一个.coe文件给ram赋初值,我在这里使用的.coe文件内容如下:
在这里插入图片描述
文件里一共存储了16个16位的16进制数,所以在设置IP的时候将位宽(每个位置多少位)和深度(一共有多少个位置)都设置成16。

工作时序

单端口ram的工作时序如下图所示:

在这里插入图片描述
对于某一个周期读到的地址,在下一个周期将该地址所存储的数据通过output口输出出来。由于单端口ram只有一个端口,这个端口既要负责读数,还要负责写数,因此用WEA信号(write enable A)来做区分,当WEA=0时,只读不写,在下一个周期将地址对应的数输出;当WEA=1时,执行的操作将是把DinA的内容写入地址对应的地方,但是本次输出依然是该地址原来的值(不过从此就被DinA的内容替换掉了)。

仿真验证

写一个testbench来验证一下,仿真波形如下:
在这里插入图片描述
其中addr就从0到F一直遍历,WEA一直为1,所以第一次遍历时虽然已经将16’h4399写到了每一个角落,但是读的时候依然是各个位置原来的值,第二次再遍历的时候读到的才是16’h4399。

简化的双端口RAM

初始化

同单端口RAM的初始化,这里连用的.coe文件都是一样的。

端口定义

该IP的端口定义如下图所示:
在这里插入图片描述
可见这种RAM有A和B两个端口,A口负责写,B口负责读,两个端口各自有各自的clk,addr和enable。A口多了一个wea作为写使能、一个dina作为写数据的输入,B口多了一个doutb作为读数据的输出。值得注意的是,和单端口RAM有一个明显的区别,改写某地址的数据时,RAM的输出不是该地址的原来的数据,而是写入的数据。这一点会在后面的仿真中得到验证。

仿真结果

仿真结果如下所示:
在这里插入图片描述
第一次遍历地址时,WEA信号为0,RAM只读不写,output输出的就是RAM里存储的内容。第二次遍历地址时,WEA信号为1,从此output输出的就不再是RAM原有的内容,而是即将写入的内容,这也是单端口RAM和简易双端口RAM的区别。

双端口RAM

初始化

同单端口RAM的初始化,这里连用的.coe文件都是一样的。

端口定义

该IP的端口定义如下图所示:
在这里插入图片描述
如上图所示是真正的双端口bram的IP端口定义。两个端口各自有clk信号、addr信号、端口使能、写使能、写数输入、读数输出。也就是说两个端口都能读数、都能写数。那么就依次仿真它的各种功能。

功能仿真

单端口读数

先仿真单端口读数,分别将enB和enA置为0,仅让一个端口发挥作用。
在这里插入图片描述
在这里插入图片描述
这和单端口RAM读数是一样的,没被使能的端口输出0,使能的端口读出RAM所存储的内容。

双端口读数

将addrb设置成addra的下一个数,可以利用双端口同时读两个数。
在这里插入图片描述

双端口一读一写

首先令读写操作的地址不同,接着上边的addrb比addra多1的设定,让B口读,A口写。这样第一次遍历将读到RAM存储的原值,第二次遍历将读到A写入的值,我令A口写入16位的16进制数16’h4399,下面用仿真来验证猜想。
在这里插入图片描述
观察B端口的输出,猜想得到证实。观察A端口的输出可以得到另一个结论,当某端口的写使能激活时,该端口的输出是写入的数据。下面仿真一下双端口读写操作同一地址会怎样。
在这里插入图片描述
在这里插入图片描述
由仿真波形可知,A口写B口读并且读写地址为同一地址时,B口无法读到RAM原有的值,而是输出即将写的内容(也就是A口的写输入,在本例中是16’h4399);但A口读B口写则不同,A口依然能读出RAM原有的值,而在第二次遍历时才输出B口写入的值,即16’h2200(当然B口的输出一直是16’h2200),因此猜想A口和B口并不是完全一致的端口,这个猜想有待参考文档来证实。

双端口写数据

在这里插入图片描述
如图所示,在写阶段双端口均写入数据,A口将所有偶地址写入16’h4399,B口将所有奇地址写入16’h2200。后面的读数据读出的结果是16’h4399和16’h2200交替,证实了这一点。双端口可以同时写,大大提高了数据传输效率。那么如果双端口同时写一个地址会发生什么呢?下面用仿真来验证。
在这里插入图片描述
如图,在写数阶段,A口和B口输出各自的写输入,即分别是16’h4399和16’h2200,但是不可能两个数写入同一个地址因为根本写不下。从读阶段的波形可以看出,写进去的是16’h2200,也就是B口的内容。从仿真得出的结论是:A口和B口对同一地址进行写操作时,写入的是B口的数据。但仿真未必是连板时真实发生的,所以连板实验时未必如此。


http://chatgpt.dhexx.cn/article/CoNApAAo.shtml

相关文章

BRAM的使用

使用Block Memory Generator IP核,PL读取BRAM数据 软件环境:Vivado 2018.3 IP核:Block Memory Generator 8.4(Rev.2) 1、点击IP Catalog 2、搜索”Block Memory Generator“双击选择RAMs & ROMs & BRAM下的IP核 3、配置IP核为Si…

FPGA — BRAM学习笔记—读写操作

使用软件: Vivado 开发板: EGO1采用Xilinx Artix-7系列XC7A35T-1CSG324C FPGA BRAM笔记 BRAM介绍同步双端口BRAMBRAM读写操作(1)读操作(2)写操作(3)写模式写优先模式读优先模式不变模式 双端口块内存接口BRAM IP的使用及仿真验证IP核使用coe文件将IP核添…

FPGA从入门到精通(8)-BRAM

所使用EDA软件:VIVADO2018.3 FPGA型号:xc7a35tcsg325-2 很久没写了,随便写一篇BRAM的吧。说到BRAM ,很多人都喜欢拿它来DRAM比较 ,两者都有啥优缺点,其实我也拿不准。不过一般来说,存储较大的数…

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据 一,Xilinx BRAM介绍二,BRAM对应的IP核调用和使用1,BRAM对应的IP核介绍2,BMG例化IP核的调用一,Xilinx BRAM介绍 BRAM 就是Block Memory,是Zynq的PL端的存储RAM单元。可以利用BRAM,在PS和PL之间进行数据的交换。Zyn…

FPGA设计中BRAM(Block RAMs)资源的使用(综合为BRAM)

FPGA设计中BRAM(Block RAMs)资源的使用 RAM分为BRAM(Block RAMs)和DRAM(Distributed RAM),即块RAM与分布式RAM,这两个差别在于BRAM是FPGA上固有的一些存储资源(针对不同型…

web测试与app测试的区别

目录 前言 首先从系统架构来看 专项测试 安装、卸载、更新: 界面操作: 前言 仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的。那么区别在哪里呢? 我个人觉得就是由于载体不一样,所以系统测试和…

APP测试与WEB测试

APP测试与WEB测试的区别(异同) 相同点: 功能测试层面而言:APP测试和web测试都是使用相同的测试用例测试方法(都用到等价类划分、边界值分析、正常和异常情况去考虑测试点) UI界面测试:都需要按照原型图和设计图检查UI…

web测试,App测试,小程序测试区别

最近项目真的太忙了,不过,今天无论如何我都要更文章了,谢谢大家的支持,不断努力进步 这篇文章,我就是要梳理一下,web测试,app测试,和小程序的区别 话不多说,上主题 web…

WEB端与移动端测试区别和总结

WEB端与移动端测试区别总结如下: 1、系统架构 WEB端 B/S结构,WEB端的前端一般不做端的区分 WEB端的上线不管是预发布还是N环上线,server上线后,前端同步更新,一般是不存在多个版本的问题; 移动端 C/S结构,移…

Apifox简单了解——WEB端测试的集大成者

文章目录 0 引入1、Postman2、Swagger (丝袜哥)3、Mock4、JMeter5、Apifox6、引用 0 引入 Apifox Postman Swagger Mock JMeter 1、Postman 1 作用 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,简单易用的接口测试…

web测试的基本流程

1、web测试流程: (1)web测试 1)参与一个web新项目的测试前,先搜集测试相关的资料,包括原型图、各种需求文档、业务相关等需求相关材料 2)结合第一步搜集到的需求相关资料,自行熟悉系统,同时列出不明白的点,…

Web端测试常用方法

介绍下工作中,Web端测试所涉及到的方法: 前言:Web测试常用的方法,兼容性测试、安全性测试、可用性测试 & 逻辑功能测试 1 > 兼容性测试 先说下兼容性测试,工作中在测试时,一般涉及操作系统测试、浏…

web端测试经验(项目实战经验)

软件测试相信大家已经有一定的了解了,无非就是找bug 找缺陷 找问题 找这个程序(前端、后端)的不足点 以及不人性化的地方 ,由我们监测并提出有效的建议给项目进行缺陷修复以及优化点。软件测试大体分为Web、App两个,当…

这可能是最全的Web测试各个测试点,有这一篇就够了

前言 什么是Web测试? Web测试测试Web或Web应用程序的潜在错误。它是在上线前对基于网络的应用程序进行完整的测试。 Web测试检查 功能测试 易用性测试 接口测试 性能测试 安全测试 兼容性测试 1、功能测试 测试网页中的所有链接、数据库连接、网页中用于提交或从…

【转载】 web项目测试

前言 之前说了APP项目的测试,今天来总结一下web项目的测试,其实大多数过程是差不多类似的。对比平常移动端手机的高频率使用来说,对于部分人使用pc端浏览器的概率就不会这么高,讲APP项目测试的时候没怎么涉及到网络协议部分的介绍…

Web端测试方法

web端通用测试点请移步 1. Web 测试的总体策略 2. Web 测试的范围 √ 功能 √ 性能 √ 界面 √ 兼容性 √ 安全性 √ DB √ 文档 2.1 功能测试 ☆ 功能测试主要从链接、表单、Cookies、设计语言、数据库、文件上传等方面进行。 2.1.1 链接 ☆ 链接也称超链接,…

Redis集群 关闭和重启

1、创建好的redis集群,一下是正常运行的3主3从服务器 2、正常关闭集群服务器 [rootca01 redis-cluster]# cat stopall.sh cd 7001 ./redis-cli -p 7001 shutdown cd .. cd 7002 ./redis-cli -p 7002 shutdown cd .. cd 7003 ./redis-cli -p 7003 shutdown cd .. c…

叫你别随便重启Redis!!!怎么样,数据全丢了吧~~~

目录 事情是这样的... Redis持久化数据的两种模式 一、RDB模式 二、AOF模式 三、RDB和AOF之间的关系 四、问题回顾分析 那么该如何开启AOF增量备份模式呢? 解决方法: 1、登录到redis 2、在线修改AOF开关 3、查看数据 事情是这样的... 今天,跑…

redis集群 服务器重启测试

redis集群 服务器重启测试 1、集群规划:2台服务器 每台服务器运行3个redis实例2、重启2台服务器后redis实例没有自动重启最后一对主从节点比较 重启实例后和之前的主从分配 3、再次重启2台服务器4、主从同步测试 1、集群规划:2台服务器 每台服务器运行3个…

启动redis

目录 could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接 解决办法 启动效果 今天下载了若依框架,本来想运行一下看看效果,结果出现下列问题 org.springframework.beans.factory.UnsatisfiedDependencyExcept…