为什么36KbRAM会配置为32K×1,少的那4Kb去哪了?

首先我们需要了解BRAM的相关知识,可以参考下面两篇文章:

Xinlinx FPGA内的存储器BRAM全解-CSDN博客

为何有时简单双口RAM是真双口RAM资源的一半-CSDN博客

本问题的背景是:

每个36Kb块RAM也可以配置成深度×宽度为64K × 1(当与相邻的36KB块RAM级联时)、32K × 116K × 28K × 4、4K × 9、2K × 18、1K × 36或512 × 72的简单双端口模式。
每个18Kb块RAM可以配置成深度×宽度为16K × 18K × 24K × 4、2K × 9、1K × 18或512 × 36的简单双端口模式。

一、RAMB36E1结构

首先看下RAMB36E1结构:

在这里插入图片描述

对其中部分信号给出下面的说明:

信号名描述
DIADI[31:0]端口A数据输入
DIPADIP[3:0]端口A奇偶校验输入
DIBDI[31:0]端口B数据输入
DIPBDIP[3:0]端口B奇偶校验输入
ADDRARDADDR [15:0]A通道地址
ADDRBRDADDR [15:0]B通道地址
WEA[3:0]端口A字节写使能,简单双端口RAM中不启用
WEBWE[7:0]端口B字节写使能,简单双端口RAM中启用

二、原因分析

地址总线选择要读或写的存储单元。在SDP(单端口)模式下,ADDRA端口为RDADDR,** ADDRB端口为WRADDR**。接口的数据位宽度决定了单个RAMB18E1或RAMB36E1所需的地址总线宽度。

在这里插入图片描述

在这里插入图片描述

我们以RAMB36E1举例:

对于36Kb的RAM,之所以会造成配置成32K × 116K × 28K × 4不满足36Kb的情况,是因为地址总线和位宽决定了这一关系。

36Kb如果以1bit位宽配置,那么深度为36K,而2的16次方为65536,2的15次方为32768,36K处于其中,因此Xinlinx选择采用15bit位宽的地址,也就是地址深度为32768=32K。我们反向推算一下:如果将36Kb的容量配置到深度为32768的RAM中,每个地址对应的数据位宽为36k/32768=1.125,因此舍弃掉后面的0.125,只保留了1bit。

而36K/16384=2.25,36K/8192=4.5,36K/4096=9,知道地址宽度为12,深度为4096时才使得所有空间被完全利用。这也就是为什么在位宽为9之前的三种情况里会出现不满足36Kb的情况。

但是感觉也可以在位宽为1bit的时候,将数据配置满整个RAMB36E1,只是地址不以2的15次方为截至地址,可能Xinlinx这样做有别的什么原因。

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

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

相关文章

淘宝新店没有流量和访客怎么办

淘宝新店没有流量和访客时,可以采取以下措施来提升店铺的流量和吸引更多的访客: 3an推客是给商家提供的营销工具,3an推客CPS推广模式由商家自主设置佣金比例,以及设置商品优惠券,激励推广者去帮助商家推广商品链接&…

SVG 绘制微信订阅号icon

效果 代码 <!DOCTYPE html> <html> <body><svg xmlns"http://www.w3.org/2000/svg" version"1.1" width"600" height"600"><rect x"0" y"0" rx"0" ry"0" width&…

JavaEE 初阶篇-深入了解 UDP 通信与 TCP 通信(综合案例:实现 TCP 通信群聊)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 UDP 通信 1.1 DatagramSocket 类 1.2 DatagramPacket 类 1.3 实现 UDP 通信&#xff08;一发一收&#xff09; 1.3.1 客户端的开发 1.3.2 服务端的开发 1.4 实现 …

【信息系统项目管理师知识点速记】整合管理:实施整体变更控制

8.8 实施整体变更控制 1. 定义: 审查所有变更请求,批准变更,管理对可交付成果、项目文件和项目管理计划的变更,并对变更处理结果进行沟通的过程。 2. 重要性: 项目经理对整体变更控制过程负最终责任。变更请求可能影响项目范围、产品范围、项目管理计划或项目文件的任何…

Arm功耗管理精讲与实战

安全之安全(security)博客目录导读 思考 1、为什么要功耗管理&#xff1f;SOC架构中功耗管理示例&#xff1f;功耗管理挑战&#xff1f; 2、从单核->多核->big.LITTLE->DynamIQ&#xff0c;功耗管理架构演进? 3、什么是电压域&#xff1f;什么是电源域&#xff1f…

企微SCRM私域运营:构建高效客户关系管理的关键路径

随着市场竞争的日益激烈&#xff0c;客户关系管理&#xff08;CRM&#xff09;已成为企业提升竞争力的关键所在。而企业微信&#xff08;企微&#xff09;作为连接企业与客户的桥梁&#xff0c;其强大的SCRM&#xff08;社会化客户关系管理&#xff09;功能为企业提供了私域运营…

Centos 7.9 一键安装 Oracle 12CR2(240116)单机 PDB

前言 Oracle 一键安装脚本&#xff0c;演示 CentOS7.9 一键安装 Oracle 12CR2 单机PDB&#xff08;240116&#xff09;过程&#xff08;全程无需人工干预&#xff09;。&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚…

[论文笔记] Pai-megatron 细节解读之self.jitter_noise参数 (防止过拟合)

if self.training and self.jitter_noise > 0:hidden_states *= torch.empty_like(hidden_states).uniform_(1.0 - self.jitter_noise, 1.0 + self.jitter_noise) 请你讲一下这段代码 对 hidden_states 添加的 self.jitter_noise 抖动,是一种减轻大模型过拟合策略。…

C++高级特性:异常概念与处理机制(十四)

1、异常的基本概念 异常&#xff1a;是指在程序运行的过程中发生的一些异常事件&#xff08;如&#xff1a;除数为0&#xff0c;数组下标越界&#xff0c;栈溢出&#xff0c;访问非法内存等&#xff09; C的异常机制相比C语言的异常处理&#xff1a; 函数的返回值可以忽略&…

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-01-软件架构演化概述

文章目录 1. 演化的重要性2. 架构演化示例 教材中&#xff0c;本节名为&#xff1a;“软件架构演化和定义的关系” 1. 演化的重要性 演化目的&#xff1a;维持软件架构自身的有用性 为什么说&#xff0c;软件架构是演化来的&#xff0c;而不是设计来的&#xff1f; 软件架构的…

【LAMMPS学习】八、基础知识(4.3)TIP3P水模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

Python 基础 (Pandas):Pandas 入门

1. 官方文档 API reference — pandas 2.2.2 documentation 2. 准备知识&#xff1a;Pandas 数据结构 Series & DataFrame 2.1 Series 2.1.1 创建 Series 类型数据 一个 Series 对象包含两部分&#xff1a;值序列、标识符序列。可通过 .values (返回 NumPy ndarry 类型…

Fisher 准则分类

目录 一、什么是Fisher 准则 二、具体实例 三、代码实现 四、结果 一、什么是Fisher 准则 Fisher准则&#xff0c;即Fisher判别准则&#xff08;Fisher Discriminant Criterion&#xff09;&#xff0c;是统计学和机器学习中常用的一种分类方法&#xff0c;由统计学家罗纳…

Git使用说明,持续更新

Git使用说明 git branch 用于管理分支&#xff0c;包括查看、创建、删除、重命名分支等操作。 git branch: 列出本地仓库中的所有分支&#xff0c;并标识当前所在的分支。git branch <branch-name>: 创建一个新分支&#xff0c;名称为 <branch-name>。git branc…

C语言指针进阶:各类型指针变量详解

目录 1. 字符指针变量2. 数组指针变量2.1 什么是数组指针变量2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 代码分析4.3.1 typedef 关键字 5. 函数指针数组6. 转移表 正文开始。 1. 字符指针变量 我们可以…

【WP】猿人学12_入门级js

https://match.yuanrenxue.cn/match/12 Fiddler分析发现&#xff0c;所有请求只是 page已经 m不一样 这个m看起来就很像 base64&#xff0c;解码发现确实如此 下面直接构建Python代码&#xff1a; import base64import requestsdef base64_encode_string(input_string):try:#…

搞嵌入式到底属于程序员吗?

搞嵌入式到底属不属于程序员呢&#xff1f;毫无疑问&#xff0c;当然算啊&#xff01;而且我十分赞同另一位朋友所说的&#xff1a;嵌入式程序员是难得的全栈型程序员。尽管嵌入式领域方向众多且繁杂&#xff0c;但他们同样也是会写代码的程序员。 嵌入式行业主要分为硬件和软…

input 只能输入正数并且只能保留3位小数且开头不能为0,并且表单多字段使用

checker.js export default {isNumber : function (checkVal){var reg /^-?[1-9][0-9]?.?[0-9]*$/;return reg.test(checkVal);},/*** description 小数点前后位数限制* “当前输入的值”、“小数点前限制的位数”、“小数点后限制的位数”*/limitByPoint: function(val, l…

LeetCode-219. 存在重复元素 II

题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&…

【写一个简单的service and client(C++)例子——services】

文章目录 1、概要2、引言3、服务开始的地方及步骤3.1 创建工作空间3.2 创建功能包3.3 更新package.xml3.4 编写service 节点3.4.1 添加可执行文件3.4.2 添加 install&#xff08;TARGETS…&#xff09; 部分 3.5 编写client 节点3.5.1 添加可执行文件 3.6 编译运行3.7 运行结果…