Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530801
  • 博文数量: 102
  • 博客积分: 2146
  • 博客等级: 大尉
  • 技术积分: 1146
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-09 17:32
文章分类

全部博文(102)

文章存档

2015年(14)

2014年(24)

2013年(5)

2012年(30)

2011年(16)

2010年(13)

分类: 嵌入式

2010-11-23 13:35:18

随着内存条价格的日益下跌,很多朋友都购置了大容量的内存,但有不少朋友发现在一些相对较老的主板上,买来的内存条无法识别,或者仅能识别一部分的内存容量。究其原因,实际上就是内存BANK在作怪!下面让我们一探究竟吧!
首先我们要弄清楚两个概念。内存的逻辑BANK和物理BANK。下面让我们来分别讨论这两部分。

一、 内存的逻辑BANK(Logical BANK)。

  芯片的内部,内存的数据是以位 (bit)为单位写入一张大的矩阵中,每个单元格我们称为CELL,只要指定一个行(Row),再指定一个列(Column),就可以准确地定位到某个 CELL,这就是内存芯片寻址的基本原理。这样的一个阵列我们就叫它内存的逻辑BANK(Logical BANK)。如同火车是由多节车厢组成一样,内存中也不是只有一组逻辑BANK,它是由多个逻辑BANK组成的。如同乘车的人一样,随着人数的增多,车厢 也就增多,内存也是这个道理,它是随着内存芯片的增多,内存的逻辑BANK数量也在不断增多。目前的大多数内存芯片都为4个,早期的2个,不过这种在市场 上已经基本绝迹了。所以,我们今天只讨论4个逻辑BANK的情况。下图就是一个容量为32MB(256Mbit)内存芯片内部逻辑BANK结构示意图


,这样可以更加直观地了解逻辑BANK的工作情况,内存在工作时,一个时钟周期内只允许对一个逻辑BANK进行访问,而不是同时访问4个逻辑BANK。每 个逻辑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位宽目前的工艺水平只 能最多做到16位,因此大家看到几乎所有的芯片逻辑BANK位宽只可能4/8/16三者之一。关于位宽的问题,我们在下面的段落里还有进行阐述。

二、 内存的物理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是我们经常碰到但又很难解决的一个问题,特别对于已相对较老的主板进行升级尤为如此。这也是进行内存升级的很重要的一个方面,只有真正做到了然于胸,才能事半功倍。


阅读(1057) | 评论(0) | 转发(1) |
0

上一篇:Makefile

下一篇:解读内存中的Bank与CL

给主人留下些什么吧!~~