里首先要讲一个概念:Rank。内存控制器host端往往有一定的数据位宽,比如现在常用的计算机系统处理器都是64位,其中所集成的内存控制其接口也是64位。而内存芯片的位宽通常为4位/8位/16位,要达到64位,必须把多个内存芯片组合在一起。比如是8位内存芯片,则必须要8个内存芯片组合在一起才能跟host端64位接口匹配。这样的host端总线位宽相匹配的多个内存芯片的组合就是一个Rank。
回到开始的关于内存芯片选型的讨论,下面以具体例子进行讲解。
例子1:如果你的嵌入式系统设计需要256MByte的内存(注意这里是Byte不是bit),控制处理器芯片内存接口数据是8位的,Rank选择信号有两个CS0#/CS1#。这种应用应当选什么样的内存芯片呢?
分析: 由于处理器端的数据位是8位,内存芯片的数据位应避免大过处理器端的数据位。所以选择的内存芯片是8位或4位。
如果要选择4位的内存芯片:
由于有两根Rank选择信号,可以支持最大2个Rank。处理器端的数据位是8位,而内存芯片也是4位,就是说每个Rank可支持2个芯片(处理器端的数据位/内存芯片数据位=2),两个Rank可以支持4个芯片。每个芯片容量是256MB x 8/4 = 512Mb,也就是说应该选512Mb/4位(32Mx4x4banks)的内存芯片。
也可以选择1个Rank,这样也就可以用总共2个内存芯片,每个芯片容量是256MB x 8/2 = 1Gb。也就是说应该选1Gb/4位(64Mx4x4banks)的内存芯片
如果要选择8位的内存芯片:
由于有两根Rank选择信号,可以支持最大2个Rank。处理器端的数据位是8位,而内存芯片也是8位,就是说每个Rank只能支持1个芯片(处理器端的数据位/内存芯片数据位=1),两个Rank可以支持2个芯片。每个芯片容量是256MB x 8/2 = 1Gb,也就是说应该选1Gb/8位(32Mx8x4banks)的内存芯片
当然也可以用1个Rank,也只能用一个内存芯片,其容量较大2Gb/8,不知到能不能找到这样的芯片。
例子2: 最近也给很多朋友分享过一个实际的DDR2/800的内存条设计原理图,其框图如下。从该框图可以看出:
1.该内存条有两个rank分别连接到CS0# 和CS1#两个rank选择信号。
2.每个rank有8个内存芯片连接到内存数据总线。
3.每个内存芯片是512M/8bit,其存储容量是4Gbit。
4.该内存条的设计的内存容量是多少?
4Gbit X 8(8 芯片/rank) X 2 (rank) = 64 Gbit,也就是8GB
内存芯片的选择除了计算其容量,数据位数等参数外,还的看其它的一些特性要求,比如控制处理器端支持什么内存技术(DDR,DDR2, DDR3?),内存芯片也要与之匹配。还有比如
电路板空间的大小。用上面的例子1来说,如果电路板上没空间放4颗内存芯片,只能放2颗,那么就只能选1Gb/4位或1Gb/8位的芯片了。