我四处寻找,但似乎无法找到 RAM 中内存条的确切含义。有人说它类似于通道,有人说它类似于 DIMM 插槽,还有人说它只是内存的任意和非标准划分,或者它可能是芯片的细分,每个芯片有许多内存条。
根据我的研究,我倾向于认为最后一个论点是正确的,但是 Bank 的大小是如何确定的呢?此外,他们如何决定一个芯片中可以容纳多少个 Bank,每次读/写只能访问一个 Bank 吗?
如果是这样的话,那么我对内存总线在芯片之间如何分配的理解一定是错误的(64 位数据总线/8 个芯片 = 每个芯片 8 位总线,只使用整个内存总线的 1/8,那么为什么不能同时访问其他芯片来填充总线的其余部分?)
答案1
现代 Intel CPU 上的一致“系统”地址由最初与该地址交错的 CBo LLC 切片控制器发送到正确的主代理(内存控制器)。根据以下条件为地址选择正确的主代理:CBo SAD 交错规则表明它位于 DRAM 地址范围内,并且用于将地址交织到归属代理的地址位在发送时从地址中删除,并且这些位本来应该位于地址的列部分内;然后,归属代理使用该地址通过 TAD 交织规则选择正确的逻辑通道(TAD_DRAM_RULE_0 – 7
对于可配置的 8 个单独范围,它将选择相应的逻辑通道TAD_INTERLEAVE_LIST_0
);然后使用 CHM 逻辑到物理一对一映射寄存器(MC_CHANNEL_MAPPER
)将逻辑通道转换为正确的物理通道,最后使用相应的 SAG 规则()将地址转换为该物理通道上的通道地址MC_SAG_CH0_0
,该规则只是删除了 TAD DRAM 规则中用于交织到通道的位,这些位本来是地址的列部分。得到的地址称为通道地址,其格式为:
rank[z:0], bank group[x:0], bank[1:0], row[y:0], column[9:0], offset[2:0] (y is usually 16/17; x is 0/1, 0 on x16; z is 0/1 for DDR4 UDIMMs; the offset doesn't ever get sent by the controller in a DRAM transaction)
等级、存储组和存储地址引脚选择正确模块上正确等级上的存储组。华硕 GL502VM 游戏笔记本电脑上的 Skylake CPU 每个通道有 4 个芯片选择引脚,每个通道有一个 SO-UDIMM 插槽,并选择 SO-UDIMM 上的等级,但 2 个芯片选择引脚断开连接,这意味着每个 SO-UDIMM 使用芯片选择引脚最多有 2 个封装等级。每个通道还有 2 个存储组选择引脚和 2 个存储地址选择引脚,它们选择等级上的存储组。DIMM 的每一侧都有自己的时钟。
在 DDR4 DIMM 上,等级由 DIMM 一侧的 DRAM 芯片/裸片组成,或者如果它使用 3DS 2H、4H 和 8H 堆栈硅通孔 (TSV),则每个等级都是裸片堆栈中的一层。2H DIMM 两侧都有 2 层(其 DRAM 芯片是 DDP),这意味着它可以是 4 等级并使用 4 个芯片选择 CS0 到 CS3,这在内部表现为 CS0A 或 CSOB、CS1A、CS1B、CS2A、CS2B、CS3A、CS3B,具体取决于组位于等级的哪一半。2H 还可以使用芯片选择 CS0 和 CS1 来选择物理等级(封装等级),然后使用 C0 选择物理等级内的逻辑等级(层),而不是每个逻辑等级都有一个芯片选择。 4H 可以使用该CS0 + C[2:0]
方案使用 8 个逻辑等级(CS0 选择模块(单个封装等级)并且 C0 在 CS2 上;C1 在 CS3 上;C2 在 NC 上并且用于发送芯片 ID)。理论上,DDR4 允许最多 32 个等级,其中 4 个芯片选择选择封装等级和 8 个逻辑等级。CS2 和 CS3 不用于 UDIMM,它们通常是双等级——我不确定 UDIMM 是否曾经使用逻辑芯片 ID。Cx 信号仅出现在 RDIMM 和 LRDIMM 上。GL502VM 仅支持传统的 DDP 封装,它使用 CS1、CKE1 和 ODT1 来控制 DIMM 上的第二个芯片(第一个芯片为 CS0、CKE0 和 ODT),这与具有单个封装等级和多个逻辑等级的 DIMM 不同,其中 C0、C1 和 C2 与单个 CS、CKE 和 ODT 结合用作芯片 ID 选择。
Bank 组选择一组 Bank,Bank 地址选择 Bank 组内的 Bank。上述格式中的 Bank 和 Bank 组在行上是高阶交错的,但在某些模块上可以配置为低阶交错。
每个存储体在逻辑上分布在列中的 DRAM 芯片上,并且列中每个 DRAM 芯片都有一个全局行/列解码器,列中每个 DRAM 芯片都有一个行缓冲器(感测放大器)。芯片本地的存储体部分由 x 组成。这表示为一个由二维字子阵列组成的二维阵列。使用部分行/列位对二维阵列中的全局行/列坐标进行解码,使用其余行/列位对子阵列中的实际(本地)行/列坐标进行解码,最终得出芯片所属列中的字。每个子阵列都有一个本地行/列解码器和与字线、位线、感测放大器、写入驱动器、预充电驱动器相连的存储单元。 DRAM 芯片上分布着一个存储体,每个芯片从列中提供一个字(x4、x8、x16)(其中列构成 64 位/存储单元(128 个存储单元,带有用于差分感测放大器的互补/虚拟存储单元))。在芯片本地,列仅构成属于芯片的字,因此本地每列有 4、8 或 16 条字线,但每列有 64 条字线。在 x16 上,一列跨越 4 个芯片,因为字长为 16 位。
在访问同一组中不同行的列之前,您必须对组中的位线进行预充电(所有并行包含逻辑组的芯片都会这样做),这会将每列的位线驱动回 V DD /2,以便另一行准备好打开。在预充电之前,RAS 被取消断言以关闭打开的行字线。不需要对行缓冲区(页面)进行“写回”,因为在写入时,数据会直接写入单元,然后重新启用感测放大器以反映输出上的变化。
答案2
RAM Bank 一词实际上并不是一个标准术语,但人们经常用它来指代内存模块。你知道,你可以买到各种大小的内存条,它们呈矩形,有许多金色连接点,中间有一个小孔,以确保它只适合正确的内存插槽。
RAM 代表:随机存取存储器,指的是这个模块的集合。RAM 就是这个模块所包含的内容。使用“随机存取”一词是因为内存不仅可以读取,还可以写入和擦除。还有术语 ROM:只读存储器,即只能读取而不能写入值的内存芯片。
Bank、Module、Bar 等术语都是人们使用的。Module 是官方名称,但由于不知道正确的术语,bank 和 bar 都经常被使用。
因此,RAM 组(或 RAM 模块)是一种电路板,包含金连接点和 RAM 芯片,用于在计算机中临时记忆计算机上的任何数据,例如窗口的外观、显示的图形,这些数据都存储在 RAM 中,位于其中一个 RAM 组/RAM 模块中。