如果你对于我们前面介绍的内容有了真的有所了解了,看到上面的芯片引脚示意图和各个针脚的功能示意图就基本对于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上电会引起一个为止的状态,它会在进行所有正常指令之前被载入。至此,初始化过程完成。
九.DRAM的读取过程
我们还没有谈到我们都关心的一些问题,比如CAS-2和CAS-3之间的区别什么的。现在我们对于DRAM的基础知识已经有了一个基本的了解,下面的文章就是给大家介绍一些现代的内存技术。DRAM读取过程其实我们在以前的文章中已经讨论过DRAM的读写过程了,不过对于内存比较了解的朋友都会发现在前面的介绍中仅仅是对于内存的大致读取过程进行了简述,很多重要的细节都没有详细的讨论。所以我们在文章的这一节的内容中对于这个过程进行详细的讨论。下面就是异步内存的读取过程的步骤,因为异步DRAM的运行并不需要同处理器同频,它的时序信号控制、寻址等操作基本上说是独立控制的,也就是由内存芯片本身所控制,所以在讨论起来比较简单,我们仅仅需要考虑DRAM本身的情况就可以了(这个系列的文章也是本着循序渐进的原则让大家更好的理解内存的工作原理的):1) 行地址通过地址总线传输到地址引脚。2)/RAS引脚被激活,列地址就会被放入行地址选通电路( Row Address Latch:在文章的前面部分我们把它翻译为列地址门闩电路)。3) 行地址解码器( Row Address Decoder)选择正确的行然后送到传感放大器( sense amps)。4) /WE引脚此时不被激活,所以 DRAM知道它们不是进行写操作。5) 列地址通过地址总线传输到地址引脚。6) /CAS引脚被激活,列地址就可以被送到列地址选通器( Column Address Latch)。7) /CAS引脚也被当作输出启动信号( Output Enable),因为一旦/CAS信号被放到传感放大器,就因为这时需要的数据已经找到,所以Dout针脚开始有效,数据可以从内存中传输到系统了。8)/RAS和 /CAS引脚停止激活,等待下一个读取命令。在内存的读取过程中,需要我们考虑的有两个主要类型的延迟。第一类的是连续的DRAM读操作之间的延迟。内存不可能在进行完一个读取操作之后就立刻进行第两个读取操作,因为DRAM的读取操作包括电容器的充电和放电另外还包括把信号传送出去的时间,所以在两个读取操作中间至少留出足够的时间让让内存进行这些方面的操作。在连续的两次读取操作之间,第一种类型的延迟包括 /RAS和 /CAS预充电延迟时间。在/RAS被激活并且失活之后,你必须给它足够的时间为下次激活做好准备。下图可以帮助你更好了解这个过程。
/CAS预充电的过程失一样的,你只要把上图种的“RAS”换成“CAS”就可以了。从前面我们介绍的DRAM读取过程的8个步骤中,我们可以了解到 /RAS和/CAS预充电过程是依次进行的,所以我们在一定的时间里只能进行有限次数的读取操作。特别是在第8个步骤中,当一次读取操作周期结束之后,我们必须让
/RAS和/CAS引脚都失活。实际上,在你让它们失活之后,必须等待预充电过程结束之后才能开始下一个操作(或者还是读取操作、或者是写入操作、或者是刷新操作)。
当然在两次读取操作之间的预充电时间不是限制DRAM速度的唯一因素。第二种延迟类型是叫做内部读取延迟(inside-the-read)。这种延迟同同两次读取操作之间的延迟非常的相似,但是不是由停止 /RAS和/CAS激活而产生的,而是由于要激活/RAS和/CAS而产生的。比如,行存取时间(tRAC)--它就是在你激活RAS和数据最终出现在数据总线之间的时间。同样的列存取时间 (tCAC)就是激活/CAS引脚和数据最终出现在数据总线上之间的时间。下面的示意图可以帮助你更好的理解这两种类型的延迟:
上面的图仅仅是一个示意图,下面的时序图可以帮助你了解不同的延迟时间发生的顺序:
现在让我们花一点时间结合前面介绍的读取过程来研究一下上面的这张示意图:1) 首先看上图第一行,在预充电期间行地址通过地址总线传输到地址引脚,这个期间RAS未被激活,在第三行Address BUS中我们看到数据在这个期间正在行地址总线上,这个期间CAS也处于预充电状态;2) 依然看上图第一行, /RAS引脚被激活(RAS Active,灰色的部分),列地址就会被放入行地址选通电路(第三行Address
Bus中所示),这个期间CAS依然处于预充电状态;在/RAS被激活的同时,tRAC(行存取时间)开始--如上图最后一行Data Bus所示。3) 在/RAS被激活以后,行地址解码器( Row Address Decoder)选择正确的行然后送到传感放大器( sense amps)。4) 在这个期间/WE引脚一直处于不激活的状态,所以 DRAM知道它们不是进行写操作--这个状态将一直持续到开始执行写操作才结束。5) 列地址通过地址总线传输到地址引脚。6) /CAS引脚被激活(如上图第三行),列地址就可以被送到列地址选通器( Column Address Latch)。这个时候tCAC(列地址访问时间)开始计时。7) 在/CAS处于激活状态期间的末尾,/RAS停止激活--也就大约在这个时间附近找到的数据被传送到数据总线进行数据传送(如图data
Bus),在数据总线进行数据传输的过程中,地址总线是处于空闲状态的,它并不接受新的数据--在数据开始创送的同时tRAC和tCAC都结束了。8)就在数据在数据总线上传输期间,/CAS引脚也被停止激活--就是得到一个高电平,从而开始进入到预充电期。RAS和CAS会同时处于预充电期,直到下次/RAS被激活进入到下一个读取操作的周期。相信经过这样的说明大家应该了解DRAM的读取过程了。 在这个基础上我们就可以开始认识SIMM或者DIMM的潜伏期(latency)问题了。首先我们来继续澄清一下几个概念。DRAM潜伏期类型分为两种:访问时间(access time)和周期时间(cycle time)。其中访问时间(access time)同前面我们谈论的第二种类型的延迟有关,也就是同读取周期中的延迟时间;而周期时间(cycle
time)同我们前面谈论的第一种类型的延迟有关,也就是受到两个读取周期之间的延迟时间影响。当然潜伏期的时间很短,都是用纳秒来衡量的。
对于异步 DRAM芯片,访问时间就是从行地址到达行地址引脚的时间起截至到数据被传输到数据引脚的时间段。这样,访问时间为60纳秒的DIMM意味着当我们下达读取数据的命令后,地址数据被送到地址引脚之后要等待60纳米才能达到数据输出引脚。周期时间,从字面上理解就是从两个连续读取操作之间的时间间隔。如何尽可能的减小DRAM的周期时间和访问时间是我们这篇文章后半部分将要详细的讨论的问题。
我们平时说到DRAM内存是多少多少纳秒,这里指的一般是访问时间(我们也会对于为什么采取这样的标称方法进行解释)。我们都知道访问时间越短,意味着内存工作频率会越高。当然内存工作频率越高,意味着可以适应外频更高的处理器。如果处理器的时钟周期较短,而DRAM的潜伏期较长,处理器在很多时间里都是等到DRAM传送数据。因此当DRAM一定时,比如时潜伏期为70纳秒,那么一颗1GHz PIII等待数据的时间将会比一颗 400MHz PII处理器长。当然出现这样的现象是每个用户都不愿意看到的,当的使用的内存速度越慢或者说你的处理器相对越快,你的处理器就会由更多的性能都被这样的等待浪费了。 |