WEB开发网
开发学院数据库MSSQL Server 深入了解内存(四) 阅读

深入了解内存(四)

 2007-11-11 06:52:14 来源:WEB开发网   
核心提示:快页模式内存在《深入了解内存(三)——DRAM读取过程》一文中我们介绍了DRAM的详细的读取过程,在本文的这一节中我们将要开始了解FPM DRAM( Fast Page Mode DRAM),深入了解内存(四),也就是我们常说的快页内存,之所以称之为快页内存,我们看到SDRAM基本的读取过程非常的简单,今天就先谈到这里

  快页模式内存

在《深入了解内存(三)——DRAM读取过程》一文中我们介绍了DRAM的详细的读取过程,在本文的这一节中我们将要开始了解FPM DRAM( Fast Page Mode DRAM),也就是我们常说的快页内存。之所以称之为快页内存,因为它以4字节突发模式传送数据,这4个字节来自同一列或者说同一页。

如何理解这种读取方式呢?FPM DRAM如果要突发4个字节的数据,它依然需要依次的读取每一个字节的数据,比如它要读取第一个字节的数据,这个时候的情况同前面介绍的DRAM读取方式是一样的(我们依然通过读取下面的FPM读取时序图来了解它的工作方式):

首先行地址被传送到行地址引脚,在/RAS引脚被激活之前,RAS处于预充电状态,CAS也处于预充电状态,当然/WE此时依然是高电平,FPM至少知道自己不会进行写操作。

/RAS引脚被赋予低电平而被激活,行地址被送到行地址选通器,然后选择正确的行送到传感放大器,就在/RAS引脚被激活的同时,tRAC开始计时

CAS一直处于预充电状态,直到列地址被传送到列地址引脚并且 /CAS引脚得到一个低电平而被激活(tCRC时间开始计时),然后下面的事情我们也应该很清楚了,列地址被送到列地址选通器,然后需要读取的数据位置被锁定,这个时候Dout引脚被激活,第一组数据就被传送到数据总线上

对于原来介绍的DRAM,这个时候一个读取周期就结束了,不过对于FPM则不同,在传送第一组数据期间,CAS失活(RAS依然保持着激活状态)并且进入预充电状态,等待第二组列地址被传送到列地址引脚,然后进行第二组数据的传输,如此周而复始直至4组数据全部找到并且传输完毕

当第四组数据开始传送的时候,RAS和CAS相继失活进入到预充电状态,这样FPM的一个完整的读取周期方告结束。FPM之所以能够实现这样的传输模式,就是因为所需要读取的4个字节的行地址是相同的但是列地址不同,所以它们不必为了得到一个相同的列地址而去做重复的工作。

这样的工作模式显然相对于普通的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读取数据的过程:



RAS在结束上一次的读取操作之后,进入预充电状态,当接到读取数据的请求之后,行地址首先通过地址总线传输到地址引脚,在这个期间CAS依然处于预充电状态

/RAS引脚被激活,列地址开始经过行地址选通电路和行地址解码器进行行地址的选择,就在这个同时tRAC周期开始,因为是读取操作/WE引脚一直没有被激活,所以内存知道自己进行的是读取操作而不是写操作

在CAS依然进行预充电的过程中,列地址被送到列地址选通电路选择出来合适的地址,当/CAS被激活的同时tCAC周期开始,当tCAC结束的时候,需要读取的数据将会通过数据引脚传输到数据总线。

从开始输出第一组数据的时候,我们就可以体会到EDO同FPM之间的区别了:在tCAC周期结束之前,CAS失活并且开始了预充电,第二组列地址传输和选通也随即开始,第一数据还没有输出完毕之前,下一组数据的tCAC周期就开始了--显然这样进一步的节省了时间。就在第二组数据输出前,CAS再次失活为第三组数据传输列地址做起了准备……

如此的设计使得EDO内存的性能比起FPM的性能提高了大约20-40%.

正是因为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 INHIBIT或者NOP指令而生效,这个期间所有的内存都处于空闲(idle)状态,随后会执行两个AUTOREFRESH周期、当AUTOREFRESH周期完毕之后,SDRAM为进行Mode Register编程做好了准备。因为Mode Register上电会引起一个为止的状态,它会在进行所有正常指令之前被载入。至此,初始化过程完成。

MODE REGISTER
Mode Register一般被用于定义SDRAM运行的模式。其中包括了突发长度(burst length)、突发类型(burst type)、CAS延迟(CAS latency)、运行方式(operating mode)和写入突发模式(如Figure 1所示)。Mode Register通过LOAD MODE REGISTER命令进行编程,这组信息将会一直保存在Mode Register中直到内存掉电之后才会消失。Mode Register中的M0-M2是用来定义突发长度(burst length)的,M3定义突发类型(sequential或者interleaved),M4-M6定义CAS延迟,M7和M8定义运行模式,M9定义写入突发模式(write burst mode),M10和 M11目前保留。Mode Register必须在所有的bank都处于idle状态下才能被载入,在所有初始化工组都进行完毕之前,控制器必须等待一定的时间。在初始化过程中发生了任何非法的操作都可能导致初始化失败从而导致整个计算机系统不能启动。



突发长度(Burst Length)

Read和write操作都是通过突发模式访问SDRAM的,当然突发模式的长度都是在初始化过程中载入Mode Register中载入的参数,这些参数当然是由厂商或者用户定义的。在Figure 1中我们看到突发长度决定了READ或者WRITE命令能够访问的列地址的最大数目。对于sequential和 interleaved这两种突发模式它们的突发长度是1、2、4、8,另外全页(full-page)突发模式仅仅适用于sequential类型。全页突发可以用BURST TERMINATE命令连接来产生任意的突发长度。保留状态(Reserved states)主要用于应付未来的不兼容的情况而准备的。当一个READ或者WRITE命令被发出之后,这个时候突发长度就被选定了。所有的访问操作都会以这个突发长度为限进行读取操作。当突发长度设为2时,A1-A7将会作为数据输入输出的列地址线;当突发长度设定为4时,A2-A7将会作为数据输入输出的列地址线;当突发长度被设定为8时,A3-A7将会作为数据输入输出的列地址线。

突发类型(Burst Type)
突发类型主要分为两种:sequential和interleaved——主要由M3所决定。访问顺序主要由突发长度、突发类型和起始列地址所决定,如下表:



禁止指令(COMMAND INHIBIT)和空指令(NOP)
这两条指令是CS信号的两个不同的状态。前面我们提到 /CS信号可以赋予芯片两种状态:参与工作和休息。 /CS处于未激活状态(也就是禁止指令生效的时候), SDRAM此时不对于任何传送到这个引脚上的指令作出反应; /CS引脚处于激活状态的情况下才会对于传送到引脚上的指令作出反应。

空指令(NOP)这个指令将激活 /CS,但是它仅仅告诉芯片什么说不作——但是为什么要有这样的看似多余的指令呢?在后面的CAS延迟时间中我们将会涉及到。

ACTIVATE、READ和 WRITE
如果要了解基本的 READ和WRITE操作,那么你就应该需要了解这三条指令。 ACTIVATE指令的主要就是选择一个bank并且激活相应的行; READ指令就是读取指定的行的数据; WRITE指令就是在指定的bank和列中写入数据。下面就让我们看看SDRAM读取时序图:



1) 行地址通过地址总线传输到地址引脚(Address Bus行),当在第一个时钟周期的上升沿,通过ACTIVATE指令通过 /CS激活了相应的行地址--当然确定指定的行之前BA0引脚会选择相应的bank。
2) /WE引脚在这个过程中一直不会被激活,所以S DRAM知道它们不是进行写操作
3) 第三个时钟周期的开始,ACTVATE指令激活了/CAS并且得到指定的列地址
4) 第五个到第十个时钟周期的上升沿都会有数据输出到数据总线。


我们看到SDRAM基本的读取过程非常的简单。今天就先谈到这里,在以后的文章中我们将会对于SDRAM相关的问题继续进行讨论。

Tags:深入 了解 内存

编辑录入:coldstar [复制链接] [打 印]
赞助商链接