Bank、物理bank、Rank概念辨析
这个坛上对DDR讨论得特别多,既然这样,从最基本的谈起吧,从几个基本概念辨别开始。Bank:是指的SDRAM颗粒内部的一种结构,主要是为提高DRAM颗粒容量。从原理的角度来看,你可以将它看成是一种地址的扩展,通常地址的扩展是用增加Address线来完成,而SDRAM则另外起了个名字,成为Bank。对应原理设计对于有4个bank的颗粒,其bank线为B[1:0]当然对于高容量的DDR2颗粒和DDR3颗粒,通常bank数量有8个,显然译码则需要三根bank线;
物理bank、Rank实际上是一个东西,它们都是指构成标准64位带宽(如果是含ECC的,则有72位)的一组DRAM。典型情况下,对于X16数据位宽的DRAM,则需要4个DRAM颗粒并行构成一个64位的DRAM接口。对于X8数据位宽的DRAM,则需要8个DRAM颗粒构成一个64位的DRAM接口。既然是这样,我们可以简化,那就是一个CS连接的DRAM颗粒够成一个物理bank,或者说一个Rank。 rank就是一个颗粒? 昏,是构成一组64位宽的颗粒组合! :(基础不好,没办法啊 [b][color=Green]single rank & double rank[/color][/b]
有很多人称之为单面和双面
以为这是结构上的名词
其实不然,ripple也说了,它和bank一样都是一个内存区域
比如一个DDR2-DIMM,采用的DRAM是X8结构的
而它的两面分别有4个DRAM,一共8个
那么这样[color=DarkOrange][b]8X8/64=1[/b][/color],即一根数据线只到一个DRAM
我们称之为什么呢?Single or Double?
虽然它两面都有DRAM,但我们还是[b][color=Red]称之为Single rank[/color][/b]!
如果上例中的DRAM换成[color=Purple][b]X16[/b][/color]结构的
只要有[color=Purple][b]8个DRAM[/b][/color],不管它放在同一面还是放在两面
我们都称之为[color=DarkOrchid][b]Double rank[/b][/color]:lol [b] [url=http://www.pcbsi.com/redirect.php?goto=findpost&pid=1405&ptid=384]5#[/url] [i]袁荣盛[/i] [/b]
哈哈,这下我明白了 我们经常听到的"内存颗粒",其实这是港台地区对内存芯片的一种称呼(仅对内存,其他的芯片,港台地区称为"晶片") [b] [url=http://www.pcbsi.com/redirect.php?goto=findpost&pid=1566&ptid=384]7#[/url] [i]Jenny[/i] [/b]
这两种叫法都蛮形象,我们自己叫什么呢,内存芯片? 具体叫什么,其实都可以,按个人喜好叫就可以了。 [b] [url=http://www.pcbsi.com/redirect.php?goto=findpost&pid=1405&ptid=384]5#[/url] [i]袁荣盛[/i] [/b]
这个解释的很明白呀,多谢! [b] [url=http://www.pcbsi.com/redirect.php?goto=findpost&pid=1887&ptid=384]10#[/url] [i]rrr_z[/i] [/b]
袁大大是个牛人哦 ripple
看到你发了这个帖子
我很喜欢
可是我现在有些问题
就是内存颗粒的划分是Bank 行地址 列地址
是靠这三个量来定位一个内存颗粒中的存储空间
然后根据内存颗粒的位宽 来决定使用几个内存颗粒组成一个rank 这样的内存储空间确定之后
不知道你是否思考过
如何把CPU发出的32bit 4G的空间映射到具体的哪个 rank 哪个bank 哪个行列地址上呢? 以下是我思考的一个结果
以MT47H64M16为例 存储密度是1Gbit
存储规划为 8 Meg x 16 x 8 banks
那么一个rank需要4个这样的颗粒
颗粒的突发读写Burst Length可以是4或者8
我以8为例(在北桥内部设置寄存器,是内存控制器的突发长度为8)
Row address A[12:0]
Bank address BA[2:0]
Column address A[9:0]
0,1,2 bit不接 因为内存的位宽是64bit
3,4,5 bit接Column address 的A[2:0] 发挥突发读写的性能
6,7,8 bit接Bank address 的BA[2:0] 发挥各个bank独立的性能
9-15 bit接Column address 的A[9:3]
16- 28 bit接Row address 的A[12:0]
29 bit接下一个Rank的CS信号
30 bit接下一个Rank的CS信号
31 bit接下一个Rank的CS信号
这样形成了一个单通道 双slot 每个slot双rank的架构 支持内存2G
对于双通道,要把bit3用来选择两个通道中的一个,往上的bit依上顺推
那么就形成一个双通道的架构 支持内存4G 我认真地阅读了intel 北桥中内存控制器的寄存器位
里面只是有寄存器设置每个rank的大小
是否启动双通道模式
但是并没有具体讲CPU的32bit地址空间怎么映射到具体的内存颗粒的存储空间
上面只是我的关于映射的一个想法
由于我对于DDR2还不甚理解
请ripple大师给我答疑解惑
谢谢! 首先澄清几个概念:
通道,其实指控制器。如果说一个芯片支持双通道,那就表明这个芯片支持两个控制器;
slot是指插槽数量。通常考虑到控制器的实际驱动能力,以及用户使用的不确定性,通常做成2个slot。在PC主板上,我们可以常见的是双通道,4个插槽,其实就是一个控制器带两个slot。
内存容量的计算问题:
从一个颗粒的构成可以直接确定其地址的数量,比如:8 Meg x 16 x 8 banks结构的颗粒,由于有8个bank,则其应该有BA[2:0]3根bank地址线;
X16表示其数据位宽,一次操作可以输出16bits的数据。
8M代表其拥有的cell单元。由于DDR*是先通过active命令将raw打开,然后read/write命令选通column,输出数据,而两次不同的操作都是适用同一组地址线(在Read/Write命令时A10被用于决定是否进行Auto precharge的操作,由此下read/write命令时,地址的数量会比active命令时少一位。)这样建立一个等式:2^n*2^(n-1)=8M;其中n表示颗粒所拥有的地址数量。由此可以知道n=13;也就是颗粒的地址为A[12:0]。
通过上面的描述也就可以知道每组数据的具体地址了,对应到DRAM颗粒内部最基本的cell单元。注意这里的8M对于单颗DRAM来说是8M个cell单元,但是对于一组Rank来说,就是8M个地址单元了.一个单元包含64bits的数据!
关于地址表的对应关系:
对整个系统来说,肯定有一个具体的地址对应表格。每个地址被划分给不同的设备。典型如PC架构,内存、显卡、PCI、BIOS等都是有它固定的地址空间的。颗粒通过固件来建立对应关系。每个片选常常会对应一个地址空间,这个地址空间是可以通过软件来进行设置的。片选决定的地址空间段的第一个地址与该片选所决定的rank上地址0是对应的。对于有多个片选时,依次类推。 按照整个设计过程,首先从原理设计开始:
1、确定控制器和所选用DRAM颗粒的总线位宽;以你描述的NB和Micron的DRAM为例,控制器数据位宽为X64(不算ECC);DRAM 颗粒的位宽为X16,这样为构成X64位宽总线需要64/16=4片DRAM颗粒并行构成;既需要4个DRAM颗粒同时被选通才能提供64位宽的总线结构。
结合你的分析:通过上面的描述,可以肯定,你一个rank选择4片DRAM是正确的。注意到,操作的时候,需要一次选通相同rank的4个颗粒,那么就意味着这4个颗粒需要使用一个片选,也就是CS信号。这样在你描述的CS片选应该是有问题的。
2、对于DRAM端的bank地址线,在寄存器上应该是有对应的连线的,你选择8bank的DRAM颗粒,直接将NB端的ba[2:0]与颗粒上的
ba[2:0]相连即可。注意,这里的相连肯定是一个rank内的颗粒。也就是bank网络的拓扑是1驱4;Intel通常已BS开头(bank select).
3,地址线,命令,控制线直接连接即刻.如下给出了一个连接图示.
[attach]446[/attach] 如果一个控制器驱动多个CS(rank)的话,原理上直接将另外的Rank的信号逐一与控制器相连即可.
然后就是SI开始如何确定拓扑结构了! o yeah, thank you very much! 这些可都是一个字一个字敲出来的呀:( :D