深入了解内存(五)——SDRAM读取过程分析
2007-11-11 06:52:26 来源:WEB开发网核心提示:在《深入了解内存(四)》一文中,我们对于SDRAM的读取过程中的基本概念做了比较详细的了解,深入了解内存(五)——SDRAM读取过程分析,在这个系列的文章中,我们继续对于SDRAM的读取过程进行更加详细的讨论,但是非常的有规律,应该不难理解, BANK/行的激活过程在进行任何的READ或者WRITE命令的之前,SDR
在《深入了解内存(四)》一文中,我们对于SDRAM的读取过程中的基本概念做了比较详细的了解。在这个系列的文章中,我们继续对于SDRAM的读取过程进行更加详细的讨论。 BANK/行的激活过程在进行任何的READ或者WRITE命令的之前,SDRAM首先要选择进行操作的bank,并且还要打开这个bank中的相应的行。完成这个任务要通过ACTIVE命令来实现,(具体的说,ACTIVE命令主要在subsequent访问模式用于打开/激活所选bank中的行。其中BA引脚输入的信号决定bank的选择,而A0-A10地址引脚决定行地址。被打开的行保持打开/激活状态直到下一次所在bank执行Precharge命令--一般的一个Precharge命令用于在同一个bank中打开不同的行之前)如下图所示显示的CS(芯片选择)信号是低电平处于有效状态;RAS信号是低电平处于有效状态;CAS信号是高电平,表示还没有进行列选择;WE信号是高电平,表现芯片不会进行写操作:
图1 当ACTIVE命令执行完毕之后,需要进行操作的bank中的行就会被打开,这个时候就可以进一步执行READ或者WRITE命令,当然进行这个命令要受限于tRCD(Time-RAS to CAS Delay)规格。tRCD(MIN)就是从开始执行ACTIVE命令到执行READ或者WRITE命令的时间差。比如说,tRCD如果为20ns,当时钟频率为125MHz(也就是每周期8ns)时,tRCD所占据的时钟周期为2.5-3个时钟周期。请看图2,一般的情况下2 <tRCD (MIN)/tCK ≤ 3。当SDRAM需要在同一个bank中打开另外一行时,Prechargerd命令会先把已经打开的行关闭,然后由一个ACTIVE来打开新的行。同一个bank中,在两个相邻的ACTIVE命令之间的时间间隔叫做tRC。在不同的bank之间,执行两个ACTIVE命令之间的时间间隔叫做tRRD。
(点击查看原图)
图2 SDRAM读取状态进阶分析 当行地址选定并且相应的行被打开之后,READ命令将要开始执行,如图3所示。BA引脚依然决定对于哪个bank进行操作,A10引脚的信号决定了是否进行AUTO PRECHAGE--一般的读取操作中AUTO PRECHAGE处于低电平也就是无效状态,如果它处于高电平就说明在读取突发进行完毕之后所读取的行会进入预充电状态,该行也会从打开状态变为关闭状态。A0-A7传输列地址数据。CS依然处于低电平状态,保证对于需要操作芯片的选择。RAS此时处于高电平,因为该行已经打开直到执行PRECHAGE命令才会关闭,所以RAS此时处于无效状态。因为这个时候是对于列的选择,所以RAS处于低电平状态,进行列地址的选择。因为是读取操作WE当然是高电平,处于无效的状态。
图3 在读取突发过程中,当READ命令开始执行之后经过CAS延迟之后的时间数据就会出现在数据总线上,当然随后相邻的数据都是在紧接着的时钟周期的上升沿依次发出。图4所示的就是在各种CAS延迟设定下的从READ命令到数据输出的情况:
图4 当完成了读取突发操作之后,如果这个时候没有其它的命令进行初始化,那么DQs将会进入到HighZ状态。然后内存就会进入全页突发模式,直到被中止--否则的话,即使是读取到了页尾,它会从该行的列0重新开始读取。任何的READ突发能够被持续READ命令所中止,并且具有新的突发长度的READ命令所产生的数据后可以紧紧跟着前面READ突发命令所产生的数据发出。这样就能够保持数据的连贯性。图5可以让你理解这种情况:
图5(顺序读取)从上图可以看到,为了保证数据的连贯性,新的READ突发命令会在上一个READ突发命令所产生的数据之前的x个周期执行。在这里x等于CAS延迟时间减1。图5中可以看到,当CAS延迟等于1时,在Dout n+3数据传输的时钟周期的上升沿,新的READ命令就开始执行(1-1=0);同样在CAS延迟时间等于3时,新的READ指令在Dout n+1数据传输的时钟周期的上升沿开始执行——提前了3-1=2个周期。可见一个READ命令可以在前一个READ读取过程中的任何一个时钟周期开始初始化。
图6(随机读取) 图6所显示的是在CAS分别设置尾1、2、3的状态下,进行随机读取的操作的情况。当CAS1时情况很好理解,新的READ指令总是在前一个READ指令所产生的数据传输的时钟周期的上升沿开始初始化;在CAS3的情况下,为了保证数据输出的连续性,新的READ指令必须提前2个时钟周期初始化,这样我们就看到新的READ指令是紧紧接着上一个READ指令进行初始化的。
图7(READ-WRITE)当然任何READ命令所产生的数据将会被持续的WRITE命令所中止,而且在最后的数据之后的可以紧紧跟着一个WRITE命令(因为受到从READ到WRITE转变的限制,必须等待数据传输完毕才能进行数据写入)。WRITE突发命令是在READ命令数据传输完毕的第一个时钟周期的上升沿开始的。不过,在有的系统中由于SDRAM DQM会经过一个高低电平的转换,所以被设计成为在最后读取数据和WRITE命令之间有一个时钟周期的延迟。
图8 这个地方之所以引入DQM信号,主要是为了避免I/O连接如图7、8所示的情况出现。DQM信号必须维持两个时钟周期的高电平抑制了READ数据的输出才能进行WRITE命令的初始化-- 一旦WRITE命令被触发,DQ将会变为High-Z状态--这个状态同DQM信号的状态并没有关系。只有这样才能进行WRITE操作,但是如果数据输出没有被抑制,那么在第二个WIRTE会发生非法WRITE操作。比如,如果图8中的T4周期DQM是低电平,那么在T5和T7周期的WRITE操作将会是有效的,但是在T6周期的写入操作将会是非法的。在执行写入操作的过程中,DQM信号必须成为低电平,这样才能保证写入的数据没有被屏蔽。图7和图8的主要区别就是后者在写入数据和前一次的数据输出之间插入了NOP指令。
图9(READ-预充电)前面我们介绍的数据读取都是在打开同一个行的前提下进行的,现在我们讨论的是进行不同行的数据的读取或者是中止数据的读取。PRECHARGE命令一般用于同一个bank间的不同的行之间的数据读取。PRECHARGE会在上一次READ命令输出数据最后一个时钟周期的前(x-1)个时钟周期执行,在图9中显示的是当CAS在各种可能状态下的的情况。当CAS等于1的时候,PRECHARGE会提前(1-1)个时钟周期执行预充电操作,从这个PRECHARGE命令到下一个ACTIVE命令之间的时间价格叫做tRP。需要注意的是部分预充电时间同上一次的数据传输时间是有重叠的。随着CAS延迟时间的延长,预充电时间同上次读取操作数据输出的重叠时间就越多。因为PRECHARGE指令要求命令总线和地址总线都必须在指定的时间段内空闲,这是应该是它的缺点;而PRECHARGE命令的优点就是它可以被用来中止可变长度或者全页突发READ指令。
图10(READ-状态中止)全页READ突发和可变长度READ突发都可以用BURST TERMINATE指令来中止。BURST TERMINATE指令一般在最后一个所需要的数据传输前的x时钟周期有效,这里的x依然代表是CAS延迟周期减一。在图10中很清楚的显示出来了BURST TERMINATE的供桌状态,因为前面我已经同大家一起分析了其它情况的工作状态,所以这里我就详细的分析了,留给大家自己思考一下。今天我们用本章节的篇幅介绍了SDRAM读取数据的各种情况,看上去有些复杂,但是非常的有规律,应该不难理解。在随后的文章的中我们会继续对于SDRAM的其它方面的情况进行介绍。
- ››深入理解JAR包
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››深入JavaScript与.NET Framework中的日期时间(3)...
- ››深入JavaScript与.NET Framework中的日期时间(2)...
- ››深入JavaScript与.NET Framework中的日期时间(1)...
更多精彩
赞助商链接