Xilinx BRAM IP介绍

2023-11-16

BRAM简介

BRAM,即Block RAM,是FPGA中一种重要的存储资源,另一种常见的存储资源是DRAM(Distributed RAM),Distributed RAM 经过综合工具综合,通过多级 LUT 查找表资源级联实现,因此会消耗较多的逻辑资源。
而是BRAM是FPGA 厂商在逻辑资源之外,给 FPGA 加入的专用 RAM 块资源。相比分布式 RAM,BRAM 块内部以及与逻辑资源之间经过特意的布局布线,使 BRAM 具有很高的运行速度,确定的低延迟周期。
BRAM的容量为36Kb,且可当作两个独立的18Kb BRAM使用。对于一个36Kb的BRAM,其最能达到的最大位宽为72bit。BRAM 的初始值是可以设定的,无论 BRAM 是单端口、简单双端口还是真双端口都可以通过 COE 文件设定其初始值

BRAM类型

总体上 Memory 按照类型可以分为RAMROM,ROM 预置了数据,在使用中只能被读取,不能写入,ROM 实现的物理结构与 RAM 类似,相当于一个只能读取的 ”RAM”。一般用于存放一些固定的参数,在使用过程中只能读取,不需要也不能修改。
按照端口的数量有单端口以及双端口之分,双端口来自于同时对 RAM 进行读写的需求。一边将等待处理的数据从端口 A 输入 RAM,另一端口 B 读取数据进行处理,可以实现高效的数据流式处理,尤其适用于图像的行缓存处理。双端口 RAM 相较于 FIFO ,有可以映射地址以及多次重复利用数据的优势。在新的数据写入之前,可以多次从一指定位置读取旧数据。
此外,双端口 RAM 又可以分为 Simple/Ture 双端口

三种读写模式

BRAM有三种读写模式,分别是Write First,Read FirstNo Change

写优先

在这里插入图片描述
上图为Write_First的时序图,在红线以前,WE=0 ,即端口做的是读操作。在CLK上升沿后,地址aa里的数据打到DO(MEM(aa))。在红线后,WE=1,即端口做的是写操作。在CLK上升沿后,DI(1111)的数据存入到地址bb里,与此同时输入的数据DI直接输出到DO,原先存在bb里的数据还没出来就被冲掉了。

读优先

在这里插入图片描述

上图为Read_First的时序图,在红线以前,WE=0 ,即端口做的是读操作。在CLK上升沿后,地址aa里的数据打到DO。在红线后,WE=1,即端口做的是写操作。在CLK上升沿后,DI的数据存入到地址bb里,与此同时原先存放在地址bb的数据输出到DO。该模式以消耗更多 BRAM 资源的前提下,保证每次读操作读取到的都是先前的数据。输入数据会首先被缓存,与此同时在输出总线上输出先前值。

No change

在这里插入图片描述
上图是NO_CHANGE的时序图,在红线以前,WE=0 ,即端口做的是读操作。在CLK上升沿后,地址aa里的数据打到DO。在红线后,WE=1,即端口做的是写操作。在CLK上升沿后,DI的数据存入到地址bb里,与此同时输出DO的数据保持不变(依旧是地址aa里的数据)。

总线支持

Xilinx的BRAM支持两种形式的总线:NativeAXI

输出寄存

另外重要的一点是配置 RAM 的输出寄存器。共有两个选项 Primitive / Core Output Register。这两个选项可以各自选择,都是为输出端添加一级寄存器,不同在于前者在 Port 内部添加寄存器,而后者是在 Port 外部添加寄存器。每一级的寄存器都会增加一个周期的读延迟,从初始的 1 周期读延迟,最高可以增加到 3 周期读延迟。
添加寄存器虽然会增加延迟周期数,因为输出信号经过了打拍,但其优点是可以改善时序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xilinx BRAM IP介绍 的相关文章

  • 在vivado中使用tcl脚本(UG894)

    本文源自UG894 主要介绍如何在vivado中使用tcl脚本 1 vivado中如何获取tcl help vivado中任何自带的命令都可以通过 help 获取帮助信息 也可以直接输入 help 取得vivado命令合集 并通过 help
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)

    目录 一 验证与门 二 验证与非门 三 验证二选一数据选择器 四 验证2 4译码器 五 验证半加器 六 验证全加器 0 初始化定义 1 第一个半加器 2 第二个半加器 3 得到最终进位Co 代码 0决定与 1决定或 一 验证与门 只要有一个
  • Verilog之assign

    Verilog中的关键词assign主要用于如下两个地方 数据流建模 用于数据流建模的显示连续赋值语句语法格式如下
  • Verilog的基础知识

    Verilog的基本介绍 硬件描述语言发展至今已有二十多年历史 当今业界的标准中 IEEE标准 主要有VHDL和Verilog HDL 这两种硬件描述语言 一个设计往往从系统级设计开始 把系统划分成几个大的基本的功能模块 每个功能模块再按一
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d
  • xilinx xdma PCIe中断bug

    xilinx xdma PCIe中断存在bug bug1 此中断虽然是msi或者msx中断 但是不中断cpu bug2 此中断不是边沿中断 而是电平中断 在驱动层需要不断地轮训查询中断事件 bug3 此中断持续时间必须长 而且在收到中断应答
  • [从零开始学习FPGA编程-38]:进阶篇 -语法-函数与任务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是函数Function 1 1 什么是函数 1 2 函
  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • PyOpenCL 中的时间测量

    我正在 FPGA 和 GPU 中使用 PyOpenCL 运行内核 为了测量执行所需的时间 我使用 t1 time event mykernel queue c width c height block size block size d c
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更
  • 无符号和 std_logic_vector 之间的区别

    谁能告诉我以下书面陈述之间的区别 signal A unsigned 3 downto 0 signal B std logic vector 3 downto 0 Both std logic vector and unsigned ar

随机推荐

  • QCC300x笔记(5) -- 外部Flash的读写操作

    哈喽大家好 这是该系列博文的第五篇 篇 lt lt 系列博文索引 快速通道 gt 1 QCC300X 外部Flash的读写 QCC300x是使用外部Flash片子 使用外部flash的好处就是成本下来了 大家都知道 CSR的片子一直是很贵的
  • extundelete工具恢复rm -rf 删除的目录(ext4、ext3)

    extundelete工具恢复rm rf 删除的目录 ext4 ext3grep工具只能用于恢复ext3文件系统下删除的文件 对于ext4文件系统 可以使用extundelete工具 使用的方法类似ext3grep ext3grep 仅对
  • AttributeError: ‘_SingleProcessDataLoaderIter‘ object has no attribute ‘next‘

    由于pytorch版本不同 函数用法不同 改为 即可解决
  • 抽象类和接口的区别,以及使用场景?

    抽象类 接口 抽象类和接口区别 Java 8中关于接口的改进 接口中的默认方法 抽象类和接口使用场景 抽象类是对一种事物的抽象 即对类抽象 而接口是对行为的抽象 抽象类是对整个类整体进行抽象 包括属性 行为 但是接口却是对类局部 行为 进行
  • java: 找不到符号 符号:类xxx位置: 程序包com.xxx.xxx.xxx.xxx

    1 问题 项目里有这个包但编译时报找不到这个包的错误 2 解决办法 在报错的项目里打开命令行窗口 在命令行窗口里输入mvn clean 等重新加载完然后重新编译项目即可
  • mint-ui引用iconfont图标

    mint ui引用iconfont图标 mint ui作为一种基于 Vue js 的移动端组件库 在移动端前端开发中备受欢迎 其特性就不多说了 想了解的博友可上mint ui官网自行了解 但是 mint ui提供的字体图标 通过查看mint
  • 深度学习实战1-(keras框架)企业数据分析与预测

    大家好 我是微学AI 今天给大家带来深度学习框架keras的实战项目 用于基本的企业数据分析 预测企业净利润情况 并利用灰色预测函数GM11进行预测模型 我们拿到企业数据 这里参数抽象成x1 x9 y表示净利润 数据如下 下面我们开始编写代
  • 云服务 pytorch 使用错误总结

    云服务 pytorch 使用错误总结 数据加载 Dataloader 使用Dataloader加载文件 设置num workers 1 batch size gt 1或者num workers gt 1时 会报错总线错误bus error
  • popen 使用方法

    popen 可以执行shell命令 并读取此命令的返回值 popen 函数通过创建一个管道 调用fork 产生一个子进程 执行一个shell以运行命令来开启一个进程 可以通过这个管道执行标准输入输出操作 这个管道必须由pclose 函数关闭
  • 那些30几岁的程序员都去哪了

    三十而立 简单四个字 鞭策着多少年轻人 不成想 三十已过 变成了三十而已 程序员对三十这个词比较敏感 之前不少文章也都提及过 有天 忽然冒出来一个问题 90后慢慢变成了中坚力量 曾经的80后程序员一代在公司里慢慢变少了 这些人去哪了呢 下面
  • 2023逆向分析代码渗透测试flag0071解析(超详细)

    PS 这里没有找到题目所以我直接直接做到最后一步把flag即可 1 将flag0071使用IDA打开 使用shift f12可以看到wrong和right的字符串 2 双击到data段按x交叉引用即可到达main主函数 3 程序逻辑很清晰
  • 疯壳Android嵌入式Linux平板开发教程4-3LCD驱动实验

    详情地址 https fengke club GeekMart views offline android 购买链接 https fengke club GeekMart su fHnaDyD1o jsp 视频地址 https fengke
  • win10下的wsl真是太好用了

    生命在于折腾 前段时间使用的是linuxmint 这个系统很好 但无奈抵挡不住win10的诱惑 其实主要的原因是玩游戏 搞了几天wine没搞好 重新加入win10的怀抱 在msdn上下载了原版光盘镜像 又经过了漫长的更新 终于进入了win1
  • tnsping遇到TNS-12546: TNS: 权限被拒绝

    从客户端tnsping 一台数据库 报错 TNS 12537 TNS 连接关闭 奇怪 服务器端可以tnsping通 也可以正常访问数据库 listener状态也正常 为什么客户端连接不上 查了一下原因 为sqlnet ora文件做了Vali
  • <Linux开发>驱动开发 -之-基于pinctrl/gpio子系统的LED驱动

    Linux开发 驱动开发 之 基于pinctrl gpio子系统的LED驱动 交叉编译环境搭建 Linux开发 linux开发工具 之 交叉编译环境搭建 uboot移植可参考以下 Linux开发 之 系统移植 uboot移植过程详细记录 第
  • [633]pyppeteer驱动浏览器

    当使用selenium去某宝或其他网站进行爬虫或者模拟登陆时 会出现滑动验证码 并且无论是用ActionChains滑还是手动滑 都会很委婉的告诉你 哎呀网络错误 请刷新 等等 why 爬虫都会碰到某些网站刚刚打开页面就被判定为 非人类行为
  • [WinError 10061] 由于目标计算机积极拒绝,无法连接。‘))‘: /simple/scikit-learn/

    WinError 10061 由于目标计算机积极拒绝 无法连接 simple scikit learn 康康下面的解决办法吧 首先按键盘快捷方式win R 打开运行输入框 输入regedit命令 会弹出这个页面 按照这个路径找 HKEY C
  • 【华为OD机试】GPU算力 (C++ Python Java)2023 B卷

    题目解析 为了充分发挥GPU算力 需要尽可能多的将任务交给GPU执行 现在有一个任务数组 数组元素表示在这1秒内新增的任务个数且每秒都有新增任务 假设GPU最多一次执行n个任务 一次执行耗时1秒 在保证GPU不空闲情况下 最少需要多长时间执
  • python3(六)监督学习

    监督学习 目录 1 监督学习 2 分类 2 1 人体运动信息评级实例 2 2 基本分类模型 2 3 运动状态程序 3 回归 3 1 线性回归 正文 回到顶部 1 监督学习 利用一组带标签的数据 学习从输入到输出的
  • Xilinx BRAM IP介绍

    BRAM IP核介绍 BRAM简介 BRAM类型 三种读写模式 写优先 读优先 No change 总线支持 输出寄存 BRAM简介 BRAM 即Block RAM 是FPGA中一种重要的存储资源 另一种常见的存储资源是DRAM Distr