1、SDRAM 的结构、时序与性能的关系(上)在讲完 SDRAM 的基本工作原理和主要操作之后,我们现在要重要分析一下 SDRAM 的时序与性能之间的关系,它不在局限于芯片本身,而是从整体的内存系统去分析。这也是广大 DIYer所关心的话题。比如 CL 值对性能的影响有多大几乎是每个内存论坛都会有讨论,今天我们就详细探讨一下,其中的很多内容同样适用于 DDR 与 RDRAM。这里需要强调一点,对于内存系统整体而言,一次内存访问就是对一个页的访问,这个页的定义已经在解释 Full Page 含义时讲明了。由于在 P-Bank 中,每个芯片的寻址都是一样的,所以可以将页访问 “浓缩”等效为对每芯片中指
2、定行的访问,这样可能比较好理解。但为了与官方标准统一,在下文中会经常用页来描述相关的内容,请读者注意理解。一、影响性能的主要时序参数所谓的影响性能是并不是指 SDRAM 的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是 tRCD、CL 和 tRP。每条正规的内存模组都会在标识上注明这三个参数值,可见它们对性能的敏感性
3、。以内存最主要的操作读取为例。tRCD 决定了行寻址(有效)至列寻址(读/ 写命令)之间的间隔,CL 决定了列寻址到数据进行真正被读取所花费的时间, tRP 则决定了相同 L-Bank中不同工作行转换的速度。现在可以想象一下读取时可能遇到的几种情况(分析写入操作时不用考虑 CL 即可):1、要寻址的行与 L-Bank 是空闲的。也就是说该 L-Bank 的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为 tRCD+CL,这种情况我们称之为页命中(PH,Page Hit)。2、要寻址的行正好是前一个操作的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据
4、读取前的总耗时仅为 CL,这就是所谓的背靠背(Back to Back)寻址,我们称之为页快速命中(PFH,Page Fast Hit)或页直接命中(PDH,Page Direct Hit)。3、要寻址的行所在的 L-Bank 中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是 tRP+tRCD+CL,这种情况我们称之为页错失( PM,Page Miss)。显然,PFH 是最理想的寻址情况, PM 则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为 PHRPH Rate、PFDRPFH Rate、PM
5、RPM Rate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高 PHR 与 PFHR,同时减少 PMR,以达到提高内存工作效率的目的。二、增加 PHR 的方法显然,这与预充电管理策略有着直接的关系,目前有两种方法来尽量提高 PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一 L-Bank 不同行寻址时发生冲突的可能性。但是,如果要在当前行工作完成后马上打开同一 L-Bank 的另一行工作时,仍然存在 tRP 的延迟。怎么办? 此时就需要 L-Bank 交错预充电了。VIA 的 4 路交错式内存控制就是在一个 L-Bank 工作时,对下一个要工作
6、的 L-Bank 进行预充电。这样,预充电与数据的传输交错执行,当访问下一个 L -Bank 时,tRP 已过,就可以直接进入行有效状态了。目前 VIA 声称可以跨 P-Bank 进行 16 路内存交错,并以 LRU 算法进行预充电管理。有关 L-Bank 交错预充电(存取)的具体执行在本刊 2001 年第 2 期已有详细介绍,这里就不再重复了。L-Bank 交错自动预充电/读取时序图(可点击放大):L-Bank 0 与 L-Bank 3 实现了无间隔交错读取,避免了 tRP 对性能的影响 三、增加 PFHR 的方法无论是自动预充电还是交错工作的方法都无法消除 tRCD 所带来的延迟。要解决这
7、个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收多个工作命令,以达到背靠背的效果,此时就只剩下 CL 所造成的读取延迟了(写入时没有延迟)。如何做到这一点呢?这就是北桥芯片的责任了。在上文的时序图中有一个参数 tRAS(Active to Precharge Command,行有效至预充电命令间隔周期)。它有一个范围,对于 PC133标准,一般是预充电命令至少要在行有效命令 5 个时钟周期之后发出,最长间隔视芯片而异(基本在 120000ns 左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有 120000ns 的持续工作时间而不用进行预充电。
8、显然,只要北桥芯片不发出预充电(包括允许自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有 tRCD 的延迟。可见,如果北桥芯片在能同时打开的行(页)越多,那么 PFHR 也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些 SDRAM 芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。Intel 845 芯片组 MCH 的资料:其中表明它可以支持 24 个页面同时处于打开状态但是,可同时打开的页数也是有限制的。从 SDRAM 的寻址原理讲,同一 L-B
9、ank 中不可能有两个打开的行(S-AMP 只能为一行服务),这就限制了可同时打开的页面总数。以 SDRAM有 4 个 L-Bank,北桥最多支持 8 个 P-Bank 为例,理论上最多只能有 32 个页面能同时处于打开的状态。而如果只有一个 P-Bank,那么就只剩下 4 个页面,因为有几个 L-Bank 才能有同时打开几个行而互不干扰。Intel 845 的 MHC 虽然可以支持 24 个打开的页面,那也是指 6个 P-Bank 的情况下(845MCH 只支持 6 个 P-Bank)。可见 845 已经将同时打开页数发挥到了极致。不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上
10、,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读/写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限的话,就需要一个替换策略,一般都是用 LRU 算法来进行,这与 VIA 的交错控制大同小异。(下)四、内存结构对 PHR 的影响这是结构设计上的问题,所以单独来说。在我们介绍 L-Bank 时,曾经提到单一的 L-Bank 会造成严重的寻址冲突。现在,当我们了解了内存寻址的原理后,就不难理解这句话了。如果只有一个 L-Bank,那么除非是背靠背式的操作(PFH
11、),否则 tRP、tRCD、CL(读取时)一个也少不了。上文中,内存交错之所以能实现就是因为有多个 L-Bank,从这点就可以看出 L-Bank 数量与页命中率之间的关系了。PHR 基本上可以等于“(L-Bank 数 -1)/L-Bank 数”。SDRAM 有 4 个 L-Bank,那么页命中率就是 75%,DDR- SDRAM 最多将有 8 个 L-Bank, PHR 最高为 87.5%。而 RDRAM 则最多有 32 个 L-Bank,PHR 到了惊人的 96.875%,这也是当时 RDRAM 攻击 SDRAM 的一主要方面。不过,从内存的结构图上可以看出,L-Bank 多了,相应外围辅助
12、的元件也要增加,比如 S-AMP,L-Bank 地址线等等。在 RDRAM 的介绍中,我会讲到 L-Bank 数量增多后所带来的一些新问题。五、读/写延迟不同对性能所造成的影响SDRAM 在读取操作时会有 CL 造成的延迟,而在写入时则是 0 延迟。这样,在读操作之后马上进行写操作的话,由于没有写延迟,数据线不会出现空闲的时候,保证了数据总线的利用率。但是,若在写操作之后马上进行读操作的话,即使是背靠背式进行,仍然会由于 tWR 与 CL 的存在而造成间隔,这期间数据总线将是空闲的,利用率受到了影响。在先写后读的操作中,由于保证写入的可靠性,读取命令在 tWR 之后发出,并再经过 CL 才能输
13、出数据,本例中 CL=3,造成了两个时钟周期的总线空闲(上图可点击放大)这里需要着重说明一下,在突发读取过程中,想立刻中断并进行新的读操作,和读后读模式(见“突发连续读取模式图” )一样,只是新的读命令根据需要提前若干个周期发出,经过 CL后就会自动传输新的数据。但是,若想中断读后立即进行写操作,就需要数据掩码(DQM)来屏蔽写入命令发出时的数据输出,避免总线冲突。根据芯片设计的不同,有时可能会浪费一个周期进行总线 I/O 的调转,此时一个周期的总线空闲也是不可避免的。突发读后写时的操作,以本图为例,在最后一个所需数据(本例为第一笔数据)输出前一个周期使 DQM 有效,屏蔽第二笔数据的输出;
14、2、发出写入命令,此时所读取的第二笔数据被屏蔽。3、继续 DQM 以屏蔽第三笔数据的输出。其中 tHZ 表示输出数据与外部电路的连接周期,tDS 表示数据输入准备时间,如果 tHZ+tDStCK,那么写入操作就要延后一个周期,这要视芯片的具体设计而定(上图可点击放大)六、BL 对性能的影响从读/写之间的中断操作我们又引出了 BL(突发长度)对性能影响的话题。首先,BL 的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的 BL,这是厂商们经过多年的实践总结出来的。BL 与相应的工作领域BL 越长,对于连续的大数据量传输很有好处,但是对零散的数据,BL 太长反而会造成总线
15、周期的浪费。以 P-Bank 位宽 64bit 为例,BL=4 时,一个突发操作能传输 32 字节的数据,但如果只需要前 16 个字节,后两个周期是无效的。如果需要 40 字节,需要再多进行一次突发传输,但实际只需要一个传输周期就够了,从而浪费了三个传输周期。而对于 2KB 的数据,BL=4 的设置意味着要每隔 4 个周期发送新的列地址,并重复 63 次。而对于 BL=256,一次突发就可完成,并且不需要中途再进行控制。不少人都因此表示了 BL 设定对性能影响的担心。但设计人员也不是傻瓜,通过上文的介绍,可以看出他们在这方面的考虑。通过写命令、DQM、读命令的配合/操作,完全可以任意地中断突发
16、周期开始新的操作,而且 DQM 还可以帮我们在 BL 中选择有用的数据,从而最大限度降低突发传输对性能带来的影响。另外,预充电命令与专用的突发传输终止命令都可以用来中断 BL,前者在中断后进行预充电,后者在中断后不进行其他读/写操作。专用的突发停止命令可用来中断突发读取,其生效潜伏期与 CL 相同。对于写入则立即有效(上图可点击放大)用预充电命令来中断突发读取,生效潜伏期与 CL 相同,要小于或等于 tRP。写入时预充电在最后一个有效写入周期完成,并经过 tWR 之后发出,同时立即中断突发传输所以,突发周期的中断并不难,但用短 BL 应付大数据量存取需要不断的指令与列寻址配合,而为了取消不需要的传输周期,由于需要运用额外的控制,也将占用不少的控制资源。所以 BL针对不同应用领域有不同设计的主要目的,就是在保证性能的同时,系统控制资源也能得到合理的运用。