Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4141746
  • 博文数量: 241
  • 博客积分: 15936
  • 博客等级: 上将
  • 技术积分: 25293
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 11:22
个人简介

Fedora-ARM

文章分类
文章存档

2016年(3)

2014年(1)

2013年(3)

2012年(50)

2011年(61)

2010年(26)

2009年(27)

2008年(21)

2007年(49)

分类: 服务器与存储

2011-11-30 17:43:29

    最近在认真研究DDR2芯片的时序和配置过程。在看到有关时序的时候有tRCD和AL,没有搞清楚他们之间的关系的话在看时序的时候会比较混乱。所以专门找了下这方面的知识,总结如下。

    首先要看看关于学习DDR2时值得一看的资料,这些资料极有参考价值。

    对于AL的解释,美光有一个技术文档还算是解释的比较到位的:

    当然尔必达也有一份技术文档,讲的也不错:

    尔必达的图其实很好,但是有点复杂,建议理解了美光的图后在看尔必达的文档,这样就可以完全理解了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    现在需要分清楚的是tRCD、AL、RL等的概念:以数据的读取为例。
    如果需要DDR中突发读取数据BL(突发长度)为4,则必须先发出激活bank命令(同时送上行地址),然后发出读命令(同时送上列地址),然后就可以在数据总线上读到数据了。但是这个过程中有几个参数:

tRCD在发送列读写命令时必须与前面的bank激活命令(行有效也在其中)有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS 至CAS 延迟),可以理解为行选通周期。这是根据芯片存储阵列内部响应时间所需要的延迟,这个和芯片的工艺相关,是必然存在的一个延时。tRCD 是SDRAM 的一个重要硬件参数。

CLCAS (列读命令)发出之后,仍要经过一定的时间才能有数据输出,从CAS 读取命令发出到数据稳定输出(可以读取)的这段时间,被定义为CL(CAS Latency,CAS 潜伏期)

这里Delay(延迟)和Latency(潜伏)本质是不同的:Delay是事情要在这个时间之后开始,而Latency是事情已经发生,但是还不够稳定需要一个稳定时间。

    所以从发送出激活bank命令(想要读取数据的时刻)到读到数据这段时间应该是tRCD+CL

    虽然在tRCD中我们可以插入其他bank的激活指令(RAS),但是与上一个RAS必须有BL/2的时钟间隔,否则会出现数据输出冲突。这种情况分析下时序图便知:tRCD+CL的时间是一定的,BL=4的情况下,tRCD+CL后面跟了两个数据输出周期。如果两个bank激活指令(RAS)小于2(BL/2),那么前一个请求的数据的后两字节就和紧跟的那个请求的前两个字节冲突了。数据“轻度追尾”了,后果很严重~~~

    那么我们再来看看美光文档上的图3,Figure 3: DDR2 Bank Interleave Reads with AL = 0(没有使用PostCAS技术的时序)

    本来第三个数据的bank激活命令(RAS)应该在T4那个时钟上的,但是这样又和第一个数据的读命令(列地址数据)冲突了,所以第三个数据的bank激活命令(RAS)只好向后挪了一个时钟,这样数据总线上就出现了一个空洞(效率降低了)。

   虽然这个空洞不过浪费了一个时钟,在实际使用中有影响效率可是不小。所以现在如何改进这个时序呢?在DDR2标准中使用了一个新的技术:Post CAS技术
    Post CAS就是为了提高DDR2内存的利用效率而设定的。在PostCAS操作中,CAS信号(读写/命令)能够被插到RAS信号后面的一个时钟周期,实际的CAS命令可以在附加延迟(Additive Latency,AL)后面执行。原来的tRCD(RAS到CAS延迟)被AL所取代,且AL可以在DDR2的初始化时进行设置。由于CAS信号放在了RAS信号后面一个时钟周期,因此别的bank激活命令(RAS)和CAS信号就不会产生冲突了。

   这里我们就引出了AL这个概念:
   附加延遲(AL, additive latency)是使用Post CAS技术时,总线上发出CAS信号(读写/命令)后到这个指令实际被执行的延时。
   所以在使用了这个技术之后,从发送出激活bank命令(想要读取数据的时刻)到读到数据这段时间应该是AL+CL+1(CAS信号也要一个时钟),这样就不难理解美光文档上的图4:Figure 4:DDR2 Bank Interleave Reads with AL = 3,从图上可以看出有了这个技术,那个空洞不存在了,数据完美的连续了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

但是对于这个改进个人理解上有两个地方值得注意的:
1、tRCD依然是存在的,这个是硬件的限制。而Post CAS技术改进的是命令的传输机制。我是这样理解的:Post CAS技术是对CAS信号指令提供一种芯片内部延时的机制,也可以理解为将CAS信号缓存AL时间后执行,这样不妨碍总线上的其他命令的发送。

2、Post CAS技术在单次的突发访问中是没有影响的,只有连续多次的突发访问才有性能的提升,但是对于内存操作一般不可能做单次的突发,就算程序这样做了硬件缓存机制也会做多次的突发。

阅读(8640) | 评论(7) | 转发(14) |
给主人留下些什么吧!~~

2012-02-29 13:14:45

tekkamanninja: 这个不冲突吧, Post CAS技术似乎是把read指令先内部缓存了一下,经AL后再送给内部的控制器。
t0+AL时上其他的激活指令上线只是在外部总线上的问题,和内部不冲.....
谢谢!解决了我的疑惑!

tekkamanninja2012-02-28 18:00:45

匿名: 不过还有个问题,就是在采取这种附加延迟的技术之后,如果说read命令发出后设为t0时间,经过AL才被实际执行,而此时又发出激活命令,也就是说在t0+AL时刻发出激.....
这个不冲突吧, Post CAS技术似乎是把read指令先内部缓存了一下,经AL后再送给内部的控制器。
t0+AL时上其他的激活指令上线只是在外部总线上的问题,和内部不冲突。

tekkamanninja2012-02-28 17:48:20

匿名: 楼主讲得很好,解决了我的一些疑惑!不过有两个问题要请教一下!
1、读命令和激活命令发生冲突的原因是因为两者在控制指令的发送上有不同吗?具体说就是读命令时.....
1、由于硬件上激活指令和读指令分别发送了行和列地址,这些地址线是复用的。激活和指令是不可能同时发送的。
2、 Post CAS本身针对的就是bank交错读取的,如果是同一个bank的话是无须多次激活(实质上是预充电)的。

2012-02-28 17:29:32

不过还有个问题,就是在采取这种附加延迟的技术之后,如果说read命令发出后设为t0时间,经过AL才被实际执行,而此时又发出激活命令,也就是说在t0+AL时刻发出激活命令,那不是还是冲突吗?望楼主解答!

2012-02-28 16:55:19

楼主讲得很好,解决了我的一些疑惑!不过有两个问题要请教一下!
1、读命令和激活命令发生冲突的原因是因为两者在控制指令的发送上有不同吗?具体说就是读命令时要求CAS#、RAS#这两个信号的设置不同,所以无法同时发送!
2、就是针对最后一点,这种技术只有在连续多次的突发访问才有性能的提升,这句话我认为不是很严谨,不仅仅是连续多次的突发访问,而且必须是要跨bank的访问,才会得到性能的提升!