Memory Controller(Linux+mini2440)
http://kinglaw05.blog.163.com/blog/static/59683314201012611148949/
简单明了,很好理解
存储器容量、位宽、地址线根数及其数据线根数几者之间关系
http://hi.baidu.com/wei%D0%C5%D1%F6/blog/item/de817c00de2aec7b3912bbad.html
如何计算SDRAM的大小
另外找到了一段说的比较清晰。因为我对两片16位32MB的SDRAM连接(串联?)成了32位的64MB的SDRAM(我觉得是32位32MB的)这一表述有困惑,看了下面的,很有帮助。
SDRAM的分配:jade板子上采用的是HY57V561620芯片,4banks*4M*16bit=32MB。由于此sdram芯片是16位的,而z228芯片有32位的吞吐量,因此要是sdram跑起来,则必须是sdram也能设成32位的吞吐量。在这里我们采用把2片sdram拼接的方法,即串联起来。一片sdram有13根地址线,其中行,列地址线采用复用方法:行13根*列9根。所以我们真正的地址线总共有13+9=22根,即4M.再加上有bank0,bank1,2位寻址共4个bank,所以就有了16M的容量了。又因为此sdram是16位寻址的,所以最后总共有32MB的大小了。
接下来就是把2片sdram扩展成32位的数据吞吐量。采用的是串联法,即地址线还是24根(32MB),数据位增加到32位。这样扩展后的sdram就变成了4banks*4M*32bit=64MB的容量了。
为什么串联以后位数增加了一倍,容量也增加了一倍呢?其实这是我们在表达方式上的不同而已。一片sdram的大小为4*4M*16bit,由于其默认下就是16位的,所以他与16位的CPU连接时,其容量大小就只有16M*16bit(注意:这是在16位下面,如果在8位机下面,还是32M的)。所以当他需要在32位机下面工作时,当然就需要32bit方式了,这时,就需要用2片sdram串联起来,组成32位的了,这时候其大小还是16M*32bit。与16位机下一样,容量还是16M,只不过吞吐量不同。只不过在网上很多地方写的都是64MB,其实道理是一样的,我把16M*32bit花成MB还不是等于64MB啊。
可以这样理解 ,换算成MB的时候,我们是相对于8位机的容量,而不是相对SDRAM内部的一个存储单元(如果是16位的,则每个存储单元能存16bit的数据。)计算的。