|
|
发表于 2015-10-12 11:47:24
|
显示全部楼层
首先要明确一个概念,那就是DDR的存储容量的问题: 1、为了大家不在容量上混淆概念,先明确一下单位 1个byte=8个bit。
2、通常说的8位data线和16位data线和DDR3标的容量有没有直接关系? 应该说是没有。data线最终影响的只是单次放入数据的位数,
一次不够可以多放几次(不过需要时间)。通过一个大门想放入总共32个人到客厅,一次只能过8个还是16个,不影响客厅的容量。
所以说一个DDR标的容量是512Mbyte还是1Gbyte,那实际就是这么多。
3、那什么和DDR的容量有直接关系呢:这里有3个概念:
一)个是DDR内部的存储单元,Bank的概念。为什么要有Bank,个人觉得和DDR
的制造代价有关系吧,如果整个DDR就是一个Bank,那如果其中有一点点损坏,那整个DDR就坏了,如果缩小,做几个小Bank,那从
产品良率来说,肯定是更高。存储单元之间就像矩阵一样。如果是地址中有三个BA,即三个Bank Address,BA0, BA1, BA2。
所以是8个bank.
二)是 行列选择。由上面的存储单元可知,矩阵的选择,无非是行列选择,行号,列号。确定之后就可以定住一个单元。比如地址线
A0~A14,那行选择就有2的15次方个,列选择看每个芯片的自己定义,比如普遍使用A0~A9,那就有2的10次方个。
如上的说法,一个8BanK,行列地址分别为2^15 和2^10 的总存储单元为 8*(2^15)*(2^10)== 256M个单元,这个M是数量单位。
存储单元的数组大小,如一次可以存入8bit数据,或者16bit数据,颗粒数据线的宽度决定了存储单元单次存储的数组大小。
那16bit的DDR颗粒,当bank ,行列信息都确定之后(如上举例),他的容量就是256M*(16/8)==512Mbyte
三)是page size的说法:用data sheet里面的说明如下:
Page size is the number of bytes of data delivered from the array to the internal sense amplifiers when an ACTIVE command is registered.
Page size is per bank, calculated as follows: page size = 2 COLBITS * ORG/8
where, COLBITS = the number of column address bits, ORG = the number of I/O (DQ) bits
page size==(2^10 * 8)/8=1Kbyte 针对8bit位宽DDR来说。
page size==(2^10 *16)/8=2Kbyte 针对16bit位宽DDR来说。
所以看出page size 是以byte 为单位的说法。
4、CPU如何与DDR相互响应,这里指的是容量的映射方面:如果CPU的data数据宽度是32bit,那此时可以使用一个单独32bit宽度的DDR颗粒
也可以使用2个16bit的颗粒拼合,在CPU这端看去,它不管,它依旧认为自己每次都是访问32bit的宽度的内存,每次4个byte。
给出的地址也是bank选择,然后行列信息。这样不管是你使用两个DDR颗粒还是一个DDR颗粒,都同样收到对应的单元位置信息,这个时候
DDR直接存入从CPU给的数据信息就可以了(不管是单颗还是2颗拼合,2颗的时候无法是有高低字节区分,然后舍弃自己不要的)。 读DDR的 时候也一样。CPU每次看到的都是32bit数据。
这个时候回到题目上来,RK3288使用64bit的数据宽度,那如果使用16bit的DDR颗粒,选取4颗拼合,每颗512Mbyte的容量。然后照着这个容量去选择实际的Bank、行、列信息),就够了。
那这样看来就是:8个bank(BA0~BA2) ,行A0~A14、列A0~A9(行列在管脚走线上公用)。
|
|