♦DRAM的物理BANK与逻辑BANK
我们在进行内存设计选型时会有两种选择:内存颗粒和内存条
1).内存颗粒其实也就是内存芯片,数据位宽通常是8bit,最高的也就是16bit。
2).内存条就是将多颗内存芯片放在一起组成通用标准模块,并在模块中加入管理信号(一般为I2C总线,用来读取厂家信息),然后从标准接口引出(就是我们常说的金手指)。
常见的内存条有SIMM和DIMM两种。
SIMM是Single In-line Memory Module缩写,即单列内存模组,它与主板插槽的接口只有一列引脚(虽然两侧都有金手指),72个PIN,数据位宽为32bit。
DIMM是Double In-line Memory Module的缩写,即双列内存模组。所谓双列是指模组电路板与主板插槽的接口有两列引脚,两侧的金手指各对应一列引脚。DIMM内存条一共有168个PIN,数据位宽为64bit。
传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需的数据,而CPU在一个传输周期能接受的数据容量就是CPU总线的位宽。这个位宽就是物理BANK(Physical Bank,简称P-Bank)位宽。
如32位的CPU与内存进行数据交换时,一个时钟周期内必须是32bit,要是用普通8bit位宽的内存颗粒的话,就需要4片并联起来才能满足要求。记得Pentium系列CPU刚上市时,需要在主板上插两条SIMM才能使CPU正常工作,这是因为Pentium系列CPU是64位的,而SIMM只能提供32bit位宽,所以必须要用两条并联起来才能满足其64bit的位宽要求。直到后来64bit位宽的DIMM上市后,才可以使用一条内存配合CPU正常工作。
早期的内存条,无论是SIMM,还是DIMM,都只有一个P-Bank。随着计算机应用的发展,一个系统只有一个P-Bank已经不能满足容量的需求。所以就出现了支持多个P-Bank的内存条,一次选择一个P-Bank工作,这就有了内存条支持多少个物理BANK的说法(Intel将P-Bank称为Row,比如845G内存条宣称支持4个Row,其实就是支持4个P-Bank,另外,在一些文档中,也把P-Bank称为Rank)。
DRAM的逻辑BANK概念是针对内存颗粒内部的。大家都知道DRAM内部的存储单元是以阵列形式排列的。如下图所示。行列地址总线分别经过行列地址译码器译码后分别指向一行和一列,行列重叠的单元就是我们所寻找的存储单元,这就是内存芯片寻址的基本原理。对于内存颗粒来说,这个阵列就是逻辑Bank(Logical Bank,简称L-Bank)。
但是,在实际应用中,由于技术、成本等原因,不可能只做一个全容量的L-BANK,而且最重要的是,由于DRAM的工作原理限制,单一的L-Bank将会造成严重的寻址冲突,大幅降低内存效率。所以人们在DRAM内部分割成多个L-Bank,每个L-Bank形状相同,彼此独立,可以独立工作。早期的DRAM芯片内部分为2个L-Bank,后来是4个,DDR3内存芯片为8个。
在进行寻址时需要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。对内存的访问,一次只能是一个L-Bank,而每次与CPU交换的数据就是 L-Bank 存储阵列中一个“存储单元”的容量。SDRAM内存芯片一次传输的数据量就是芯片的位宽,那么这个存储单元的容量就是芯片的位宽(也是 L-Bank 的位宽)。下图为4BANK内存颗粒内部结构示意图
内存芯片容量的计算方法为:存储单元数量=行数×列数(得到一个 L-Bank 的存储单元数量)×L-Bank 的数量。在很多内存产品介绍文档中,都会用 M×W 的方式来表示芯片的容量。M 是该芯片中存储单元的总数,单位是兆,W 代表每个存储单元的容量,也就是 SDRAM 芯片的位宽(Width),单位是 bit。计算出来的芯片容量也是以 bit 为单位,但用户可以采用除以 8 的方法换算为字节(Byt)。