stdlf
分类:
2010-01-23 23:05:03
内容:
RAM模块基础
在前面的一节文章中我们对于DRAM和SRAM的基本工作原理做了一些简单的介绍,在我们所列举的例子中都是介绍了最基本的存储单元的工作模式,所以应该不难理解,看到很多朋友对于这个方面的东西很感兴趣,今天我就继续介绍关于RAM(Random Access Memory)的部分知识。理解这个部分知识,是更好的了解以后我们介绍各种RAM的实际工作情况的基础。
在SRAM或者DRAM的每一个基本存储单位(也就是上一节中介绍用来存储1bit信息的存储单位)都只能存储0或者1这样的数据,而且在上一节中IDT6167和Intel 2188芯片都仅仅只有Din(数据输入)和Dout(数据输出接口),而CPU存取数据的时候是按照字节(也就是8bit)来存储的,那么RAM究竟如何满足CPU的这样的要求呢?
首先为了能存储1字节(8 bit)的信息,就需要8个1bit RAM基本存储单元堆叠在一起,这也意味着这8颗芯片被赋予了同样的地址。下面的示意图可以帮助你比较形象的了解这一点(下图所示的图例中仅仅画了4个存储单元,大家当成8个来看就可以了)。
通常这8颗1bit芯片是通过地址总线和数据总线在PCB(印刷电路板)上连接而成的,对于CPU来说它就是一颗8bit的RAM芯片,而不再是独立的8个1 bit芯片。在上图所示的地址总线位宽是22bit,这样这个地址总线所能控制的存储模块的容量应该是222=4194304bit,也就是4MB的容量;数据总线的位宽是8bit,就是通过刚才提到的8个1bit的基本存储单元的Dout并联在一起实现的--这样也能够满足CPU的要求了。(对于这种存储颗粒我们称之为4194304 x 8模块或者4Mx8,注意这里的“M”不是“MByte”而是“Mbit”)。
为了举例说明,我们用一条TI(德仪公司)出品的TM4100GAD8 SIMM内存为例来说明,因为这种内存的构造相对比较简单,便于大家理解。TM4100GAD8基于4M x 8模块制造,容量4MB,采用30线SIMM封装。如果前面我说的东西你看明白了,就应该知道这条内存采用了4Mx1 DRAM颗粒。下面的数据是我在TI官方网站上找到的(目前很少有公司的网站还提供自己以前产品的数据):
构造:4194304 × 8
工作电压:5-V
30线SIMM(Single In-Line Memory Module:SIMM)
采用8片4Mbit DRAM内存颗粒,塑料SOJs封装
长刷新期16 ms(1024周期)
在上面的示意图中,A0–A10是地址输入引脚
/CAS:行地址脉冲选通器引脚
DQ1–DQ8:数据输入/数据输出引脚
NC:空信号引脚
/RAS:列地址脉冲选通器引脚
VSS:接地引脚
/W:写入启用引脚
VCC 5V供电引脚
上面的电路示意图应该能够让我们更加清楚的理解这个问题,TM4100GAD8由8片4096x1bit芯片组成,VCC和VSS为所有的芯片提供5v的电压。每个芯片都具有/RAS、/CAS、/W引脚同内存相应的引脚连通。每个芯片都具有不同的数据输出/输出接口。这样我们应该就能够知道RAM是如何满足CPU存取数据的需要的了。
关于Bank的问题
前面我们讲述的都是8bit的内存,现在这种东西我们基本上都接触不到了,更常用的是32bit、64bit或者128bit。由于前面我们已经讲到了4Mx1bit模块实现bit输入输出的方法,所以我们很容易想到我们把足够多的芯片放在一个模块中就可以了。不过在实际应用中,仅仅这样做还是不行的,这里就需要引入bank的概念,bank是由多个模块组成的。请看下面的示意图:
上面的示意图显示的是由4组8bit模块组成的一个bank,如果构成模块的是4194304 x 1芯片,那么每个模块的架构应该是4194304x8(4MB),这样4个模块就能组成一个位宽为32bit的bank,容量为16MB。当存储数据的时候,第一模块存储字节1,第二个模块存储字节2,第三个模块存储字节3,第四个模块存储字节4,第五个模块存储字节5……如此循环知道达到内存所能达到的最高容量。
文章读到这里,我们应该能知道,当我们的系统使用这种类型的内存时,可以通过两种方式来增加这种类型内存的容量。第一种就是通过增加每一个独立模块的容量来增加bank的容量,另外一个方法就是增加bank的数目。这样如果让这种类型的内存的容量提升到32MB,可以把每个模块的容量从4MB提升到8MB或者增加bank的数目。
前面我们用来举例的这种30线的SIMM一般是用在486级别的电脑上的,而现在的Pentium级别的电脑所使用的内存同这个是不同的。而截止到现在,我的这篇文章还没有涉及到我们目前所使用的内存,不过不要着急,相信充分的理解我现在所谈论的东西将有助于你理解以后的内容。不过这里可以先告诉大家的是Pentium级别的内存和486系统的内存之间的主要差异在于它们的RAM芯片。
SIMM和DIMM
前面我们既然提到了30线的DIMM,那么我们就来介绍一下SIMM以及与之相对应的DIMM。其实SIMM和DIMM都是内存条的封装形式的一种(这里说的不是芯片的封装形式),因为每片内存颗粒无法直接同计算机进行连接并且通讯的,并且它们单颗颗粒的容量有限而且涉及到前面提及的数据传输位宽等方面的原因,所以内存厂商需要通过一定的形式把它们组织到一起,这样就产生了不同的内存封装形式。
首先我们来介绍一下SIMM,如下图(上面一条是30线DIMM内存,下面一条是72线DIMM内存):
在DIMM内存中的颗粒采用了DIP(Dual Inline Package:双列直插封装)封装,如上图中黑色的芯片。早期的内存颗粒是直接焊接在主板上面的,这样如果一片内存出现故障,那么整个主板都要报废了。后来在主板上出现了内存颗粒插槽,这样就可以更换内存颗粒了,但是热膨胀的缘故,每使用一段时间你就需要打开机箱把内存颗粒按回插槽。
除了这些原因,更重要的是我们前面提到的数据总线位宽等方面的原因使得工程师着手设计了SIMM(Single Inline Memory Module)封装和DIMM(Double Inline Memory Module)的内存,它们通过主板上的内存插槽同主板进行通讯。这样的设计解决了原来所有的问题。SIMM内存根据引脚分为30线和72线,目前我们都很少用到了。
SIMM Diagram
SIMM根据内存颗粒分布可以分为单面内存和双面内存,一般的容量为1、4、16MB的SIMM内存都是单面的,更大的容量的SIMM内存是双面的。在我们本文中所列举的TM4100GAD8就是一款30线的内存,它每次仅能传输8bit的数据--从前面的示意图中我们也知道这30线引脚中有11线是地址引线,8线是数据引线,还有其它的控制引线,对于当时的封装工艺这已经是比较不错了。比较细心的读者会问为什么还有三条空信号引脚?因为这种内存的数据输出总线位宽只有8bit,所以即使将空信号引脚转换为地址总线提高寻址范围,但是并没有足够多的引脚用于数据的输出。72线的SIMM内存的容量不但可以更大,而且数据总线的位宽也得到了极大的提高。一条72线SIMM内存的数据总线位宽是32bit,它的数据输出能力大大提高了。
DIMM是目前我们使用的内存的主要封装形式,比如SDRAM、DDR SDRAM、RDRAM,其中SDRAM具有168线引脚并且提供了64bit数据寻址能力。DIMM的工作电压一般是3.3v或者5v,并且分为unbuffered和buffered两种。上图上面的内存就是168线的SDRAM,而下面的内存是72线的SIMM。需要指出的是在SIMM和DIMM内存之间不仅仅是引脚数目的不同,另外在电气特性、封装特点上都有明显的差别,特别是它们的芯片之间的差别相当的大。因为按照原来内存制造方法,制造这种内存的时候是不需要把64个芯片组装在一起构成一个64bit的模块的,得益于今年来生产工艺的提高和改进,现在的高密度DRAM芯片可以具有不止一个Din和Dout信号引脚,并且可以根据不同的需要在DRAM芯片上制造4、8、16、32或者64条数据引脚。
如果一个DRAM芯片具有8个数据引脚,那么这个基本储存单元一次就可以输出8bit的数据,而不像是在原来的TM4100GAD8 SIMM芯片中每次仅仅能输出1bit数据了。这样的话,如果我们需要制造一个同TM4100GAD8一样容量的内存,那么我们可以不使用前面所使用的4M x 1bit芯片,而是采用1M x 8bit芯片,这样仅仅需要4片芯片就可以得到一个容量为4MB,位宽为32bit的模组。芯片数目减少最直接的好处当然是可以减少功耗了,当然也简化了生产过程。
下面的图只是为了说明这个问题而制作的,它展示的是一种72线的4MB SIMM内存,采用了4片1Mx8bit DRAM芯片。但是至于是不是真的有这样的一款产品我也不能确定,因为目前为之我找不到实际的产品相关资料,所以这个只是为了帮助大家理解这个问题,不要对于是否有这样的产品而斤斤计较。
这样一来,只要4片采用具有8bit位宽的内存颗粒就可以达到同样的容量,当然这样的内存条工作原理在理解的过程中比原来略微复杂一点。我们看到在上面的4Mbit×8bit芯片中,依然还是有10条地址总线引脚,但是/CAS和/RAS引脚却从原来的1条增加到4条。当然数据输入输出引脚线数目是32条。
其实TI公司的TM124BBJ32F和TM248CBJ32F前面的我所列举的例子是比较相似的:
这两款内存的容量均为4MB,位宽为32bit,当然也属于DRAM了。TM124BBJ32F内存为单面而TM248CBJ32F双面的两种模式,不过其中单面TM124BBJ32F有些奇怪,在它的内存条上只有两颗内存芯片,这样每颗内存芯片应该是2MBx16bit。另外,双面的TM248CBJ32F由4片1Mx8bit DRAM芯片组成。
上面的示意图和表格是TM124BBJ32F和TM248CBJ32F的示意图和表格,我们可以很容易的理解它们的工作模式。
对于TM124BBJ32F来说:因为是2MBx16bit的颗粒,所以当RAS0引脚为低电平时,DQ0-DQ15输出/输入引脚有效,所以它可以同时传送一个16bit数据;让RAS1引脚为低电平时,DQ16-DQ31输出/输入引脚有效,也可以一次传送一个16bit数据。
对于TM248CBJ32F来说:因为是1MBx8bit的颗粒,所以情况同前面是不同的,当RAS0引脚为低电平时,DQ0-DQ7输出/输入引脚有效,所以它可以同时传送一个8bit数据;让RAS1引脚为低电平时,DQ6-DQ15输出/输入引脚有效,也可以一次传送一个8bit数据;让RAS2引脚为低电平时,DQ16-DQ23输出/输入引脚有效,也可以一次传送一个8bit数据;让RAS3引脚为低电平时,DQ24-DQ31输出/输入引脚有效,也可以一次传送一个8bit数据(注意这里虽然都是控制输出8bit或者16bit地址,但是它们之间分别代表的含义是不同的)。当然在确定地址的时候,还是需要CAS控制电路配合的。