BRAM IP Native模式使用

简介

BRAM(‌Block RAM)是‌FPGA(Field-Programmable Gate Array)中的一种专用RAM资源,固定分布在FPGA内部的特定位置。该内容主要对BRAM(Block RAM"的缩写)Native模式下IP界面做详细描述和使用。

界面介绍

Basic界面

1、选择对外接口,可以是AXI总线控制读写也可以是Native本地模式接口,本章节我们只介绍Native常规模式下的BRAM控制。

2、存储类型分别有RAM模式和ROM模式;

(1)Single-port ROM:

该模式对外接口如下:

简单的理解就是根据地址输出指定数据,数据写入COE文件并保存,保存方法后面会讲解;

(2)

该模式下支持一个ROM可同时访问两个地址空间的数据。

(3)Single-port RAM

不同于ROM模式的是RAM支持在线读写功能,并且初始化内容可以是COE里的值,对外接口如下:

单口RAM的读写公用一个地址,当wea = 1时写使能代表写数据有效,为0的时候读有效。单口BRAM的优点时接口比较简单,缺点是读写不能同时进行,即写的时候无需对BRAM进行读操作。

(4)Simple Dual-port RAM

该模式下写地址和读地址分开,可以实现同时进行BRAM地址空间读写操作,至于读写优先级可在IP配置里设置,稍后做介绍。

(5)True Dual-port RAM

和Simple Dual-port RAM一样可以支持同时读写操作,但有所不同,具体如下:

**Simple Dual-port RAM(伪双口RAM)**‌的特点是一个端口只用于写入,另一个端口只用于读取。这种设计简化了硬件设计,因为它不需要两个端口同时进行读操作或者同时写操作。在资源使用方面,伪双口RAM使用的资源相对较少,因为它只需要保证读写操作不会同时发生。

‌**True Dual-port RAM(真双口RAM)**‌则允许两个端口同时进行读写操作。这意味着两个端口都可以独立地进行读或写操作,或者一个端口进行读操作时,另一个端口可以进行写操作。这种设计提供了更高的数据吞吐量和更快的处理速度,因为它允许数据在两个端口之间并行处理。然而,这种设计也增加了设计的复杂性,因为需要确保两个端口的读写操作不会发生冲突。在资源使用方面,真双口RAM使用的资源是伪双口RAM的两倍,因为它需要支持两个端口同时进行读写操作。

总的来说,伪双口RAM和真双口RAM的主要区别在于读写端口的独立性和资源使用。伪双口RAM虽然资源使用较少,但读写操作不能同时进行;而真双口RAM虽然资源使用较多,但允许两个端口同时进行读写操作,提供了更高的数据吞吐量和更快的处理速度‌。

PORT界面

1、写数据宽度设置;

2、读数据宽度设置;

3、写数据深度设置;

4、读数据深度结合前面1、2、3的设置自动生成深度;

5、写有效过程中数据输出模式选择,时序如下:

(1)写优先级

数据实时跟新新写入的数据;

(2)读优先级

数据显示之前的数据,新写入的数据没有实时更新;

(3)写数据有效时输出数据不发生变化

在写入过程中,数据输出不变化。

显示设计应用中一般对写入的新数据不会要求实时输出的值,所以一般场景下选择什么模式输出并不影响。

6、读写使能,可以选择一直使能(always enable),在写模式下ENA和WEA同时为1时写有效,读模式下ENB为1,读数据有效。

7、添加寄存器输出,都是为了提高BRAM的运行频率或者改善时序的(当然也增加了延迟);

(1)Primitives Output Register ,使用BRAM内部的寄存器打拍输出

(2)Primitives Output Register ,使用SLICE的寄存器打拍输出

(3)SoftECC Input Register ,当使用软ECC的时候,用SLICE的寄存器打拍。

(4)REGCEA,当使用Primitives Output Register时,可以用REGCEA 来使能/去使能相应的输出。

一般情况下时序不紧张的情况下可以不做打拍延时,最终数据输出延时周期可在SUMMARY里看到,如下图所示:

8、RSTA Pin ,BRAM复位,高有效

9、Output Reset Value ,复位时,输出的值;

另外选择复位后还有复位的设置,如下图所示:

Reset Prority ,复位优先级。它的选项有CE 和 SR 。当我们选择CE的时候,只有ENA为高时,RSTA复位才生效。当我们选择SR时,无论ENA是高是低,RSTA复位都会生效,如下图所示:

CE模式下复位:

SE模式下复位:

Other Options

1、给BRAM赋予初值,需要用到COE文件,COE的格式如下:

COE文件可以通过VIVADO创建,选择load init file并点击edit,如下图所示:

BRAM的基础介绍就到这里,有疑问欢迎留言

相关推荐
ZxsLoves9 小时前
【【Systemverilog学习参考 简单的加法器验证-含覆盖率】】
学习·fpga开发
Ronin-Lotus11 小时前
嵌入式硬件篇---数字电子技术中的触发器
嵌入式硬件·fpga开发·触发器·数字电子技术·上位机知识
ehiway1 天前
FPGA+GPU+CPU国产化人工智能平台
人工智能·fpga开发·硬件工程·国产化
蓑衣客VS索尼克1 天前
什么是逻辑分析仪?
arm开发·人工智能·fpga开发
{⌐■_■}2 天前
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
大数据·git·elasticsearch·golang·iphone·ip·etcd
啄缘之间2 天前
4.6 学习UVM中的“report_phase“,将其应用到具体案例分为几步?
学习·verilog·uvm·sv
Terasic友晶科技2 天前
第29篇 基于ARM A9处理器用C语言实现中断<五>
c语言·fpga开发·定时器中断
9527华安2 天前
FPGA实现GTY光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
fpga开发·音视频·aurora·gty·usb3.0·ft601
博览鸿蒙2 天前
FPGA开发要学些什么?如何快速入门?
fpga开发
@晓凡2 天前
FPGA中利用fifo时钟域转换---慢时钟域转快时钟域
fpga开发