DDR的那些事,lesson1
颗粒计算
DDR1
BA(2) A(14)
以1Gb为例
30 = 2 + 14 + 14, 如果是X4, 则14 = 2 + 12,因此需要列的地址是12bits
如果是X8,则需要列的地址是11bits, 类推如果是X16,则需要列的地址是10bits
DDR3
BA(3) A(16)
以1Gb为例
30 = 3 + 14 +13,如果是X4, 则13= 2+ 11,因此需要列的地址是11bits
如果是X8的话,则13 = 3 +10,因此列需要10bits
如果是X16的话,则13 = 4 + 9,因此需要列是9bits,看下表,发现列地址是10bits,那么行地址就不是原来的14bits,而是13bits
DDR4
BA(2) BG(2) A(18)
注意这时候引入了bank group的概念,相当于把bank数量提升了。
以2Gb为例
31 = 4+ 14 + 13 ,如果是X4,则13 = 2 +11, 列地址需要11bits,可以看到下面表格,将行地址14bits减一来实现。列保持10bits
X8, X16计算方法如上,前提是列地址的宽度为10bits,根据不同的Xn来行地址或者BG的宽度
命令定义
DDR 1
通过操作CS/RAS/CAS/WE来实现command编码。
DDR3
通过操作CS/RAS/CAS/WE来实现command编码。
DDR4
通过操作地址A中的CS/RAS/CAS/WE来实现command编码。
那么分析个问题,最大容量的问题,4 + 14 + 10 + 4 = 32 4G大小 ,再次看表格发现单个颗粒可以是16G,上面的计算是错误的。为啥呢?
原因是我们认为RAS/CAS/WE这三bits是没有地址的意义。那么加上这三bits,单个颗粒的容量是4 * 8 =32G,然而规格中写的是4G,原因是A17不能再X16用,A17仅仅对X4支持。
想一个问题,如果继续单个颗粒内存扩大的话,可以操作的范围是修改列地址,增加bank的数量,或者是增加Xn,可不可以激进点直接X16呢
配置寄存器
DDR1
MR0如下图所示,通过BA1/BA0为0进行选择MR的位置。
有两个MR
DDR3
MR0 如下所示,可知和DDR1已经不兼容了
有MR0, MR1, MR2,MR3
好了,本篇内容就到这里。