深入了解内存(六)--SDRAM写入过程
2007-11-11 06:52:47 来源:WEB开发网核心提示:在前面部分的文章中我们对于SDRAM的读取过程进行了详细的讨论,不过今天我发现在其中有个比较重要的重要的概念并没有单独的提出来讲解一下,深入了解内存(六)--SDRAM写入过程,但是前面对于SDRAM读取过程的讲解中如果仔细领会也应该对于CAS的概念比较了解了,在本章节的开始我们还是对于这个问题进行一下专门的讨论吧,
在前面部分的文章中我们对于SDRAM的读取过程进行了详细的讨论,不过今天我发现在其中有个比较重要的重要的概念并没有单独的提出来讲解一下,但是前面对于SDRAM读取过程的讲解中如果仔细领会也应该对于CAS的概念比较了解了。在本章节的开始我们还是对于这个问题进行一下专门的讨论吧。 SDRAM CAS延迟 如果你的主板支持对于内存进行比较全面的控制,那么你应该在其中看到有关于CAS的选项,一般的可以选择CAS 1、CAS 2或者CAS 3。你选择不同的CAS值取决于你想要内存在什么样子的频率上运行。在本章节中主要就是告诉CAS latency值对于计算机系统究竟意味着什么以及为什么它们同总线速度有关。 CAS延迟(CAS latency)指的就是在READ命令触发到第一次数据输出之间的时间,这个时间的单位是以时钟周期。这个延迟时间可以设定为1、2、3个时钟周期。也就是说,如果READ命令在第n个时钟上升沿被触发,延迟时间为m个时钟周期,那么数据将会在第n+m个时钟上升沿开始输出。下面的图表(图片都是来自Micron的数据库中关于MT48LC4M4A1的资料)可以帮助你更好的了解这个问题:
图1 另外,DQ会在第(n + m - 1)个时钟周期之后的上升沿开始输出数据,也就是说数据将会在第(n+m)个时钟周期有效。比如说,CAS延迟被设定为2,那么如果READ命令在T0触发,DQ将会在在T1开始驱动,而所需要读取的数据在T2有效并且开始输出。上面的示意图显示了CAS延迟分别在1、2、3下的情况。在上面的三个示意图中我们都可以看到NOP(NO OPERATION:空指令)。SDRAM插入一个NOP空指令是因为SDRAM所有的操作都要同系统的基频同步,大部分的操作都不是一个时钟周期所能完成的,因此在等待或者空闲状态下为了防止其它的命令被触发,所以需要不停的发送NOP命令来抑制其他的指令,但是并不会干扰当前正在进行的操作。当然需要注意的是NOP指令的发送并不是随机的,而是根据用户的设定已经预设好的。
表1 CAS延迟和总线时钟之间的关系可以同下面的CAL LATENCY表格中看出,一般系统总线速度越快,CAS延迟也会越长。这是因为目前的内存基本存储单元架构决定了其所能达到的最高运行频率,为了保证同目前总线时钟的同步,只能采用这样的方法了。 WRITE过程分析 WRITE突发过程是以WRITE指令的初始化开始的,在初始化过程中起始列和bank地址将会被确定。如果AUTO PRECHARGE有效,被访问的行将会在突发结束后进行预充电。而对于如图2一般的WRITE指令来说,AUTO PRECHARGE指令是会被屏蔽的。
图2、Write Command 如图2所示,这是WRITE命令的写入时的状态,在这个时钟的上升沿,CS#也进行相应的芯片选择,BA已经确定了需要进行操作的Bank,需要操作的行已经打开,直到下次读取操作或者PRECHARGE命令才会关闭该行,所以这个时候RAS#是高电平处于无效状态,因为需要进行列地址的选择,所以CAS#处于低电平,当然因为要进行写入操作WE#也是低电平状态。
图3、Write Burst 在WRITE突发过程中,第一个有效数据在WRITE命令被触发的同时开始写入,如果还有连续的数据,它们会在随后的每个时钟周期的上升时间进行写入操作。在固定长度的突发操作中,假设没有其他的指令被初始化,DQ将会一直保持High-Z状态,这个时候其它的输入数据将不会被执行(图上图3),这个时候当然进入了全页突发的写入模式,在没有中止指令之前这种模式会一直持续而且会循环往复。这个时候如果有新的WIRET指令,那么原来的写入过程将会被中止。同我们前面了解的读取过程一样,在固定长度的WRITE突发模式中可以在任何之前的时钟周期中预先执行持续的WRITE命令。
图4、WRITE to WRITE 如上图4,Data n + 1是上一次写操作的最后一个写入的数据。一个新的WRITE命令可以在以前WRITE命令过程中的任何一个时钟周期进行初始化。
图5(随机写入)在同一页中全速、随机写入的执行情况请参考上面的图5。任何形式的WRITE突发模式都可以被持续的READ命令所中止,而在之前进行的WRITE命令操作所写入最后一个数据之后的时钟周期会马上执行持续的READ操作。
图6(WRITE to READ)如上图6所示,Data n + 1是T0开始的写入操作的最后一个写入数据。在这个数据之后,可以紧紧跟着固定长度的WRITE突发操作或者被PRECHARGE命令中止--当然这样的操作也是在同一个bank之中的。关于PRECHARGE我们会在后面的示意图中讲述。这里我们看到在Data n+1后的第一个时钟周期READ命令开始执行,一旦READ命令被触发,数据输入将会被忽略,WRITE命令将不会被执行。因为CAS=2,所以在T4时钟周期第一组数据开始输出了。
图7(WRITE to PRECHARGE)在图7显示的是两种情况,第一是tWR=1CLK的情况:在T0时钟WRITE命令执行,ADDRESS所选择的列地址确定了需要写入数据的存储单元,也就在这个时钟周期数据开始写入。然后随后的每一个时钟周期都会进行数据的写入,在Din n+1个数据写入之后的时钟周期,PRECHARGE命令执行,这个时候已经打开的列地址被关闭进入预充电状态。在最后一个数据写入的时钟周期的上升沿到PRECHARGE命令开始执行的时钟周期的上升沿之间的时间间隔就是tWR时间。你一定还记得从PRECHARGE命令开始执行的时钟周期的上升沿到下一个ACTIVE命令的执行的时钟周期的上升沿之间的时间间隔是tRP,上图中显示占用了3个时钟周期,期间插入了两个NOP指令。这个时候就可以进行其他的操作了。第二种情况也就是tWR=2CLK的情况下,情况基本是一样的,只是tRW时钟周期不同而已。另外我们看到,在PRECHARGE命令执行期间DQM信号是高电平。PRECHARGE命令的缺点很明显,就是需要同时占用命令总线和地址总线,优点就是可以中止固定长度或者全页突发模式。
图8 固定长度或者全页WRITE突发可以被BURST TERMINATE指令中止。当中止了一个WRITE突发操作,以后的输入数据将都会被忽略。如上图8所示,Din n是前一个WRITE命令的最后一个写入的数据,在随后的一个时钟周期的上升沿BURST TERMINATE将会执行,该
WRITE操作将会被中止,然后内存就可以接受其它的命令。 小节: 关于SDRAM内存的工作原理到这里我们基本上讨论完毕了。最后再对于SDRAM标识问题进行一下讨论。我们经常看到再很多场合这样的标识SDRAM: X-Y-Z 比如说有的SDRAM标识为3-2-2,这个含义同前面的文章介绍的异步DRAM的x-y-y-y是完全不同的:这三个数字依次表示为CAS延迟、RAS-to-CAS延迟、RAS预充电时间。这三项指标再加上内存的运行频率就可以比较详细的表明这款内存的各个方面的情况。说到内存运行频率,它是以MHz为衡量单位的--之前的DRAM都是以纳秒为单位的。 SDRAM我们就讨论到这里,以后我们会继续讨论其它的主流RAM,比如DDR、RDRAM等等。
- ››深入理解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)...
更多精彩
赞助商链接