SDRM/DDR 寻址 (转)
DDR内部组成
DDR内部是由多个存储阵列组成的,我们称这些存储阵列为bank,早期的SDRAM内部分割成两个bank,后来是4个,这是SDRAM规范中规定的最大bank数,在DDR2标准中,BANK的数目提高到8个。
每一个存储阵列就像表格一样,表格的每一个单元格是最小存储单元,大小可以为4, 8, 16,也就是位宽,位宽决定了数据线位数。如果想使用32bit的数据总线宽度,那么可以使用单片32bit内存芯片,或者使用两片16bit位宽的芯片拼接出 32bit。
整个芯片的总容量用如下公式计算:
单元格数目 = 行数 * 列数
总容量(单位bit) = bank数 * 单元格数目 * 单元格大小 = bank数 * 行数 * 列数 * 单元格大小
以K4B4G1646B 4Gbit为例,从它的datasheet可以看出存储配置为256MB x 16bit,bank数是8,row地址线A0~A14, column地址线A0~A9
总容量 4Gbit= 256MB * 16bit = 8 * 32MB * 16bit = 8 * 32K * 1K * 16bit
共有8个bank,每个bank是32K x 1K的单元格阵列,每单元格存储16bit数据。
芯片位宽
在K4B4G1646B芯片手册上,4Gbit容量的芯片,有下面三种规格1GB x 4, 512GB x 8, 256GB x 16。在相同的容量下,位宽出现了多种设计。1GB x 4的位宽需要8个芯片才能组成32bit数据线,但是总容量可高达32Gbit;如果使用1GB x 16则只需2个芯片即可组成32bit数据线,总容量为8Gbit。从上面可以看出,在设计中需要权衡芯片数,总容量。
SDRAM/DDR是怎么寻址的?
为了读取特定单元格的数据,在寻址时要首先确定是哪一个bank,然后在这个选定的bank中进行行列的寻址。在实际工作中,bank的地址与相应的行地址是同时发出的,此时这个命令称之为"行有效"或者“行激活”。在此之后,发送列地址寻址命令和具体的操作命令(读或写),这两个命令也是同时发送的。行列地址是可以复用的,一般来说DDR芯片的地址线为A0~A15,低地址线会被行列复用。以K4B4G1646B 4Gbit 256MB x 16bit内存芯片为例,A0~A14用做行地址,A0~A9用做列地址,这款芯片同时含有B0~B2用来选择bank。