为什么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这样做有别的什么原因。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值