BRAM底层原理详细解释(1)

目录

一、原语

二、端口简述

2.1 端口简介

2.2 SDP端口映射

三、端口信号含义补充说明

3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE:

3.2 地址总线—ADDRARDADDR and ADDRBWRADDR

3.3 数据总线—DIADI, DIPADIP, DIBDI, and DIPBDIP & DOADO, DOPADOP, DOBDO, and DOPBDOP

3.4 级联—CASCADEINA, CASCADEINB, CASCADEOUTA, and CASCADEOUTB


        在阅读本文之前,建议对BRAM有一个基本的了解,可以先阅读:

FPGA原理与结构(8)——块RAM(Block RAM,BRAM)icon-default.png?t=N7T8https://ztzhang.blog.csdn.net/article/details/132253916

一、原语

        在xilinx 7 系列的FPGA中,有2个BRAM的原语:RAMB18E1,RAMB36E1。这两个就是所有BRAM配置的基本块,其他的BRAM原语和宏模块都是基于这两个原语的。

        我们以RAMB36E1为例,下图展示了这个原语对应模块的具体结构:

二、端口简述

2.1 端口简介

        RAMB36E1的输入输出端口含义如下:

端口名称描述在SDP模式下的映射
DIADI[31:0]端口A的输入数据总线详见下文SDP端口映射
DIPADIP[3:0]
端口A的输入校验总线详见下文SDP端口映射
DIBDI[31:0]端口B的输入数据总线详见下文SDP端口映射
DIPBDIP[3:0]
端口B的输入校验总线详见下文SDP端口映射
ADDRARDADDR [15:0]
端口A的地址总线读地址总线
ADDRBWRADDR[15:0]
端口B的地址总线写地址总线
WEA[3:0]
端口A的字节位写使能不使用
WEBWE[7:0]
端口B的字节位写使能字节位写使能
ENARDEN
端口A使能信号写使能
ENBWREN
端口B使能信号读使能
RSTREGARSTREG
同步输出寄存器A置位/复位同步输出寄存器置位/复位
RSTREGB
同步输出寄存器B置位/复位
RSTRAMARSTRAM
同步输出锁存器A置位/复位同步输出锁存器置位/复位
RSTRAMB
同步输出锁存器B置位/复位
CLKARDCLK
端口A时钟输入读时钟
CLKBWRCLK
端口B时钟输入写时钟
REGCEAREGCE
端口A输出寄存器时钟使能输出寄存器时钟使能
REGCEB
端口B输出寄存器时钟使能
CASCADEINA
端口A级联输入不使用
CASCADEINB
端口B级联输入不使用
CASCADEOUTA
端口A级联输出不使用
CASCADEOUTB
端口B级联输出不使用
DOADO[31:0]
端口A输出数据总线详见下文SDP端口映射
DOPADOP[3:0]
端口A输出校验总线详见下文SDP端口映射
DOBDO[31:0]
端口B输出数据总线详见下文SDP端口映射
DOPBDOP[3:0]
端口B输出校验总线详见下文SDP端口映射

2.2 SDP端口映射

三、端口信号含义补充说明

3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE:

        字节写使能信号,表示了写操作时的哪个(或多个)字节是有效的,这个信号的极性不可配置(高有效)。

        同时,写使能信号(WE)经常和使能信号(EN)配合使用。使能信号(EN)有效的情况下,写使能(WE)有效,进行写操作;写使能(WE)无效,进行读操作。这是针对单个端口而言的,对于单个端口,不可能同时发生读写,但是对一个BRAM的两个端口,就可能会发生读写冲突,因此需要考虑工作模式。

        工作模式:根据工作模式(WRITE_FIRST, READ_FIRST, NO_CHANGE),输出锁存器(output latches)将被加载或不加载。这决定了在写操作中数据是如何被处理的:

  • WRITE_FIRST:写操作首先发生,之后可能跟着一个读取操作。
  • READ_FIRST:首先读取当前存储器内容,然后写入新的数据。
  • NO_CHANGE:如果没有写入操作,则输出保持不变。

3.2 地址总线—ADDRARDADDR and ADDRBWRADDR

        对于RAMB18E1来说,地址总线的设置如下:

        对于RAMB36E1来说,地址总线的设置如下:

        值得注意的是,我们以RAMB18E1为例,它的地址总线的位宽为14bit,当端口的宽度被设置为1,地址总线位宽为14。这时,地址深度可以达到2^{14} = 16384 = 16Kb(K代表1024)。这就解释了为什么一个18Kb的BRAM根据深度和位宽的不同,可以配置成如下形式(深度×位宽):16K x 1, 8K x2 , 4K x 4, 2K x 9, 1K x 18 or 512 x 36。这里的16K × 1 ≠ 18K。同理,可以解释其他一系列的情况。

3.3 数据总线—DIADI, DIPADIP, DIBDI, and DIPBDIP & DOADO, DOPADOP, DOBDO, and DOPBDOP

        我们当就一个端口来看,例如A端口,和数据有关的总线总共有4条,分别是DIADI,DIPADIP,DOPDO,DOPADOP。这又可以分成:

  • 输入:DIADI,DIPADIP
  • 输出:DOPDO,DOPADOP

        单独就输入进行分析,DIADI[31:0]代表的是常规数据输入总线,DIPADIP[3:0]代表的是奇偶校验数据输入总线。但是其实,DIPADIP[3:0]是可以灵活配置实现的,它可以存储奇偶校验/纠错位或作为额外的数据位。这也就是为什么在使用RAMB36E1时,输入位宽可以被配置为36bit,而不是DIADI的32bit。

        这样做有很多的好处:

  • 数据和校验位的分离:通过为数据位和奇偶校验位(或错误校正位)提供独立的总线,设计可以更灵活地处理数据和校验信息。这对于某些需要高数据完整性和错误检测能力的应用尤其重要。
  • 合并数据总线和校验总线:在一些设计中,常规数据总线与校验位总线可以合并,这样做可以简化设计并可能减少所需的硬件资源。无论是独立的还是合并的配置,读/写和存储操作对所有位来说都是相同的,包括奇偶校验位。
  • 灵活性和可靠性:提供不同的数据宽度和校验配置增加了设计的灵活性,使设计师能够根据具体的应用需求和性能目标来优化存储器的结构。同时,包含奇偶校验或错误校正位的设计能够提高数据传输和存储过程中的可靠性。

3.4 级联—CASCADEINA, CASCADEINB, CASCADEOUTA, and CASCADEOUTB

        使用 CASCADEIN/CASCADEOUT 引脚将两个块 RAM (Block RAM,BRAM)连接起来,形成 64K x 1 模式,是一种扩展存储容量和功能的方法。这种配置允许两个BRAM单元串联工作,通过将一个BRAM的CASCADEOUT引脚连接到另一个BRAM的CASCADEIN引脚上实现。在这种模式下,上面的BRAM单元接收来自下面BRAM单元的数据输出,使得两个BRAM单元可以作为一个更大的存储器单元来使用。

        当不使用级联模式时,CASCADEIN/CASCADEOUT引脚不需要连接。这种配置提供了灵活性,允许设计师根据需要启用或禁用级联功能。值得注意的是,级联功能仅在双端口(TDP)模式下可用,这意味着每个BRAM单元可以独立地支持读写操作,使得级联配置在处理复杂数据结构或增加存储容量时非常有用。

        级联BRAM提供了一种有效的方法来增加FPGA设计中的存储密度和灵活性,特别是在需要大量存储空间但又希望保持高速数据访问的应用中。通过使用级联技术,设计师可以创建更大、更复杂的存储解决方案,以满足特定的系统需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++初阶】C++入门(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

AI元年,这5款AI写作能为你提供帮助

自从人工智能技术的迅猛发展以来,AI在各个领域都取得了巨大的进步。其中,AI写作工具成为越来越多人关注的焦点。在这个AI元年,小编想向大家分享5款可能对你有帮助的AI写作工具,如果你也想找AI写作相关的工具,那么来看看…

【数据结构基础】之八大排序(C语言实现)

【数据结构基础】之八大排序(C语言实现) 🐧 冒泡排序♈️ 冒泡排序原理及代码实现♈️ 稳定性分析 🐧 选择排序♈️ 选择排序原理及代码实现♈️ 稳定性分析 🐧 插入排序♈️ 插入排序的原理及代码实现♈️ 稳定性分析 &#x1f4…

《单例模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 本章简要说明单例模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案: 单例模式确保一个类只有一个实例,并提供一个全局访问点。优点&…

素数问题 python

# 输出1-100所有质数 import math count 0 for i in range(2, 101):is_prime True # 假设当前数是素数for j in range(2, int(math.sqrt(i))1):if i % j 0:is_prime False # 如果能被整除,不是素数break # 直接中断内层循环if is_prime:count 1print(i)prin…

(附源码)基于Spring Boot和Vue的智能订餐与外卖系统设计与实现

1. 引言 这部分通常包含了研究背景、研究意义、国内外研究现状、本文研究内容以及论文结构安排。 研究背景:介绍当前外卖市场的快速发展,以及智能订餐系统对改善人们生活的影响。研究意义:强调这类系统在现代生活中的作用和开发的创新点。国…

Kubernetes一文上手【手把手系列】

目录 Kubernetes前言部署方式的演变 K8S概述K8S架构Master节点1. API Server2. Etcd3. Controller Manager4. Scheduler Node节点1. kubelet2. kube-proxy3. 容器运行时 组件与插件1. Kubernetes DNS2. Dashboard3. Heapster4. Ingress Controller K8S核心概念PodSerivceNamesp…

CodeSys创建自定义的html5控件

文章目录 背景创建html5control.xml文件控件界面以及逻辑的实现使用的资源安装自定义的html5控件库 背景 查看官方的资料:https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_html5_dev.html 官方的例子:https://forge.codesys.com/…

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库,开发于二十多年前。它提供了一个低级API,允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时,它是首选平台。它可以在…

liunx centos7 下通过yum删除安装已经安装的php

执行下面命令查看php相关的包 rpm -qa | grep php 只需要卸载几个名为common的包即可,其他同版本依赖会被全部删除,删除php71w-common,71w版本的依赖包全部会被删除。 查看php包的命令 rpm -qa | grep php 或 yum list installed | gre…

unity编辑器扩展高级用法

在PropertyDrawer中,您不能使用来自GUILayout或EditorGUILayout的自动布局API,而只能使用来自GUI和EditorGUI的绝对Rect API始终传递相应的起始位置和维度。 你需要 计算显示嵌套内容所需的总高度将此高度添加到public override float GetPropertyHeig…

实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库

随着互联网的迅猛发展,网络爬虫在信息收集、数据分析等领域扮演着重要角色。而在当前的技术环境下,使用TypeScript编写网络爬虫程序成为越来越流行的选择。TypeScript作为JavaScript的超集,通过类型检查和面向对象的特性,提高了代…

uniapp ios端使用fixed定位导致输入时页面滚动简单解决方法

当移动端使用fixed定位自定义nav栏时,安卓端正常固定在可视窗顶部,但是ios端当有input输入,弹出软键盘时,会将nav顶出可视区,因为在ios上,不是相对于浏览器窗口定位的,而是相对于最近的可滚动区…

Vue常用指令介绍

Vue指令&#xff1a; 指令带有前缀 v- 开头&#xff0c;以表示它们是 Vue 提供的特殊属性。 v-text&#xff0c;v-html&#xff1a; html&#xff1a; <div id"ddd"><!-- {{插值表达插入变量&#xff0c;不会覆盖标签体中的内容}}v-text,v-html会覆盖掉标…

Linux :环境基础开发工具

目录: 1. Linux 软件包管理器 yum 1. 什么是软件包 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 2. Linux开发工具 1. Linux编辑器-vim的基本概念 2. vim使用 3. vim的基本操作 4. vim正常模式命令集 5. vim末行模式命令集 6. 简单vim配置 3. Linux编译器-gcc/…

博世全球首个高阶智能驾驶项目量产 ,由腾讯云提供专有云支持

近日&#xff0c;博世全球首个高阶智能驾驶项目——奇瑞星途星纪元项目成功量产。在奇瑞星途星纪元ES最新向用户推送的OTA内容中&#xff0c;NEP高速领航系统正式上线。该系统采用全新人机共驾策略&#xff0c;可实现高速端到端的自动驾驶。 该系统由博世智能驾驶与控制系统事…

常用相似度计算方法总总结

一、欧几里得相似度 1、欧几里得相似度 公式如下所示&#xff1a; 2、自定义代码实现 import numpy as np def EuclideanDistance(x, y):import numpy as npx np.array(x)y np.array(y)return np.sqrt(np.sum(np.square(x-y)))# 示例数据 # 用户1 的A B C D E商品数据 [3.3…

缓存知识回顾

- 缓存的使用场景 系统查询性能较低&#xff0c;且对数据实时性要求不高的 - 两种常见的缓存 本地缓存&#xff1a; java中的Map、List 的确这种方式简单有效&#xff0c;但是带来的弊端就是过于简单&#xff0c;功能也就过于缺乏&#xff0c;而且如果使用不当&#xff0c;将带…

知识管理软件那么多,怎么挑选才适合初创企业?

对于初创企业来说&#xff0c;资源有限&#xff0c;效率显得尤其重要。此时&#xff0c;一个强大的知识管理软件就显得必不可少。它不仅利于信息的录入、查找和共享&#xff0c;还可以帮助团队更好的组织和协作&#xff0c;提高工作效率。那么&#xff0c;在众多的知识管理软件…

SQL-Labs靶场“34-35”关通关教程

君衍. 一、34关 POST单引号宽字节注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 二、35关 GET数字型报错注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程&#xff1a; SQL注入第一课 SQL注入思路基础 SQL无列…