资源描述
,.
深入了解内存工作原理
RAM(Random Access Memory)随机存取存储器对于系统性能的影响是每个PC用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM、RDRAM等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM、FP DRAM(块页)等现在不是很常见的内存。
虽然RAM的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM和异步DRAM(asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO和SDRAM进行介绍,当然还会包括RDRAM和SGRAM等等。对于其中同你的观点相悖的地方,欢迎大家一起进行技术方面的探讨。
存储原理
为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。
让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8行,然后找到第7列就能准确的找到这本书了。在RAM存储器中也是利用了相似的原理
现在让我们回到RAM存储器上,对于RAM存储器而言数据总线是用来传入数据或者传出数据的。因为存储器中的存储空间是如果前面提到的存放图书的书架一样通过一定的规则定义的,所以我们可以通过这个规则来把数据存放到存储器上相应的位置,而进行这种定位的工作就要依靠地址总线来实现了。对于CPU来说,RAM就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。如果CPU想要从RAM中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把数据传输给CPU。下面的示意图可以帮助你很好的理解这个过程。
此主题相关图片如下:
上图中的小园点代表RAM中的存储空间,每一个都有一个唯一的地址线同它相连。当地址解码器接收到地址总线送来的地址数据之后,它会根据这个数据定位CPU想要调用的数据所在的位置,然后数据总线就会把其中的数据传送到CPU。
上面所列举的例子中CPU在一行数据中每次知识存取一个字节的数据,但是在现实世界中是不同的,通常CPU每次需要调用32bit或者是64bit的数据(这是根据不同计算机系统的数据总线的位宽所决定的)。如果数据总线是64bit的话,CPU就会在一个时间中存取8个字节的数据,因为每次还是存取1个字节的数据,64bit总线将不会显示出来任何的优势,women工作的效率将会降低很多。
从“线”到“矩阵”
如果RAM对于CPU来说仅仅是一条“线”的话,还不能体现实际的运行情况。因为如果实际情况真的是这样的话,在实际制造芯片的时候,会有很多实际的困难,特别是在需要设计大容量的RAM的时候。所以,一种更好的能够降低成本的方法是让存储信息的“空格”排列为很多行--每个“空格”对应一个bit存储的位置。这样,如果要存储1024bits的数据,那么你只要使用32x32的矩阵就能够达到这个目的了。很明显,一个32x32的矩阵比一个1024bit的行设备更紧凑,实现起来也更加容易。请看下图:
此主题相关图片如下:
知道了RAM的基本结构是什么样子的,我们就下面谈谈当存储字节的过程是怎样的:
上面的示意图显示的也仅仅是最简单状态下的情况,也就是当内存条上仅仅只有一个RAM芯片的情况。对于X86处理器,它通过地址总线发出一个具有22位二进制数字的地址编码--其中11位是行地址,另外11位是列地址,这是通过RAM地址接口进行分离的。行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM数据接口将数据传到数据总线。另外,需要注意的是,RAM内部存储信息的矩阵并不是一个正方形的,也就是行和列的数目不是相同的--行的数目比列的数目少。(后面我们在讨论DRAM的过程中会讲到为什么会这样)
此主题相关图片如下:
上面的示意图粗略的概括了一个基本的SRAM芯片是如何工作的。SRAM是“static
RAM(静态随机存储器)”的简称,之所以这样命名是因为当数据被存入其中后不会消失(同DRAM动态随机存储器是不同,DRAM必须在一定的时间内不停的刷新才能保持其中存储的数据)。一个SRAM单元通常由4-6只晶体管组成,当这个SRAM单元被赋予0或者1的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电之后才会更改或者消失。SRAM的速度相对比较快,而且比较省电,但是存储1bit的信息需要4-6只晶体管制造成本太高了(DRAM只要1只晶体管就可以实现)。
RAM芯片
前面的介绍都相对比较简单、抽象。下面我们会结合实际的RAM芯片进行介绍。在谈到这个问题的时候,我们会涉及到一个比较重要的技术:封装。你应该听说过诸如30线SIMMS、72线SIMMS和168线DIMMS或者RIMMs其中的一个或者几个术语吧。如果要解释这些术语之间的不同,就应该了解RAM的封装技术。
SRAM芯片
早期的SRAM芯片采用了20线双列直插(DIP:Dual Inline Package)封装技术,它们之所以具有这么多的针脚,是因为它们必须:
每个地址信号都需要一根信号线
一根数据输入线和一根数据输出线
部分控制线(Write Enable, Chip Select)
地线和电源线
此主题相关图片如下:
上图显示的是SRAM芯片,但是并不是下面示意图中的SRAM芯片
下面的是一个16K x 1-bit SRAM芯片的针脚功能示意图:
此主题相关图片如下:
A0-A13是地址输入信号引脚
CS是芯片选择引脚
在一个实际的系统中,一定具有很多片SRAM芯片,所以需要选择究竟从那一片SRAM芯片中写入或者读取数据
WE是写入启用引脚(如上表,在CS、WE上面的线我没有写入,表示低电平有效或者是逻辑0时有效):
当SRAM得到一个地址之后,它需要知道进行什么操作,究竟是写入还是读取,WE就是告诉SRAM要写入数据
Vcc是供电引脚
Din是数据输入引脚
Dout是数据输出引脚
GND是接地引脚
Output
Enable(OE):有的SRAM芯片中也有这个引脚,但是上面的图中并没有。这个引脚同WE引脚的功能是相对的,它是让SRAM知道要进行读取操作而不是写入操作。
从Dout引脚读取1bit数据需要以下的步骤:
SRAM读取操作
1)通过地址总线把要读取的bit的地址传送到相应的读取地址引脚(这个时候/WE引脚应该没有激活,所以SRAM知道它不应该执行写入操作)
2)激活/CS选择该SRAM芯片
3)激活/OE引脚让SRAM知道是读取操作
第三步之后,要读取的数据就会从DOut引脚传输到数据总线。怎么过程非常的简单吧?同样,写入1bit数据的过程也是非常的简单的。
SRAM写入操作
1)通过地址总线确定要写入信息的位置(确定/OE引脚没有被激活)
2)通过数据总线将要写入的数据传输到Dout引脚
3)激活/CS引脚选择SRAM芯片
4)激活/WE引脚通知SRAM知道要尽心写入操作
经过上面的四个步骤之后,需要写入的数据就已经放在了需要写入的地方。
DRAM芯片
现在我们知道了在一个简单的SRAM芯片中进行读写操作的步骤了了,然后我们来了解一下普通的DRAM芯片的工作情况。DRAM相对于SRAM来说更加复杂,因为在DRAM存储数据的过程中需要对于存储的信息不停的刷新,这也是它们之间最大的不同。下面让我们看看DRAM芯片的针脚的作用。
最早、最简单也是最重要的一款DRAM芯片是Intel在1979年发布的2188,这款芯片是16Kx1 DRAM 18线DIP封装。“16K x 1”的部分意思告诉我们这款芯片可以存储16384个bit数据,在同一个时期可以同时进行1bit的读取或者写入操作。(很抱歉找不到这款芯片的实物图片,只好自己简单的画了一个示意图)
此主题相关图片如下:
上面的示意图可以看出,DRAM和SRAM之间有着明显的不同。首先你会看到地址引脚从14根变为7根,那么这颗16K DRAM是如何完成同16K SRAM一样的工作的呢?答案很简单,DRAM通过DRAM接口把地址一分为二,然后利用两个连续的时钟周期传输地址数据。这样就达到了使用一半的针脚实现同SGRAM同样的功能的目的,这种技术被称为多路技术(multiplexing)。
那么为什么好减少地址引脚呢?这样做有什么好处呢?前面我们曾经介绍过,存储1bit的数据SRAM需要4-6个晶体管但是DRAM仅仅需要1个晶体管,那么这样同样容量的SRAM的体积比DRAM大至少4倍。这样就意味着你没有足够空间安放同样数量的引脚(因为针脚并没有因此减少4倍)。当然为了安装同样数量的针脚,也可以把芯片的体积加大,但是这样就提高芯片的生产成本和功耗,所以减少针脚数目也是必要的,对于现在的大容量DRAM芯片,多路寻址技术已经是必不可少的了。
当然多路寻址技术也使得读写的过程更加复杂了,这样在设计的时候不仅仅DRAM芯片更加复杂了,DRAM接口也要更加复杂,在我们介绍DRAM读写过程之前,请大家看一张DRAM芯片内部结构示意图:
此主题相关图片如下:
在上面的示意图中,你可以看到在DRAM结构中相对于SRAM多了两个部分:由/RAS (Row Address
Strobe:行地址脉冲选通器)引脚控制的行地址门闩线路(Row Address Latch)和由/CAS(Column Address
Strobe:列地址脉冲选通器)引脚控制的列地址门闩线路(Column Address Latch)。
DRAM读取过程
1)通过地址总线将行地址传输到地址引脚
2)/RAS引脚被激活,这样行地址被传送到行地址门闩线路中
3)行地址解码器根据接收到的数据选择相应的行
此主题相关图片如下:
4)/WE引脚被确定不被激活,所以DRAM知道它不会进行写入操作
5)列地址通过地址总线传输到地址引脚
6)/CAS引脚被激活,这样列地址被传送到行地址门闩线路中
7)/CAS引脚同样还具有/OE引脚的功能,所以这个时候Dout引脚知道需要向外输出数据。
此主题相关图片如下:
8) /RAS和/CAS都不被激活,这样就可以进行下一个周期的数据操作了。
其实DRAM的写入的过程和读取过程是基本一样的,所以如果你真的理解了上面的过程就能知道写入过程了,所以这里我就不赘述了。(只要把第4步改为/WE引脚被激活就可以了)。
DRAM刷新
我们已经提到过,DRAM同SRAM最大的不同就是不能比较长久的保持数据,这项特性使得这种存储介质对于我们几乎没有任何的作用。但是DRAM设计师利用刷新的技术使得DRAM称为了现在对于我们最有用处的存储介质。这里我仅仅简要的提及一下DRAM的刷新技术,因为在后面介绍FP、EDO等类型的内存的时候,你会发现它们具体的实现过程都是不同的。
DRAM内仅仅能保持其内存储的电荷非常短暂的时间,所以它需要在其内的电荷消失之前就进行刷新直到下次写入数据或者计算机断电才停止。每次读写操作都能刷新DRAM内的电荷,所以DRAM就被设计为有规律的读取DRAM内的内容。这样做有下面几个好处。第一,仅仅使用/RAS激活每一行就可以达到全部刷新的目的;第二,DRAM控制器来控制刷新,这样可以防止刷新操作干扰有规律的读写操作。在文章的开始,我曾经说过一般行的数目比列的数据少。现在我可以告诉为什么会这样了,因为行越少用户刷新的时间就会越少。
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位宽的内存颗粒就可以达到同样的容量,当然这样的内存条工作原理在理解的过程中比原来略微复杂一点。我们看到在上面的4Mbit8bit芯片中,依然还是有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控制电路配合的。
FPM DRAM( Fast Page Mode DRAM)(本文来自风笛工作室)
在《深入了解内存(三)——DRAM读取过程》一文中我们介绍了DRAM的详细的读取过程,在本文的这一节中我们将要开始了解FPM DRAM( Fast Page
Mode DRAM),也就是我们常说的快页内存。之所以称之为快页内存,因为它以4字节突发模式传送数据,这4个字节来自同一列或者说同一页。
如何理解这种读取方式呢?FPM
DRAM如果要突发4个字节的数据,它依然需要依次的读取每一个字节的数据,比如它要读取第一个字节的数据,这个时候的情况同前面介绍的DRAM读取方式是一样的(我们依然通过读取下面的FPM读取时序图来了解它的工作方式):
1、首先行地址被传送到行地址引脚,在/RAS引脚被激活之前,RAS处于预充电状态,CAS也处于预充电状态,当然/WE此时依然是高电平,FPM至少知道自己不会进行写操作。
2、/RAS引脚被赋予低电平而被激活,行地址被送到行地址选通器,然后选择正确的行送到传感放大器,就在/RAS引脚被激活的同时,tRAC开始计时
3、CAS一直处于预充电状态,直到列地址被传送到列地址引脚并且
/CAS引脚得到一个低电平而被激活(tCRC时间开始计时),然后下面的事情我们也应该很清楚了,列地址被送到列地址选通器,然后需要读取的数据位置被锁定,这个时候Dout引脚被激活,第一组数据就被传送到数据总线上
4、对于原来介绍的DRAM,这个时候一个读取周期就结束了,不过对于FPM则不同,在传送第一组数据期间,CAS失活(RAS依然保持着激活状态)并且进入预充电状态,等待第二组列地址被传送到列地址引脚,然后进行第二组数据的传输,如此周而复始直至4组数据全部找到并且传输完毕
5、当第四组数据开始传送的时候,RAS和CAS相继失活进入到预充电状态,这样FPM的一个完整的读取周期方告结束。FPM之所以能够实现这样的传输模式,就是因为所需要读取的4个字节的行地址是相同的但是列地址不同,所以它们不必为了得到一个相同的列地址而去做重复的工作。
6、这样的工作模式显然相对于普通的DRAM模式节省了很多的时间,特别是节省了3次RAS预充电的时间和3个tRAC时间,从而进一步提高的效率。
此主题相关图片如下:
我想你一定看到过诸如6-3-3-3这样的内存标注方法,其中的6表示从最初状态读取第一组数据需要6个时钟周期,而读取另外三个数据仅仅需要3个时钟周期就能达到目的了。
需要特别指出的是,在上面的时序图中,我们并没有标注出 FPM
DRAM进行第二个、第三个、第四个数据输出的前进行新的列地址选通的时间,但是从上面的示意图中我们可以看到Col.2同Data1和D2之间都没有重叠,所以这三个数据的输出是进行完毕一个再进行的另一个,因此再上一次数据传输完毕到下一次列地址传输之间还有一点小小的延迟。请看下图:
此主题相关图片如下:
EDO DRAM( Extended Data Out DRAM:扩展数据输出DRAM)
在介绍FPM的读取过程的最后我着重提到了 FPM DRAM是在上一次的数据读取完毕才会进行下一个数据的读取,但是对于EDO DRAM却是完全不一样的。 EDO
DRAM可以在输出数据的同时进行下一个列地址选通,我们依然结合下面的EDO读取时序图来了解EDO DRAM读取数据的过程:
此主题相关图片如下:
1、RAS在结束上一次的读取操作之后,进入预充电状态,当接到读取数据的请求之后,行地址首先通过地址总线传输到地址引脚,在这个期间CAS依然处于预充电状态
2、/RAS引脚被激活,列地址开始经过行地址选通电路和行地址解码器进行行地址的选择,就在这个同时tRAC周期开始,因为是读取操作/WE引脚一直没有被激活,所以内存知道自己进行的是读取操作而不是写操作
3、在CAS依然进行预充电的过程中,列地址被送到列地址选通电路选择出来合适的地址,当/CAS被激活的同时tCAC周期开始,当tCAC结束的时候,需要读取的数据将会通过数据引脚传输到数据总线。
4、从开始输出第一组数据的时候,我们就可以体会到EDO同FPM之间的区别了:在tCAC周期结束之前,CAS失活并且开始了预充电,第二组列地址传输和选通也随即开始,第一数据还没有输出完毕之前,下一组数据的tCAC周期就开始了--显然这样进一步的节省了时间。就在第二组数据输出前,CAS再次失活为第三组数据传输列地址做起了准备……
5、如此的设计使得EDO内存的性能比起FPM的性能提高了大约20-40%.
6、正是因为EDO的速度比FPM快,所以它可以运行在更高的总线频率上。所以很多的EDO RAM可以运行在66MHz的频率上,并且一般标注为5-2-2-2。
SDRAM
主要谈论我们大家都能接触到的SDRAM内存了,首先得承认SDRAM同我们之前介绍的异步DRAM是差别非常大的。它的基本原理同前面提到的DRAM还是基本一样的(比如基本存储单元都是按照阵列排列,都有RAS和CAS的概念),不过这些存储单元的组织和控制同DRAM就具有相当大的差别了。在前面我们讨论其它类型的内存都是采用了以具体的产品为例来讲述的,所以这里我们依然采用这种形式,这次我们以
MICRON MT48LC4M4A1 16MB SDRAM为例。(如果你感兴趣可以去www.micronsemi.com网站查找相应的资料)。
如果你还记得我们在前面介绍的DRAM相关内容,那么应该还记得
DRAM是以bank来组织存储单元的。因为每个内存bank的位宽是同数据总线阿位宽一样的。所以对于SIMM,你必须把多个SIMM放在一个bank之中来满足32bit或者64bit数据总线的要求。DIMM具有更多阿引脚,所以单个DIMM可以提供足够的同数据总线相适应的位宽--这样每个bank只要一个DIMM就可以了。而且
SDRAM更进一步的是可以在单个的DIMM中存在多个bank,这样不但能够满足数据总线的需要还能进一步的提高总线的性能。下面就让我来解释一下:
在我们前面讨论的DRAM读取方式中,当一个读取周期结束后,/RAS和/CAS都必须停止激活然后有一个短暂的预充电期才能进入到下一次的读取周期中。但是一个具有两个bank的SDRAM的模组中,其中一个bank在进行预充电的期间另一个bank却可以被调用--这样当你需要读取已经预充电的bank的数据时,就无需等待而是可以直接调用了。为了实现这个功能,SDRAM就需要增加对于多个bank的管理,这样就可以实现控制其中的bank进行预充电,并且在需要使用的时候随时调用了。这样一个具有两个bank的SDRAM一般会多一根叫做BA0的引脚,实现在两个bank之间的选择--一般的BA0是低电平表示Bank0被选择,而BA0是高电平Bank1就会被选中。
可见,虽然SDRAM在基本的原理上比如基本存储的结构都是基本一样的,但是在整个内存架构的组织上是不同的,而且在存储单元的控制上也是有着相当大的区别的。因为异步DRAM同处理器和芯片的时钟并没有什么关系,所以芯片组只能按照DRAM内存的时序要求“被动”的操作DRAM控制引脚。SDRAM因为要同CPU和芯片组共享时钟,所以芯片组可以主动的在每个时钟的上升沿发给引脚控制命令。
上图显示的就是MT48LC4M4A1 16MB
SDRAM内存颗粒的引脚示意图,它采用了50引脚的TSOP封装,符合PC100规范。这种内存颗粒将同系统时钟同步运行。这种内存颗粒的架构1Mx16-512Kx16x2,每bank行地址数目是11,列地址数目是8。我们首先来介绍一下这种内存颗粒的引脚定义:
A0-A10:地址输入引脚,当ACTIVE命令和READ/WRITE命令时,来决定使用某个bank内的某个基本存储单元。
CLK:时钟信号输入引脚
CKE:Clock Enable,高电平时有效。当这个引脚处于低电平期间,提供给所有bank预充电和刷新的操作
/CS:芯片选择(Chip Select),SDRAM DIMM一般都是多存储芯片架构,这个引脚就是用于选择进行存取操作的芯片
/RAS:行地址选择(Row Address Select)
/CAS:列地址选择(Column Address Select)
/WE:写入信号(Write Enable)
DQ0-DQ15:数据输入输出接口
BA:Bank地址输入信号引脚,BA信号决定了由激活哪一个bank、进行读写或者预充电操作;BA也用于定义Mode寄存器中的相关数据。
NC:空引脚
DQM: 这个引脚的主要用于屏蔽输入/输出,功能相当于/OE引脚( Output Enable)。
VDDQ:DQ供电引脚,可以提高抗干扰强度
VSSQ:DQ供电接地引脚
VSS:内存芯片供电接地引脚
VDD:内存芯片供电引脚,提供+3.3V 0.3V
(上面的列表项目和示意图中,前面标有“/”或者“#”标记的表示在低电平下有效)
下面的表格在不同的状态下(或者说不同命令下)的各个引脚的信号。“H”代表高电平,“L”代表低电平,“X”代表可以是任何状态,也就是该引脚同该命令并没有直接的关系。
功能 /CS /RAS /CAS /WE DQM ADDR.
COMMAND INHIBIT (NOP) H X X X X X
NO OPERATION (NOP) L H H H X X
ACTIVE (选择bank并且激活相应的行) L L H H X Bank/Row
READ (选择bank和列地址,并且开始突发读取) L H L H X Bank/Col
WRITE (选择 bank和列地址,并且开始突发写入) L H L L X Bank/Col
BURST TERMINATE(停止当前的突发状态) L H H L X X
PRECHARGE (让相应的bank中的行失活或者让该bank失活) L L H L X Code
AUTO REFRESH(进入自动刷新模式) L L L H X X
LOAD MODE REGISTER L L L L X Op-code
写入启用/输出启用 L
写入禁止/输出禁止 H
如果你对于我们前面介绍的内容有了真的有所了解了,看到上面的芯片引脚示意图和各个针脚的功能示意图就基本对于SDRAM的工作工程有了一个基本的了解了,在下面的章节里我们就对于这个过程进行详细的介绍,首先我们对于一些基本的概念做一些了解。
这条SDRAM颗粒采用了双bank(每bank 512K x 16
DRAM)的工作电压是3.3V,并且采用同步接口方式(所有的信号都是时钟信号的上升沿触发)。每一个512K x
16-bitbank由2,048行乘以256列个基本存储单元构成,输出数据位宽是16
bit。Read和write操作都是通过突发导向模式访问SDRAM的;这种访问模式以访问指定的区域开始的,然后按照预先设定的方式定位其它的数据的所在。每次访问都是以ACTIVE命令启动的,然后仅仅跟着一个READ或者WRITE命令。不过在进行所有这些操作之前,SDRAM必须首先进行初始化。
初始化
SDRAM在上电之后,必须首先按照预定的方式进行初始化才能正常的运行。一旦VDD和VDDQ被同时供电并且时钟稳定下来,SDRAM就需要一个100微秒的延迟,在这个时间段中COMMAND
INHIBIT和NOP指令有效,这个过程实际上就是内存的自检过程,一旦这个过程通过之后一个PRECHARGE命令就会紧紧随着最后一个COMMAND
INHIBI
展开阅读全文
相关搜索