分类: 嵌入式
2010-11-23 13:35:18
二、 内存的物理BANK
内存的物理BANK与逻辑BANK是两个完全不同的概念。
简单地说这个BANK就是内存和主板上的北桥芯片之间用来交换数据的通道,目前以SDRAM系统为例,CPU与内存之间(就是CPU到DIMM槽)的接口
位宽是64bit,也就意味着CPU一次会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条BANK,很多厂家的
产品说明里称之为物理BANK(Physical
BANK),DDRRAM则加倍。在这里我们要纠正一个很多人犯过的错误:单面内存条为单BANK,双面内存条为双BANK。
实际上,物理BANK与面数无关!很多256MB的内存条尽管两面16个芯片,但是由于内存芯片的位宽是4位(32Mbit×4),所以必须要有
4×16=64才能达到系统所要求的位宽。这时由于芯片大小的限制,不可能将16颗芯片都放在一面上,所以只能设计成双面。对于64Mbit芯片
(4M*16) 来说,芯片带宽16bit,8颗芯片带宽=16 x 8=128bit(即两个BANK),4颗芯片带宽=16 x
4=64bit(即一个BANK)。两个物理BANK的情况只有出现在位宽超出了64位的情况下(即位宽出现了富余),由于芯片组任一时刻只能处理一个
64位,所以才分成两个物理BANK。换句话说,只是把16颗芯片中的8颗放到了背面。
CPU工作时,每次只访问一个物理BANK,这是因为一个物理BANK的位宽是64Bit。CPU访问的数据是存放在内存条的内存颗粒上的,现在的芯片组
设计时都是要求内存条上每个芯片均承担提供数据的任务,即内存条上的每个颗粒都要负担这64bit数据的一部分。这就要牵扯到我们上文所说得位宽的问题
了,如果内存芯片的位宽是8位,那么用这个芯片组成内存条只需要8颗芯片即完成了64位数据并发任务,如果是4位,那么就需要16颗芯片才能达到
64bit的要求。当内存条颗粒设计为位宽为8位,16颗内存颗粒的时候,内存条的位宽就变为6 x
16=128bit。所以就要设计为双BANK。这是由于CPU一次只能处理64bit的数据所造成的。以后随着技术的进步,128bit,256bit
都是可以实现的。
三、 关于内存BANK的几个常见问题
我们在了解了内存的逻辑BANK、物理BANK,以及BANK与CPU之间传输的一些问题之后,对于经常碰到的一些较老主板无法正确识别大容量内存条的问题就可以很明确地解释了。
电脑启动之后,北桥芯片会检测内存条的各个参数,SPD
,位宽,以及主板所支持的数据深度,当发现内存颗粒的数据深度超过了主板所支持的最大数据深度时,系统会默认以主板支持的最大数据深度读取内存颗粒信息,
再根据我们上文所提供的公式内存芯片的容量=
逻辑BANK的单元格数(即数据深度)ⅹ逻辑BANK数量×每个单元格的位数(芯片的位宽)计算出这根内存条的容量。许多内存BANK的问题就出在这里。
以某些256MB内存条无法识别为例,许多较老的主板如440BX/810系列/815系列仅支持4M的数据深度,当内存颗粒的数据深度为8M时,系统会
默认为4M,并以4M进行计算,
4M * 4 * 4 =64BIT(8MB)。所以这根16 * 16 = 256MB的内存条就被系统认成了
8 * 16 =128MB。造成内存条容量识别不正确的情况。
还有一种情况,比如一部分主板提供3根内存插槽,当插满三根256MB的内存条时,只能识别为512MB,而不是正常的768MB,这是怎么回事呢?原
来INTEL的早期的一些主板仅能支持4逻辑BANK的情况,当插满两条内存条时,4个逻辑BANK已经全部被占用了,系统自然就不会识别第三根内存条
了。但这种情况再VIA的主板上较少见,因为早在KT133的主板上VIA就已经明确表示支持8BANK了。因此,即使插满三根内存条系统依然能够正确进
行识别。而且,VIA的芯片支持任意位宽,数据深度最高到32M!
综上所述,内存BANK是我们经常碰到但又很难解决的一个问题,特别对于已相对较老的主板进行升级尤为如此。这也是进行内存升级的很重要的一个方面,只有真正做到了然于胸,才能事半功倍。