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

article/2025/10/9 12:21:21

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

  RAM分为BRAM(Block RAMs)和DRAM(Distributed RAM),即块RAM与分布式RAM,这两个差别在于BRAM是FPGA上固有的一些存储资源(针对不同型号的FPGA,其存储资源大小会有差别),而DRAM则是由LUT组合而成的。所以在数据量较大的情况下,一般使用BRAM,尽量避免使用DRAM,导致LUT资源的浪费。
  以Vivado平台为例,如果不指定综合为BRAM还是DRAM,则Vivado会根据RAM的大小自动判断综合为BRAM还是DRAM。
  参考博客《单端口RAM设计》中的单端口RAM代码,如下。

`timescale 1ns / 1psmodule single_port_ram (
clk         , // Clock Input
address     , // Address Input
data        , // Data bi-directional
cs          , // Chip Select
we          , // Write Enable/Read Enable
oe            // Output Enable
); parameter DATA_WIDTH = 8 ;
parameter ADDR_WIDTH = 4 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;//--------------Input Ports----------------------- 
input                  clk         ;
input [ADDR_WIDTH-1:0] address     ;
input                  cs          ;
input                  we          ;
input                  oe          ; //--------------Inout Ports----------------------- 
inout [DATA_WIDTH-1:0]  data       ;//--------------Internal variables---------------- 
reg [DATA_WIDTH-1:0] data_out ;
//(*ram_style = "block"*) reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];
reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];
reg                  oe_r;//initialization// synopsys_translate_off
integer i;
initial begin//$readmemb("F:/IP_core/Single Port RAM/SIM/single_port_rom_init.txt", mem);for(i=0; i < RAM_DEPTH; i = i + 1) beginmem[i] = 8'h00;end
end
// synopsys_translate_on//--------------Code Starts Here------------------ // Tri-State Buffer control 
// output : When we = 0, oe = 1, cs = 1
assign data = (cs && oe && !we) ? data_out : 8'bz; // Memory Write Block 
// Write Operation : When we = 1, cs = 1
always @ (posedge clk)
begin : MEM_WRITEif ( cs && we ) beginmem[address] <= data;end
end// Memory Read Block 
// Read Operation : When we = 0, oe = 1, cs = 1
always @ (posedge clk)
begin : MEM_READif (cs && !we && oe) begindata_out <= mem[address];
/*     oe_r <= 1;end else beginoe_r <= 0; */end
endendmodule // End of Module ram_sp_sr_sw

  对该代码进行综合,可以看到资源使用报告如下。可以看到这里根据RAM的大小自动综合成DRAM(LUTRAM)。

在这里插入图片描述
  于是,参考Xilinx Template给出模板(或者在Xilinx官方文档UG901中也可查看),指定将RAM综合为BRAM,如下图所示。

在这里插入图片描述

  在寄存器前面加上语句: (*ram_style=“block”*),即

	reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1]; //修改前(*ram_style = "block"*) reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1]; //修改后

  再进行综合,查看资源使用报告,可见此时我们编写的单端口RAM已经被综合成了BRAM。
在这里插入图片描述
注意:这里由于所设计的RAM不大,所以在不指定RAM的类型时会自动综合成了DRAM,但是在RAM的存储空间较大时,会自动综合成BRAM,可以通过在前面加入语句 (*ram_style=“distributed”*)指定综合为DRAM。

参考资料
1、FPGA单端口RAM的设计(同步读、同步写)
2、UG901(Xilinx官方设计文档)


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

相关文章

web测试与app测试的区别

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

APP测试与WEB测试

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

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

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

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

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

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

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

web测试的基本流程

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

Web端测试常用方法

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

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

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

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

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

【转载】 web项目测试

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

Web端测试方法

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

Redis集群 关闭和重启

1、创建好的redis集群&#xff0c;一下是正常运行的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增量备份模式呢&#xff1f; 解决方法: 1、登录到redis 2、在线修改AOF开关 3、查看数据 事情是这样的... 今天&#xff0c;跑…

redis集群 服务器重启测试

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

启动redis

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

Redis集群的关闭、启动、重启等相关指令

目录 关闭 启动 重启 (保留原有集群的)重启 (删除原有集群的)重启 集群相关指令 查看集群相关指令 查看集群状态信息 查看集群节点信息 关闭&#xff1a; 方式一&#xff1a;进入redis后&#xff0c;使用SHUTDOWN指令或SHUTDOWN SAVE指令或SHUTDOWN NOSAVE指令。 方式二(不…

docker-redis一直重启

现象 查看该容器的日志 docker logs f3be1896ecd8结论 当前mongo-redis/log下面没有redis.log 文件导致读取失败 解决方案 在mongo-redis/log目录下新建redis.log文件 遗留问题 测试发现在使用docker-compose up -d后会生成redis.log 删除当前redis.log&#xff0c;重启容…

Redis重启

1、启动redis 服务 redis-server所在目录 redis.conf文件路径 找到redis-cli所在目录&#xff0c;输入&#xff1a; ./redis-cli 查看服务是否启动成功 2、关闭redis 服务&#xff1a; ./redis-server shutdown

linux下重启redis的方法

导语&#xff1a; 已经将redis加入到etc下&#xff0c;此时服务器启动redis也启动&#xff0c;但是却连不上redis&#xff0c;所有有了以下的过程。 (学习视频分享&#xff1a;redis视频教程) 查看redis 状态&#xff1a;systemctl status redis ● redis.service - redis-…

前端H5面试题Js:JavaScript字符串的常用方法有哪些?

一、前言&#xff1a; 可将字符串常用的操作方法归纳为增、删、改、查&#xff0c;需要知道字符串的特点是一旦创建了&#xff0c;就不可变。 二、增 增的意思并不是说直接增添内容&#xff0c;而是创建字符串的一个副本&#xff0c;再进行操作&#xff0c;除了常用以及${}进行…