Saturday, June 24, 2017

内存的BANK

举例说明,单面的内存一般都是8个8bit的芯片,所以有一个物理BANK,但是双面的内存有16片8bit的芯片,所以有两个物理BANK(16*8/64)并不是所以的单面的内存都是一个BANK,例如单面8片16bit芯片的内存就有两个BANK,也不是所有的双面内存都是双bank,例如16片4bit的芯片的内存只有1个bank ,传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。当时控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,而这个位宽就称之为物理Bank(Physical Bank,下文简称P-Bank)的位宽。

在一些文档中,也把P-Bank称为Rank(列)。如single rank单列,dual rank双列。

为了更好更简便的理解memory Rank的含义,做如下说明:
1.首先,需要知道CPU数据总线的位宽,现在一般是64bit, 这个位宽就称之为物理Bank。
2.那么memory 1RX4则表示1个64bit,X4则表示memory每颗内存颗粒的位数.从这里我们就可以很容易知道memory内存颗粒的个数为:64/4=16颗。如果是2RX8的话内存颗粒就是:64*2/8=16颗。
3.所以无论是1RX4 ,2Rx4或者 1RX8,2Rx8,代表的含义可以理解为memory的内存颗粒的个数.而不是单面或者是双面内存。

一.内存芯片的逻辑BANK
  在芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元我们称为CELL,只要指定一个行(Row),再指定一个列(Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的基本原理。这个阵列我们就称为内存芯片的BANK,也称之为逻辑BANK(Logical BANK)。由于工艺上的原因,这个阵列不可能做得太大,所以一般内存芯片中都是将内存容量分成几个阵列来制造,也就是说存在内存芯片中存在多个逻辑BANK,随着芯片容量的不断增加,逻辑BANK数量也在不断增加,目前从32MB到1GB的芯片基本都是4个,只有早期的16Mbit和32Mbit的芯片采用的还是2个逻辑BANK的设计,譬如三星的两种16MB芯片:K4S161622D (512K x 16Bit x 2 BANK)和K4S160822DT(1M x 8Bit x 2 BANK)。芯片组本身设计时在一个时钟周期内只允许对一个逻辑BANK进行操作(实际上芯片的位宽就是逻辑BANK的位宽),而不是芯片组对内存芯片内所有逻辑BANK同时操作。逻辑BANK的地址线是通用的,只要再有一个逻辑BANK编号加以区别就可以了(BANK0到BANK3)。但是这个芯片的位宽决定了一次能从它那里读出多少数据,并不是内存芯片里所有单元的数据一次全部能够读出
每个逻辑BANK有8M个单元格(CELL),一些厂商(比如现代/三星)就把每个逻辑BANK的单元格数称为数据深度(Data Depth),每个单元由8bit组成,那么一个逻辑BANK的总容量就是64Mbit(8M×8bit),4个逻辑BANK就是256Mbit,因此这颗芯片的总容量就是256Mbit(32MB)。
  内存芯片的容量是一般以bit为单位的。比如说32Mbit的芯片,就是说它的容量是32Mb(b=bit=位),注意位(bit)与字节(Byte)区别,这个芯片换算成字节就是4MB(B=Byte=字节=8个bit),一般内存芯片厂家在芯片上是标明容量的,我们可以芯片上的标识知道,这个芯片有几个逻辑BANK,每个逻辑bank的位宽是多少,每个逻辑BANK内有多少单元格(CELL),比如64MB和128MB内存条常用的64Mbit的芯片就有如下三种结构形式:

①16 Meg x 4 (4 Meg x 4 x 4 banks) [16M╳4] ②8 Meg x 8 (2 Meg x 8 x 4 banks) [8M╳8] ③4 Meg x 16 (1 Meg x 16 x 4 banks) [4M╳16]   表示方法是:每个逻辑BANK的单元格数×每个单元格的位数(芯片的位宽)×逻辑BANK数量。芯片逻辑BANK位宽目前的工艺水平只能最多做到16位,因此大家看到几乎所有的芯片逻辑BANK位宽只可能4/8/16三者之一。以前16Mbit的芯片基本采用的单个芯片两个逻辑BANK,但是到了64Mbit基本就都是4个逻辑BANK设计了

二.内存条的物理BANK
  通常主板上的每个内存插槽分为两段,这个大家从VIA主板BIOS设置中的BANK 0/1 DRAM Timing选项很容易推理得到,实际上也就是两个BANK,不过这里的BANK概念与我们前面分析芯片内部结构时提到的BANK可不一样。简单地说这个BANK就是内存和主板上的北桥芯片之间用来交换数据的通道,目前以SDRAM系统为例,CPU与内存之间(就是CPU到DIMM槽)的接口位宽是64bit,也就意味着CPU一次会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条BANK,很多厂家的产品说明里称之为物理BANK(Physical BANK),目前绝大多数的芯片组都只能支持一根内存包含两个物理BANK,但是针对某个具体的条子,很多人想当然,认为每个DIMM插槽使用内存条的面数来区分占用几个BANK通道,单面的(16M,64M)只占用一个物理BANK,而双面的(32M,128M)则需占用两个物理BANK。实际上物理BANK与面数是无关的,PCB电路可以设计成双面和单面,也可把全部芯片(16颗)放在一面上(至少从理论上是完全可能)。有些内存条单面就是一个物理BANK,但有些双面才是一个物理BANK,所以不能一概而论。256MB内存条就是一个典型的例子,虽然是双面并多达16枚芯片,但仍然是单个物理BANK的。要准确知道内存条实际物理BANK数量,我们只要将单个芯片的逻辑BANK数量和位宽以及内存条上芯片个数搞清楚。各个芯片位宽之和为64就是单物理BANK,如果是128就是双物理BANK。  CPU一次只能对一个物理BANK进行访问和操作(因为一个物理BANK是64bit的位宽),那么内存条要保证一个周期内向数据总线提供或接收64bit的数据,而这些数据都是分别存储在内存条的的芯片中。那么内存条中有多个内存芯片,这64位数据到底是有一个芯片提供还是由所有芯片每个提供一部分呢?我们还是以上面的那颗256Mbit的芯片为例,根据芯片组的工作原理,目前还没有那家芯片生产厂家做出位宽16位以上的芯片,所以现在的芯片组设计时都是要求内存条上每个芯片均承担提供数据的任务,也就是说内存条上的每个芯片都要要对这64位数据做贡献,而那颗内存芯片的位宽是8位,因此用这个芯片组成内存条只需要8颗芯片即完成了64位数据并发任务,算下来,内存条的容量就是32 MB (256Mbit)×8=256MB的容量,假如是内存芯片的位宽是4位,那么需要的芯片数量必须是16颗,这时假如使用4颗位宽还是8位的64MB(512bit)芯片(单个芯片的总容量翻了一番)组装,尽管内存条上的总容量达到了256MB的要求,还是由于位宽不够是不能正常工作。要能工作就必须采用16位位宽的64MB(512bit)芯片。
  586以上电脑的数据总线宽度都是64bit,即每次读取内存为64bit,SDRAM内存条的设计带宽也是64bit,内存条的带宽为条上各个内存芯片的带宽之和,基本条件为带宽之和应等于64bit或其倍数。假如出现了各个芯片位宽之和等于128。则分成两个64位,当读取一个64位部分时,另一个64位部分就不能读取,通常很多厂家就分别将这两部分放在内存的两面上。这就造成了许多人的错觉:双面是两个BANK的,单面是一个BANK的。实际根本不能这样认识,比如大度256MB内存,尽管两面16个芯片,但是由于内存芯片的位宽是4位(32Mbit×4),所以必须要有4×16=64才能达到系统所要求的位宽。这时由于芯片大小的限制,不可能将16颗芯片都放在一面上,所以只能设计成双面。对于64Mbit芯片 (4M*16) 来说,芯片带宽16bit,8颗芯片带宽=16*8=128bit(即两个BANK),4颗芯片带宽=16*4=64bit(即一个BANK)。两个物理BANK的情况只有出现在位宽超出了64位的情况下(即位宽出现了富余),由于芯片组任一时刻只能处理一个64位,所以才分成两个物理BANK。今后随着新一代数据总线位宽的提高,也许CPU的胃口就不是一次只能64位数据了,可能是128位甚至更多。
  另外我们常说的内存交错设置并不是指的物理BANK的交错。也就是说不是内存条双面的交错,而是指内存芯片内部逻辑BANK的交错,如果芯片有4个BANK,那么就可以进行4路交错,如果只有两个BANK就只能是二路交错。很多资料介绍的以内存条的单面或双面来决定交错是错误的,实际上就是混淆了物理BANK和逻辑BANK的区别。

三.有关内存BANK的几个常见问题释疑
1.大容量内存不能为某些主板正确识别原因
  系统在启动时,主板的北桥芯片会侦测这些内存条的参数,如果果发现位宽不支持,则终止检测,系统就挂了。因为位宽决定了一次CPU一次向内存芯片传递的数据量,只能一次64位数据并发。接下来检测BANK的单元格总数,如果这个单元格的数量超出了芯片组所支持的上限,那么就按芯片组所能支持的最大限度进行操作,在确定了数据深度/位宽之后再结合逻辑BANK数量,计算出芯片的实际可用总容量。换句话说逻辑BANK中的一些行与列可能就用不上了,假如芯片组对逻辑BANK数量不支持,那么多出来的逻辑BANK也将不起作用,后者的情况比较少见,现在的芯片组基本全是支持4BANK的。VIA的KT133芯片组甚至明确表示支持8BANK。
  我们说内存识别出现问题,主要就是卡在芯片的这三个参数上,其中又以芯片的数据深度限制最为常见。事实上现在很多大容量内存不能为一些旧型号主板支持的主要原因就是芯片组对内存芯片的逻辑BANK数据深度有一定限制。我们知道芯片的容量主要由三个参数决定,也就是根据第一部分介绍的公式,首先是逻辑BANK的单元格数(数据深度),其次是逻辑BANK的位数。最后是逻辑BANK的个数。三者相乘得到芯片的容量,大家看到大度内存256MB为什么不能在440BX上用,就是由于BX芯片组只支持内存芯片的数据深度为4M,而不是8M,所以大度条子的内存芯片在BX板上被识别成4×4×4=64Mbit(8MB),而不是本来的8×4×4=128Mbit(16MB),现在很多大容量的内存没有在BANK数和位宽上提高多少,基本都是增加芯片的数据深度,而这是需要芯片组支持的,象INTEL的LX/BX/810/815等都只能支持最大4M(INTEL想让大家去选择P4+850+RDRAM的组合),而目前VIA系列的几款芯片组支持芯片任意位宽(尽管目前大部分内存芯片的位宽最高只有16位),单个逻辑BANK的容量(数据深度)最多支持32M的容量。从这点上大家也不难看出为什么现在VIA芯片组的主板这么火了。
2.内存条购买标准的修正
  大家都知道这么一个购买常识:购买内存时尽量选用单面内存。但是这个经验是来自这样一个背景:许多不正规的小厂使用低容量芯片(比如已经过时16Mbit)来制造目前使用的高容量内存条,由于单个芯片容量小,为了达到较大的内存条容量,必然要增加芯片数目,而且这些过时的芯片很可能是一些翻新货,并且芯片之间电气参数的一致性也很差。不过根据分析更准确地讲购买原则应该:是选择单物理BANK的内存。以前由于大多数单面内存都是单BANK内存,所以大家一直就是这个说法,实际上通过前面的分析我们知道内存条的面数与物理BANK数是无关的。单个物理BANK,内存只要取一组64位数据,而不需要再切换到另外一个BANK读去另外一组64位数据,切换的时间省去了,性能必然有提高。目前由于一个DIMM插槽最多支持两个物理BANK,BIOS设置中是对同一个内存插槽的两个BANK同时进行速度调节的,比如BANK 0/1 DRAM Timing;BANK 2/3 DRAM Timing;BANK 4/5 DRAM Timing选项。,所以我们在选择内存的时候应该根据内存条上芯片的编码,确定内存条是单BANK还是双BANK,排除下面讲到的DIMM插槽信号走线的影响,一根双BANK的内存条与两根单BANK的内存条在性能上是没有多少差别的。能用一个插槽不要使用两个插槽的说法是没有依据的。总体上讲3个DIMM插槽在总容量满足要求的情况下,使用BANK的数目愈少愈好。千万不要出现使用大量低容量芯片组装的条子占用3个DIMM全部6个BANK的情况。
3.DIMM插槽超频性能不一致与内存BANK无关
  前面我们说了尽量减少DIMM插槽的使用,但是有时从保护已有投资考虑,以前购买的低容量内存又不好丢弃,所以有时可能还会出现同时使用三个DIMM插槽的情况,但需要注意的是这时不一定同时使用全部6个BANK,很可能只使用了3个BANK。很多人发现这三个DIMM插槽所允许的最大速度是不同的(VIA主板BIOS允许分别对每个DIMM插槽进行速度调节),一般DIMM2最高,DIMM1其次,DIMM3最差。这与内存条的BANK无关,这主要与内存BANK控制信号在主板上的走线有关,很多有4个DIMM插槽的BX主板,由于BX主板最大只能支持6个BANK,所以DIMM3与DIMM4的信号走线是共享的,因此导致DIMM2与DIMM3走线设计不一致而导致两者的超频性能相差极大。这也是一些内存甚至无法用在DIMM3和DIMM4插槽上的主要原因。那么DIMM1为什么超频性能还可以呢?主要是主板BIOS或北桥芯片检测内存时是按照BANK编号的顺序进行的,他们要求第一条内存必须插在DIMM1上,所以设计时对其进行了一些电路上的优化。所有一切与内存的物理和逻辑BANK的结构和工作机理无关.

Leave a Reply

Your email address will not be published. Required fields are marked *