高手进阶,终极内存技术指南——完整/进阶版

来自个人维基
(重定向自终极内存技术指南
跳转至: 导航搜索

目录

序:不得不说的话

作为电脑中必不可少的三大件之一(其余的两个是主板与CPU),内存是决定系统性能的关键设备之一,它就像一个临时的仓库,负责数据的中转、暂存……

不过,虽然内存对系统性能的至关重要,但长期以来,DIYer并不重视内存,只是将它看作是一种买主板和CPU时顺带买的“附件”,那时最多也就注意一下内存的速度。这种现象截止于1998年440BX主板上市后,PC66/100的内存标准开始进入普通DIYer的视野,因为这与选购有着直接的联系。一时间,有关内存时序参数的介绍文章大量出现(其中最为著名的恐怕就是CL参数)。自那以后,DIYer才发现,原来内存也有这么多的学问。接下来,始于2000年底/2001年初的VIA芯片组4路交错(4-Way Interleave)内存控制和部分芯片组有关内存容量限制的研究,则是深入了解内存的一个新开端。本刊在2001年第2期上也进行了VIA内存交错控制与内存与模组结构的详细介绍,并最终率先正确地解释了这一类型交错(内存交错有多种类型)的原理与容量限制的原因。从那时起,很多关于内存方面的深入性文章接踵而至,如果说那时因此而掀起了一股内存热并不夸张。大量的内存文章让更多的用户了解了内存,以及更深一层的知识,这对于DIY当然是一件好事情。然而,令人遗憾的是这些所谓的内存高深技术文章有不少都是错的(包括后来的DDR与RDRAM内存的介绍),有的甚至是很低级的错误。在这近两年的时间里,国内媒体上优秀的内存技术文章可谓是寥若晨星,有些媒体还编译国外DIY网站的大篇内存文章,但可惜的是,外国网站也不见得都是对的(这一点,国内很多作者与媒体似乎都忽视了)。就这样,虽然打开了一个新的知识领域,可“普及”的效果并不那么好,很多媒体的铁杆读者高兴地被带入内存深层世界,但也因此被引向了新的误区。

不过,从这期间(2001年初至今)各媒体读者对这类文章的反映来看,喜欢内存技术的玩家大有人在且越来越多,这是各媒体“培养”的成果。这些用户已经不满足如何正确的使用内存,他们更渴望深入的了解这方面原来非常贫乏的知识,这些知识可能暂时不会对他们在使用内存过程中有什么帮助,但会大大满足他们的求知欲。在2001年初,我们揭开VIA芯片组4路交错内存控制和部分芯片组有关内存容量限制之迷时,还是主要围绕着内存使用的相关话题来展开,而且在这期间有关内存技术的话题,《电脑高手》也都是一笔带过。但在今天,在很多人希望了解内存技术而众多媒体的文章又“力不从心”时,我们觉得有必要再次站出来以正视听,也就是说,我们这次的专题不再以内存使用为中心,更多的是纯技术性介绍,并对目前现存的主要内存技术误区进行重点纠正。

在最后要强调的是,本专题以技术为主,由于篇幅的原因,不可能从太浅的方面入手,所以仍需要有一定的技术基础作保证,而对内存感兴趣的读者则绝不容错过,这也许是您最好的纠正错误认识的机会!

在本专题里,当讲完内存的基本操作之后,我们会给大家讲一个仓库的故事,从中相信您会更了解内存这个仓库是怎么工作的,希望您能喜欢。


SDRAM内存模组的物理Bank与芯片位宽

虽然有关内存结构与时序的基础概念,在本刊2001年第2期的专题中就已有阐述,但在这里为了保证专题的可读性,我们需要再次加强这方面的系统认识。正确并深刻理解内存的基础概念,是阅读本专题的第一条件。因为即使是RDRAM,在很多方面也是与SDRAM相似的,而至于DDR与DDR-Ⅱ、QBM等形式的内存更是与SDRAM有着紧密的联系。

SDRAM内存模组与基本结构

我们平时看到的SDRAM都是以模组形式出现,为什么要做成这种形式呢?这首先要接触到两个概念:物理Bank与芯片位宽。

MEM TECH 02 01 DIMM-1.jpg
PC133时代的168pin SDRAM DIMM



1、 物理Bank

传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。当时控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,而这个位宽就称之为物理Bank(Physical Bank,下文简称P-Bank)的位宽。所以,那时的内存必须要组织成P-Bank来与CPU打交道。资格稍老的玩家应该还记得Pentium刚上市时,需要两条72pin的SIMM才能启动,因为一条72pin -SIMM只能提供32bit的位宽,不能满足Pentium的64bit数据总线的需要。直到168pin-SDRAM DIMM上市后,才可以使用一条内存开机。下面将通过芯片位宽的讲述来进一步解释P-Bank的概念。

不过要强调一点,P-Bank是SDRAM及以前传统内存家族的特有概念,在RDRAM中将以通道(Channel)取代,而对于像Intel E7500那样的并发式多通道DDR系统,传统的P-Bank概念也不适用。

MEM TECH 02 02 Pin-DY.png




2、 芯片位宽

上文已经讲到SDRAM内存系统必须要组成一个P-Bank的位宽,才能使CPU正常工作,那么这个P-Bank位宽怎么得到呢?这就涉及到了内存芯片的结构。

每个内存芯片也有自己的位宽,即每个传输周期能提供的数据量。理论上,完全可以做出一个位宽为64bit的芯片来满足P-Bank的需要,但这对技术的要求很高,在成本和实用性方面也都处于劣势。所以芯片的位宽一般都较小。台式机市场所用的SDRAM芯片位宽最高也就是16bit,常见的则是8bit。这样,为了组成P-Bank所需的位宽,就需要多颗芯片并联工作。对于16bit芯片,需要4颗(4×16bit=64bit)。对于8bit芯片,则就需要8颗了。

MEM TECH 02 03 CHIP.png


以上就是芯片位宽、芯片数量与P-Bank的关系。P-Bank其实就是一组内存芯片的集合,这个集合的容量不限,但这个集合的总位宽必须与CPU数据位宽相符。随着计算机应用的发展,一个系统只有一个P-Bank已经不能满足容量的需要。所以,芯片组开始可以支持多个P-Bank,一次选择一个P-Bank工作,这就有了芯片组支持多少(物理)Bank的说法。而在Intel的定义中,则称P-Bank为行(Row),比如845G芯片组支持4个行,也就是说它支持4个P-Bank。另外,在一些文档中,也把P-Bank称为Rank(列)。

回到开头的话题,DIMM是SDRAM集合形式的最终体现,每个DIMM至少包含一个P-Bank的芯片集合。在目前的DIMM标准中,每个模组最多可以包含两个P-Bank的内存芯片集合,虽然理论上完全可以在一个DIMM上支持多个P-Bank,比如SDRAM DIMM就有4个芯片选择信号(Chip Select,简称片选或CS),理论上可以控制4个P-Bank的芯片集合。只是由于某种原因而没有这么去做。比如设计难度、制造成本、芯片组的配合等。至于DIMM的面数与P-Bank数量的关系,在2001年2月的专题中已经明确了,面数≠P-Bank数,只有在知道芯片位宽的情况下,才能确定P-Bank的数量,大度256MB内存就是明显一例,而这种情况在Registered模组中非常普遍。有关内存模组的设计,将在后面的相关章节中继续探讨。



SDRAM的逻辑Bank与芯片容量表示方法


1、逻辑Bank与芯片位宽

讲完SDRAM的外在形式,就该深入了解SDRAM的内部结构了。这里主要的概念就是逻辑Bank。简单地说,SDRAM的内部是一个存储阵列。因为如果是管道式存储(就如排队买票),就很难做到随机访问了。

阵列就如同表格一样,将数据“填”进去,你可以把它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)叫什么呢?它就是逻辑Bank(Logical Bank,下文简称L-Bank)。

MEM TECH 03 01 L-Bank.png
L-Bank存储阵列示意图

由于技术、成本等原因,不可能只做一个全容量的L-Bank,而且最重要的是,由于SDRAM的工作原理限制,单一的L-Bank将会造成非常严重的寻址冲突,大幅降低内存效率(在后文中将详细讲述)。所以人们在SDRAM内部分割成多个L-Bank,较早以前是两个,目前基本都是4个,这也是SDRAM规范中的最高L-Bank数量。到了RDRAM则最多达到了32个,在最新DDR-Ⅱ的标准中,L-Bank的数量也提高到了8个。

这样,在进行寻址时就要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。可见对内存的访问,一次只能是一个L-Bank工作,而每次与北桥交换的数据就是L-Bank存储阵列中一个“存储单元”的容量。在某些厂商的表述中,将L-Bank中的存储单元称为Word(此处代表位的集合而不是字节的集合)。

从前文可知,SDRAM内存芯片一次传输率的数据量就是芯片位宽,那么这个存储单元的容量就是芯片的位宽(也是L-Bank的位宽),但要注意,这种关系也仅对SDRAM有效,原因将在下文中说明。

MEM TECH 03 02 dianrong.png



2、内存芯片的容量

现在我们应该清楚内存芯片的基本组织结构了。那么内存的容量怎么计算呢?显然,内存芯片的容量就是所有L-Bank中的存储单元的容量总合。计算有多少个存储单元和计算表格中的单元数量的方法一样:

存储单元数量=行数×列数(得到一个L-Bank的存储单元数量)×L-Bank的数量

在很多内存产品介绍文档中,都会用M×W的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。M是该芯片中存储单元的总数,单位是兆(英文简写M,精确值是1048576,而不是1000000),W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)。比如8M×8,这是一个8bit位宽芯片,有8M个存储单元,总容量是64Mbit(8MB)。

MEM TECH 03 03 bIT-bYTE.png


不过,M×W是最简单的表示方法。下图则是某公司对自己内存芯片的容量表示方法,这可以说是最正规的形式之一。

MEM TECH 03 04 2.png


业界正规的内存芯片容量表示方法

我们可以计算一下,结果可以发现这三个规格的容量都是128Mbits,只是由于位宽的变化引起了存储单元的数量变化。从这个例子就也可以看出,在相同的总容量下,位宽可以采用多种不同的设计。


3、与芯片位宽相关的DIMM设计

为什么在相同的总容量下,位宽会有多种不同的设计呢?这主要是为了满足不同领域的需要。现在大家已经知道P-Bank的位宽是固定的,也就是说当芯片位宽确定下来后,一个P-Bank中芯片的个数也就自然确定了,而前文讲过P-Bank对芯片集合的位宽有要求,对芯片集合的容量则没有任何限制。高位宽的芯片可以让DIMM的设计简单一些(因为所用的芯片少),但在芯片容量相同时,这种DIMM的容量就肯定比不上采用低位宽芯片的模组,因为后者在一个P-Bank中可以容纳更多的芯片。比如上文中那个内存芯片容量标识图,容量都是128Mbit,合16MB。如果DIMM采用双P-Bank+16bit芯片设计,那么只能容纳8颗芯片,计128MB。但如果采用4bit位宽芯片,则可容纳32颗芯片,计512MB。DIMM容量前后相差出4倍,可见芯片位宽对DIMM设计的重要性。因此,8bit位宽芯片是桌面台式机上容量与成本之间平衡性较好的选择,所以在市场上也最为普及,而高于16bit位宽的芯片一般用在需要更大位宽的场合,如显卡等,至于4bit位宽芯片很明显非常适用于大容量内存应用领域,基本不会在标准的Unbuffered 模组设计中出现。


SDRAM的引脚与封装

内存芯片要想工作,必须要与内存控制器有所联系,同时对于一个电气元件,电源供应也是必不可少的,而且数据的传输要有一个时钟作为触发参考。因此,SDRAM在封装时就要留出相应的引脚以供使用。电源与时钟的引脚就不必多说了,现在我们可以想象一下,至少应该有哪些控制引脚呢?

我们从内存寻址的步骤缕下来就基本明白了,从中我们也就能了解内存工作的大体情况。这里需要说明的是,与DIMM一样,SDRAM有着自己的业界设计规范,在一个容量标准下,SDRAM的引脚/信号标准不能只考虑一种位宽的设计,而是要顾及多种位宽,然后尽量给出一个通用的标准,小位宽的芯片也许会空出一些引脚,但高位宽的芯片可能就全部用上了。不过容量不同时,设计标准也会有所不同,一般的容量越小的芯片所需要的引脚也就越小。

1、 首先,我们知道内存控制器要先确定一个P-Bank的芯片集合,然后才对这集合中的芯片进行寻址操作。因此要有一个片选的信号,它一次选择一个P-Bank的芯片集(根据位宽的不同,数量也不同)。被选中的芯片将同时接收或读取数据,所以要有一个片选信号。

2、 接下来是对所有被选中的芯片进行统一的L-Bank的寻址,目前SDRAM中L-Bank的数量最高为4个,所以需要两个L-Bank地址信号(22=4)。

3、 最后就是对被选中的芯片进行统一的行/列(存储单元)寻址。地址线数量要根据芯片的组织结构分别设计了。但在相同容量下,行数不变,只有列数会根据位宽的而变化,位宽越大,列数越少,因为所需的存储单元减少了。

4、 找到了存储单元后,被选中的芯片就要进行统一的数据传输,那么肯定要有与位宽相同数量的数据I/O通道才行,所以肯定要有相应数量的数据线引脚。

现在我们就基本知道了内存芯片的一些信号引脚,下图就是一个简单的SDRAM示意图,大家可以详细看看。

MEM TECH 04 01 Pin.png
图注:128Mbit芯片不同位宽的引脚图(NC代表未使用,-表示与内侧位宽设计相同)

MEM TECH 04 02 biao-1.png

根据SDRAM的官方规范,台式机上所用的SDRAM在不同容量下的各种位宽封装标准如下:

MEM TECH 04 03 biao-2.png


SDRAM芯片初始化、行有效、列读写时序

上文我们已经了解了SDRAM所用到的基本信号线路,下面就看看它们在SDRAM芯片内部是怎么“布置”的,并从这里开始深入了解内存的基本操作与过程,在这一节中我们将接触到有天书之称的时序图,但不要害怕,根据文中的指导慢慢理解,您肯定可以看懂它。首先,我们先认识一下SDRAM的内部结构,然后再开始具体的讲述。

MEM TECH 05 01 SDR.png
128Mbit(32M×4)SDRAM内部结构图

芯片初始化

可能很多人都想象不到,在SDRAM芯片内部还有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时SDRAM都要先对这个控制逻辑核心进行初始化。有关预充电和刷新的含义在下文有讲述,关键的阶段就在于模式寄存器(MR,Mode Register)的设置,简称MRS(MR Set),这一工作由北桥芯片在BIOS的控制下进行,寄存器的信息由地址线来提供。


MEM TECH 05 02 csh.png
SDRAM在开机时的初始化过程


MEM TECH 05 03 MRS.png
SDRAM模式寄存器所控制的操作参数:地址线提供不同的0/1信号来获得不同的参数。在设置到MR之后,就开始了进入正常的工作状态,图中相关参数将结合下文具体讲述

行有效

初始化完成后,要想对一个L-Bank中的阵列进行寻址,首先就要确定行(Row),使之处于活动状态(Active),然后再确定列。虽然之前要进行片选和L-Bank的定址,但它们与行有效可以同时进行。


MEM TECH 05 04 hyx.png
行有效时序图

从图中可以看出,在CS#、L-Bank定址的同时,RAS(Row Address Strobe,行地址选通脉冲)也处于有效状态。此时An地址线则发送具体的行地址。如图中是A0-A11,共有12个地址线,由于是二进制表示法,所以共有4096个行(212=4096),A0-A11的不同数值就确定了具体的行地址。由于行有效的同时也是相应L-Bank有效,所以行有效也可称为L-Bank有效。

列读写

行地址确定之后,就要对列地址进行寻址了。但是,地址线仍然是行地址所用的A0-A11(本例)。没错,在SDRAM中,行地址与列地址线是共用的。不过,读/写的命令是怎么发出的呢?其实没有一个信号是发送读或写的明确命令的,而是通过芯片的可写状态的控制来达到读/写的目的。显然WE#信号就是一个关键。WE#无效时,当然就是读取命令。


MEM TECH 05 05 COMMAND.png
SDRAM基本操作命令, 通过各种控制/地址信号的组合来完成(H代表高电平,L代表低电平,X表示高低电平均没有影响)。此表中,除了自刷新命令外,所有命令都是默认CKE有效。对于自刷新命令,下文有详解

列寻址信号与读写命令是同时发出的。虽然地址线与行寻址共用,但CAS(Column Address Strobe,列地址选通脉冲)信号则可以区分开行与列寻址的不同,配合A0-A9,A11(本例)来确定具体的列地址。


MEM TECH 05 06 dx.png
读写操作示意图,读取命令与列地址一块发出(当WE#为低电平是即为写命令)

然而,在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),大家也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。tRCD是SDRAM的一个重要时序参数,可以通过主板BIOS经过北桥芯片进行调整,但不能超过厂商的预定范围。广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100 SDRAM,tRCD=2,代表20ns的延迟,对于PC133则为15ns。



MEM TECH 05 07 clock.png
MEM TECH 05 08 TRCD.png
tRCD=3的时序图



SDRAM的读/写时序与突发长度

数据输出(读)

在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定。

不过,CAS并不是在经过CL周期之后才送达存储单元。实际上CAS与RAS一样是瞬间到达的,但CAS的响应时间要更快一些。为什么呢?假设芯片位宽为n个bit,列数为c,那么一个行地址要选通n×c个存储体,而一个列地址只需选通n个存储体。但存储体中晶体管的反应时间仍会造成数据不可能与CAS在同一上升沿触发,肯定要延后至少一个时钟周期。

由于芯片体积的原因,存储单元中的电容容量很小,所以信号要经过放大来保证其有效的识别性,这个放大/驱动工作由S-AMP负责,一个存储体对应一个S-AMP通道。但它要有一个准备时间才能保证信号的发送强度(事前还要进行电压比较以进行逻辑电平的判断),因此从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据即已传向S-AMP,也就是说此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出,这段时间我们称之为tAC(Access Time from CLK,时钟触发后的访问时间)。tAC的单位是ns,对于不同的频率各有不同的明确规定,但必须要小于一个时钟周期,否则会因访问时过长而使效率降低。比如PC133的时钟周期为7.5ns,tAC则是5.4ns。需要强调的是,每个数据在读取时都有tAC,包括在连续读取中,只是在进行第一个数据传输的同时就开始了第二个数据的tAC。

MEM TECH 06 01 CL TAC.png
CL=2与tAC示意图


MEM TECH 06 02 QIANFU.png


CL的数值不能超出芯片的设计规范,否则会导致内存的不稳定,甚至开不了机(超频的玩家应该有体会),而且它也不能在数据读取前临时更改。CL周期在开机初始化过程中的MRS阶段进行设置,在BIOS中一般都允许用户对其调整,然后BIOS控制北桥芯片在开机时通过A4-A6地址线对MR中CL寄存器的信息进行更改。

不过,从存储体的结构图上可以看出,原本逻辑状态为1的电容在读取操作后,会因放电而变为逻辑0。所以,以前的DRAM为了在关闭当前行时保证数据的可靠性,要对存储体中原有的信息进行重写,这个任务由数据所经过的刷新放大器来完成,它根据逻辑电平状态,将数据进行重写(逻辑0时就不重写),由于这个操作与数据的输出是同步进行互不冲突,所以不会产生新的重写延迟。后来通过技术的改良,刷新放大器被取消,其功能由S-AMP取代,因为在读取时它会保持数据的逻辑状态,起到了一个Cache的作用,再次读取时由它直接发送即可,不用再进行新的寻址输出,此时数据重写操作则可在预充电阶段完成。

数据输入(写)

数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。


MEM TECH 06 03 x.png
数据写入的时序图

从图中可见,由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入寄存器中,然后再由写入驱动器进行对存储电容的充电操作,因此数据可以与CAS同时发送,也就是说写入延迟为0。不过,数据并不是即时地写入存储电容,因为选通三极管(就如读取时一样)与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多),有关它的影响将在下文进一步讲述。

突发长度

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称BL)。 在目前,由于内存控制器一次读/写P-Bank位宽的数据,也就是8个字节,但是在现实中小于8个字节的数据很少见,所以一般都要经过多个周期进行数据的传输。上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。虽然由于读/写延迟相同可以让数据的传输在I/O端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低(早期的FPE/EDO内存就是以这种方式进行连续的数据传输)。为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。在很多北桥芯片的介绍中都有类似于X-1-1-1的字样,就是指这个意思,其中的X代表就代表第一笔数据所用的周期数。


MEM TECH 06 04 sjd.png

非突发连续读取模式:不采用突发传输而是依次单独寻址,此时可等效于BL=1。虽然可以让数据是连续的传输,但每次都要发送列地址与命令信息,控制资源占用极大

MEM TECH 06 05 tf.png

突发连续读取模式:只要指定起始列地址与突发长度,寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输

至于BL的数值,也是不能随便设或在数据进行传输前临时决定。在上文讲到的初始化过程中的MRS阶段就要对BL进行设置。目前可用的选项是1、2、4、8、全页(Full Page),常见的设定是4和8。顺便说一下,BL能否更改与北桥芯片的设计有很大关系,不是每个北桥都能像调整CL那样来调整BL。某些芯片组的BL是定死而不可改的,比如Intel芯片组的BL基本都为4,所以在相应的主板BIOS中也就不会有BL的设置选项。而由于目前的SDRAM系统的数据传输是以64bit/周期进行,所以在一些BIOS也把BL用QWord(4字,即64bit)来表示。如4QWord就是BL=4。

MEM TECH 06 06 Page.png

另外,在MRS阶段除了要设定BL数值之外,还要具体确定读/写操作的模式以及突发传输的模式。突发读/突发写,表示读与写操作都是突发传输的,每次读/写操作持续BL所设定的长度,这也是常规的设定。突发读/单一写,表示读操作是突发传输,写操作则只是一个个单独进行。突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序。顺序传输是指从起始单元开始顺序读取。假如BL=4,起始单元编号是n,顺序就是n、n+1、n+2、n+3。交错传输就是打乱正常的顺序进行数据传输(比如第一个进行传输的单元是n,而第二个进行传输的单元是n+2而不是n+1),至于交错的规则在SDRAM规范中有详细的定义表,但在这此出于必要性与篇幅的考虑就不列出了。

SDRAM芯片的预充电与刷新操作


预充电

由于SDRAM的寻址具体独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。实际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,同时释放S-AMP(重新加入比较电压,一般是电容电压的1/2,以帮助判断读取数据的逻辑电平,因为S-AMP是通过一个参考电压与存储体位线电压的比较来判断逻辑值的),以准备新行的工作。具体而言,就是将S-AMP中的数据回写,即使是没有工作过的存储体也会因行选通而使存储电容受到干扰,所以也需要S-AMP进行读后重写。此时,电容的电量(或者说其产生的电压)将是判断逻辑状态的依据(读取时也需要),为此要设定一个临界值,一般为电容电量的1/2,超过它的为逻辑1,进行重写,否则为逻辑0,不进行重写(等于放电)。为此,现在基本都将电容的另一端接入一个指定的电压(即1/2电容电压),而不是接地,以帮助重写时的比较与判断。

现在我们再回过头看看读写操作时的命令时序图,从中可以发现地址线A10控制着是否进行在读写之后当前L-Bank自动进行预充电,这就是上文所说的“辅助设定”。而在单独的预充电命令中,A10则控制着是对指定的L-Bank还是所有的L-Bank(当有多个L-Bank处于有效/活动状态时)进行预充电,前者需要提供L-Bank的地址,后者只需将A10信号置于高电平。

在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)。和tRCD、CL一样,tRP的单位也是时钟周期数,具体值视时钟频率而定。

MEM TECH 07 01 ycd.png

读取时预充电时序图(上图可点击放大):图中设定:CL=2、BL=4、tRP=2。自动预充电时的开始时间与此图一样,只是没有了单独的预充电命令,并在发出读取命令时,A10地址线要设为高电平(允许自动预充电)。可见控制好预充电启动时间很重要,它可以在读取操作结束后立刻进入新行的寻址,保证运行效率。

误区:读写情况下都要考虑写回延迟
有些文章强调由于写回操作而使读/写操作后都有一定的延迟,但从本文的介绍中写可以看出,即使是读后立即重写的设计,由于是与数据输出同步进行,并不存在延迟。只有在写操作后进 行其他的操作时,才会有这方面的影响。写操作虽然是0延迟进行,但每笔数据的真正写入则需要一个足够的周期来保证,这段时间就是写回周期(tWR)。所以预充电不能与写操作同时进行,必须要在tWR之后才能发出预充电命令,以确保数据的可靠写入,否则重写的数据可能是错的,这就造成了写回延迟。


MEM TECH 07 02 ycd.png

数据写入时预充电操作时序图(可点击放大):注意其中的tWR参数,由于它的存在,使预充电操作延后,从而造成写回延迟



刷新

之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。

刷新操作与预充电中重写的操作一样,都是用S-AMP先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有L-Bank预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不是一定是相同的。

那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。

刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于AR, SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说CAS在RAS之前有效。所以,AR又称CBR(CAS Before RAS,列提前于行定位)式刷新。由于刷新涉及到所有L-Bank,因此在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期(PC133标准),之后就可进入正常的工作状态,也就是说在这9 个时钟期间内,所有工作指令只能等待而无法执行。64ms之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对SDRAM的性能造成影响,但这是没办法的事情,也是DRAM相对于SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。

SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR(Suspend to RAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。



数据掩码

在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4×64bit的数据。但是,如果其中的第二笔数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。DQM由北桥控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于16bit位宽芯片,则需要两个DQM引脚。

SDRAM官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即成效。


MEM TECH 07 03 R-DQM.png

读取时数据掩码操作,DQM在两个周期后生效,突发周期的第二笔数据被取消(上图可点击放大)

MEM TECH 07 04 W-DQM.png

写入时数据掩码操作,DQM立即生效,突发周期的第二笔数据被取消(上图可点击放大)


有关内存内部的基本操作就到此结束,其实还有很多内存的操作没有描述,但都不是很重要了,限于篇幅与必要性,我们不在此介绍,有兴趣的读者可以自行查看相关资料。


图解SDRAM工作流程:仓库物语

货物基地(主板)连接着物资(数据)的供求方。基地的货物调度厂房(北桥芯片)掌管着若干个用于临时供货/生产与存储的仓库基地(P-Bank),它们通常隶属于某一仓储集团(DIMM),这种基地与调度厂房之间必须由64条传送带联系着(P-Bank位宽),每条传送带一次只能运送一个标准的货物(1bit数据),而且一次至少要传送64个标准货物,这是它们之间的约定,仓库基地必须满足。

MEM TECH 08 01 W-ck.JPG

上图(点击放大)就是这样的一个仓库基地(P-Bank),它由4个大仓库(内存芯片)组成,它们的规模都相当大,每个大仓库为基地提供16条传送带(芯片位宽为16bit),总共加起来刚好就是64条。每个大仓库里都有四个规模和结构相同的子仓库(L-Bank),它们都被统一编了号。而子仓库中有很多层(行),每层里又有很多的储藏间(列),每个储藏间可以放置16个标准货物,虽然子仓库的规模很大,但每一层和每一个房间也都编好了号,而且每一层都有一个搬运工在值班。

为了与外界联系方便,仓储集团与调度室设置了专线电话,和一个国家一样,每个仓库基地有一个区号(片选),另外还有四个子仓库号码(L-Bank地址),是所有大仓库共享的,一个号码对应所有大仓库中编号相同的子仓库。而专线电话的数量也是四个,这样可保证与某个子仓库通话时不会妨碍给其他子仓库打电话。在子仓库的每层则设立分机给搬运工使用。子仓库的楼下就是传送带,找到货物把它扔到上面。但每个大仓库只有一个传送带,也就是说同一时间内只能有一个子仓库在工作。每个子仓库都有一个自己的生产车间(读出放大器)负责指定货物的生产,并且每个大仓库都有一个外运站(数据输出寄存器)和寄存托运处(数据输入寄存器与写入驱动器)与传送带相连,前者负责货物的输出中转,后者负责所接受货物并寄存然后帮助搬运工运送到指定储藏间。那么它是如何与调度厂房协同工作的呢?  

1、需求方有货物请求了,这个请求发送到调度厂房,调度人员开根据货主的要求给指定的子仓库打电话,电话号码是:区号+子仓库号码+楼层分机(片选+L-Bank寻址+行有效/选通)。那一层的搬运工接到电话后就开始准备工作。  

2、当搬运工点亮所有储藏间的门牌(tRCD)之后,调度人员会告诉搬运工,货物放在哪个储藏间里(列寻址),如果货物很多,并且是连续存放的,调度员会通知搬运工:“一会儿要搬的时候,从起始房间开始连续将后面的n个房间的货物都搬出来,我就不再重复了”(突发传输)。但是,他告诉搬运工要等一下,要求所有大仓库的人员统一行动,先别出货。  

3、根据事先的规定,搬运工在经过指定的时间后开始将货物扔到传送带上,传送带开始运转并将货物送到生产车间,由它来复制出全新的货物,然后再送到传送带上通过外运站向调度厂房运去。人们通常把从搬运工找到具体储藏间开始,到货物真正出现在送往调度厂房的传送带上的这段时间称之为“输出潜伏期”(CL),而从值班人把货物扔到传送带到货物开始传向调度厂房的这段时间,被称为“货物输出延迟”(tAC),它体现了值班人员的反应时间和生产车间的效率,也影响着仓库基地所在集团(DIMM)的名声。  

4、在这个搬运工工作的同时,由于电话对于编号相同的子仓库是并联的,所以其他子仓库相同楼层的搬运工也收到相同的命令,从相同编号的房间搬出货物,运向各自的生产车间。此时,同一批货物同时出现在各自的16条传送带上,并整齐地向调度厂房运去。  

5、当货物传送完后,原始货物还要送回储藏间保管,这是必须的,但如果没有要求,货物可以一直保留在生产车间,如果再有需要就再生产,而不用再麻烦搬运工了(读出放大器相当于一个Cache)。调度人员接着会进行下一批货物的调度,当他发现下一批货物在上次操作的子仓库中,但不在刚才通话的那一层,只能再重新拨电话。这时,他通知各子仓库货物翻新运回,清理生产车间,之后挂断电话(预充电命令),这一切必须要在指定时间里(tRP)完成,然后才能给新的楼层打电话。搬运员接到通知后,就将这一

层中所有房间的货物都拿到生产车间进行翻新(没有货物的就不用翻新),然后再搬回储藏间。干完这一切之后,搬运工挂了电话(关闭行)就可以休息了,他们称这种工作为“货物清理返运”(预充电)。这个工作的速度也要快,否则同样会影响集团名声。当然,这个工作可以让搬运工自动完成(自动预充电),只需调度员在当初下搬运指令时提醒一他:“货物运送完了,就进行货物清理返运吧,我不管了”(用A10地址线)。  

6、当有货物要运来存储时,调度员在向子仓库发送货物的同时就给指定的楼层打电话,让他们准备好房间,此时货物已经到了寄存托运处,没有任何的运送延迟(写入延迟=0),搬运工在托运间的帮助下,向指定的储藏间运送货物,这可需要一定的时间了,他们称之为货物堆放时间(tWR),必须给足搬运工们这一时间,而不能在这期间里让他们干其他的工作,否则他们会令货物丢失并罢工……

(注:本插栏是对DRAM操作的形象性描述,谨供辅助性理解本专题,严谨的操作说明见上文。另外,在此请各位读者注意,将内存比喻为仓库只是为了形象化描述,而不要把内存等同理解为存储,它们是有本质的不同的,在本文的比喻中,它只是一个临时性仓库,这一点请大家分清,不要因此产生新的错误概念。

SDRAM的结构、时序与性能的关系(上)

在讲完SDRAM的基本工作原理和主要操作之后,我们现在要重要分析一下SDRAM的时序与性能之间的关系,它不在局限于芯片本身,而是从整体的内存系统去分析。这也是广大DIYer所关心的话题。比如CL值对性能的影响有多大几乎是每个内存论坛都会有讨论,今天我们就详细探讨一下,其中的很多内容同样适用于DDR与RDRAM。这里需要强调一点,对于内存系统整体而言,一次内存访问就是对一个页的访问,这个页的定义已经在解释Full Page含义时讲明了。由于在P-Bank中,每个芯片的寻址都是一样的,所以可以将页访问“浓缩”等效为对每芯片中指定行的访问,这样可能比较好理解。但为了与官方标准统一,在下文中会经常用页来描述相关的内容,请读者注意理解。

一、影响性能的主要时序参数

所谓的影响性能是并不是指SDRAM的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。

非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是tRCD、CL和tRP。每条正规的内存模组都会在标识上注明这三个参数值,可见它们对性能的敏感性。

以内存最主要的操作——读取为例。tRCD决定了行寻址(有效)至列寻址(读/写命令)之间的间隔,CL决定了列寻址到数据进行真正被读取所花费的时间,tRP则决定了相同L-Bank中不同工作行转换的速度。现在可以想象一下读取时可能遇到的几种情况(分析写入操作时不用考虑CL即可):

1、要寻址的行与L-Bank是空闲的。也就是说该L-Bank的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为tRCD+CL,这种情况我们称之为页命中(PH,Page Hit)。

2、要寻址的行正好是前一个操作的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为CL,这就是所谓的背靠背(Back to Back)寻址,我们称之为页快速命中(PFH,Page Fast Hit)或页直接命中(PDH,Page Direct Hit)。

3、要寻址的行所在的L-Bank中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是tRP+tRCD+CL,这种情况我们称之为页错失(PM,Page Miss)。

显然,PFH是最理想的寻址情况,PM则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为PHR——PH Rate、PFDR——PFH Rate、PMR——PM Rate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高PHR与PFHR,同时减少PMR,以达到提高内存工作效率的目的。

二、增加PHR的方法

显然,这与预充电管理策略有着直接的关系,目前有两种方法来尽量提高PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一L-Bank不同行寻址时发生冲突的可能性。但是,如果要在当前行工作完成后马上打开同一L-Bank的另一行工作时,仍然存在tRP的延迟。怎么办? 此时就需要L-Bank交错预充电了。

VIA的4路交错式内存控制就是在一个L-Bank工作时,对下一个要工作的L-Bank进行预充电。这样,预充电与数据的传输交错执行,当访问下一个L-Bank时,tRP已过,就可以直接进入行有效状态了。目前VIA声称可以跨P-Bank进行16路内存交错,并以LRU算法进行预充电管理。

有关L-Bank交错预充电(存取)的具体执行在本刊2001年第2期已有详细介绍,这里就不再重复了。


MEM TECH 09 01 jc.png 



L-Bank交错自动预充电/读取时序图(可点击放大):L-Bank 0与L-Bank 3实现了无间隔交错读取,避免了tRP对性能的影响


三、增加PFHR的方法

无论是自动预充电还是交错工作的方法都无法消除tRCD所带来的延迟。要解决这个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收多个工作命令,以达到背靠背的效果,此时就只剩下CL所造成的读取延迟了(写入时没有延迟)。

如何做到这一点呢?这就是北桥芯片的责任了。在上文的时序图中有一个参数tRAS(Active to Precharge Command,行有效至预充电命令间隔周期)。它有一个范围,对于PC133标准,一般是预充电命令至少要在行有效命令5个时钟周期之后发出,最长间隔视芯片而异(基本在120000ns左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有120000ns的持续工作时间而不用进行预充电。显然,只要北桥芯片不发出预充电(包括允许自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有tRCD的延迟。可见,如果北桥芯片在能同时打开的行(页)越多,那么PFHR也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些SDRAM芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。


MEM TECH 09 02 845.png


Intel 845芯片组MCH的资料:其中表明它可以支持24个页面同时处于打开状态

但是,可同时打开的页数也是有限制的。从SDRAM的寻址原理讲,同一L-Bank中不可能有两个打开的行(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已经将同时打开页数发挥到了极致。

不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读/写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限的话,就需要一个替换策略,一般都是用LRU算法来进行,这与VIA的交错控制大同小异。




MEM TECH 09 03 LRU.png

SDRAM的结构、时序与性能的关系(下)

四、内存结构对PHR的影响

这是结构设计上的问题,所以单独来说。在我们介绍L-Bank时,曾经提到单一的L-Bank会造成严重的寻址冲突。现在,当我们了解了内存寻址的原理后,就不难理解这句话了。如果只有一个L-Bank,那么除非是背靠背式的操作(PFH),否则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多了,相应外围辅助的元件也要增加,比如S-AMP,L-Bank地址线等等。在RDRAM的介绍中,我会讲到L-Bank数量增多后所带来的一些新问题。

五、读/写延迟不同对性能所造成的影响

SDRAM在读取操作时会有CL造成的延迟,而在写入时则是0延迟。这样,在读操作之后马上进行写操作的话,由于没有写延迟,数据线不会出现空闲的时候,保证了数据总线的利用率。但是,若在写操作之后马上进行读操作的话,即使是背靠背式进行,仍然会由于tWR与CL的存在而造成间隔,这期间数据总线将是空闲的,利用率受到了影响。

MEM TECH 10 01 xhd.png

在先写后读的操作中,由于保证写入的可靠性,读取命令在tWR之后发出,并再经过CL才能输出数据,本例中CL=3,造成了两个时钟周期的总线空闲(上图可点击放大)

这里需要着重说明一下,在突发读取过程中,想立刻中断并进行新的读操作,和读后读模式(见“突发连续读取模式图”)一样,只是新的读命令根据需要提前若干个周期发出,经过CL后就会自动传输新的数据。但是,若想中断读后立即进行写操作,就需要数据掩码(DQM)来屏蔽写入命令发出时的数据输出,避免总线冲突。根据芯片设计的不同,有时可能会浪费一个周期进行总线I/O的调转,此时一个周期的总线空闲也是不可避免的。

MEM TECH 10 02 dhx.png

突发读后写时的操作,以本图为例,在最后一个所需数据(本例为第一笔数据)输出前一个周期使DQM有效,屏蔽第二笔数据的输出;2、发出写入命令,此时所读取的第二笔数据被屏蔽。3、继续DQM以屏蔽第三笔数据的输出。其中tHZ表示输出数据与外部电路的连接周期,tDS表示数据输入准备时间,如果tHZ+tDS>tCK,那么写入操作就要延后一个周期,这要视芯片的具体设计而定(上图可点击放大)

MEM TECH 10 03 QDM.png


六、BL对性能的影响

从读/写之间的中断操作我们又引出了BL(突发长度)对性能影响的话题。首先,BL的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的BL,这是厂商们经过多年的实践总结出来的。

MEM TECH 10 04 biao-3.png

BL与相应的工作领域

BL越长,对于连续的大数据量传输很有好处,但是对零散的数据,BL太长反而会造成总线周期的浪费。以P-Bank位宽64bit为例,BL=4时,一个突发操作能传输32字节的数据,但如果只需要前16个字节,后两个周期是无效的。如果需要40字节,需要再多进行一次突发传输,但实际只需要一个传输周期就够了,从而浪费了三个传输周期。而对于2KB的数据,BL=4的设置意味着要每隔4个周期发送新的列地址,并重复63次。而对于BL=256,一次突发就可完成,并且不需要中途再进行控制。不少人都因此表示了BL设定对性能影响的担心。

但设计人员也不是傻瓜,通过上文的介绍,可以看出他们在这方面的考虑。通过写命令、DQM、读命令的配合/操作,完全可以任意地中断突发周期开始新的操作,而且DQM还可以帮我们在BL中选择有用的数据,从而最大限度降低突发传输对性能带来的影响。另外,预充电命令与专用的突发传输终止命令都可以用来中断BL,前者在中断后进行预充电,后者在中断后不进行其他读/写操作。


MEM TECH 10 05 tft.png
专用的突发停止命令可用来中断突发读取,其生效潜伏期与CL相同。对于写入则立即有效(上图可点击放大)

MEM TECH 10 06 tfcd.png

用预充电命令来中断突发读取,生效潜伏期与CL相同,要小于或等于tRP。写入时预充电在最后一个有效写入周期完成,并经过tWR之后发出,同时立即中断突发传输

所以,突发周期的中断并不难,但用短BL应付大数据量存取需要不断的指令与列寻址配合,而为了取消不需要的传输周期,由于需要运用额外的控制,也将占用不少的控制资源。所以BL针对不同应用领域有不同设计的主要目的,就是在保证性能的同时,系统控制资源也能得到合理的运用。

MEM TECH 10 07 Tufa.png



如日中天——DDR SDRAM(上)

DDR SDRAM全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”。DDR SDRAM在原有的SDRAM的基础上改进而来。也正因为如此,DDR能够凭借着转产成本优势来打败昔日的对手RDRAM,成为当今的主流。由于SDRAM的结构与操作在上文已有详细阐述,所以本文只着重讲讲DDR的原理和DDR SDRAM相对于传统SDRAM(又称SDR SDRAM)的不同。

MEM TECH 11 01 DDR.png

DDR SDRAM可在一个时钟周期内传送两次数据(上图可点击放大)

一、DDR的基本原理

有很多文章都在探讨DDR的原理,但似乎也不得要领,甚至还带出一些错误的观点。首先我们看看一张DDR正规的时序图。

MEM TECH 11 02 ddr-2.png

DDR SDRAM读操作时序图

从中可以发现它多了两个信号: CLK#与DQS,CLK#与正常CLK时钟相位相反,形成差分时钟信号。而数据的传输在CLK与CLK#的交叉点进行,可见在CLK的上升与下降沿(此时正好是CLK#的上升沿)都有数据被触发,从而实现DDR。在此,我们可以说通过差分信号达到了DDR的目的,甚至讲CLK#帮助了第二个数据的触发,但这只是对表面现象的简单描述,从严格的定义上讲并不能这么说。之所以能实现DDR,还要从其内部的改进说起。

MEM TECH 11 03 DDRjg.png

DDR内存芯片的内部结构图,注意比较上文中SDRAM的结构图

这也是一颗128Mbit的内存芯片,标称规格也与前文的SDRAM一样为32×4bit。从图中可以看出来,白色区域内与SDRAM的结构基本相同,但请注意灰色区域,这是与SDRAM的不同之处。首先就是内部的L-Bank规格。SDRAM中L-Bank存储单元的容量与芯片位宽相同,但在DDR SDRAM中并不是这样,存储单元的容量是芯片位宽的一倍,所以在此不能再套用讲解SDRAM时 “芯片位宽=存储单元容量” 的公式了。也因此,真正的行、列地址数量也与同规格SDRAM不一样了。

以本芯片为例,在读取时,L-Bank在内部时钟信号的触发下一次传送8bit的数据给读取锁存器,再分成两路4bit数据传给复用器,由后者将它们合并为一路4bit数据流,然后由发送器在DQS的控制下在外部时钟上升与下降沿分两次传输4bit的数据给北桥。这样,如果时钟频率为100MHz,那么在I/O端口处,由于是上下沿触发,那么就是传输频率就是200MHz。

现在大家基本明白DDR SDRAM的工作原理了吧,这种内部存储单元容量(也可以称为芯片内部总线位宽)=2×芯片位宽(也可称为芯片I/O总线位宽)的设计,就是所谓的两位预取(2-bit Prefetch),有的公司则贴切的称之为2-n Prefetch(n代表芯片位宽)。

二、DDR SDRAM与SDRAM的不同

DDR SDRAM与SDRAM的不同主要体现在以下几个方面。

DDR SDRAM与SDRAM的主要不同对比表

MEM TECH 11 04 biao-4.png

MEM TECH 11 05 tsop.png

DDR SDRAM与SDRAM一样,在开机时也要进行MRS,不过由于操作功能的增多,DDR SDRAM在MRS之前还多了一EMRS阶段(Extended Mode Register Set,扩展模式寄存器设置),这个扩展模式寄存器控制着DLL的有效/禁止、输出驱动强度、QFC 有效/无效等。

MEM TECH 11 06 qfc.png

由于EMRS与MRS的操作方法与SDRAM的MRS大同小异,在此就不再列出具体的模式表了,有兴趣的话可查看相关的DDR内存资料。下面我们就着重说说DDR SDRAM的新设计与新功能。

MEM TECH 11 07 CSP.png

如日中天——DDR SDRAM(下)

1、 差分时钟

差分时钟(参见上文“DDR SDRAM读操作时序图”)是DDR的一个必要设计,但CK#的作用,并不能理解为第二个触发时钟(你可以在讲述DDR原理时简单地这么比喻),而是起到触发时钟校准的作用。由于数据是在CK的上下沿触发,造成传输周期缩短了一半,因此必须要保证传输周期的稳定以确保数据的正确传输,这就要求CK的上下沿间距要有精确的控制。但因为温度、电阻性能的改变等原因,CK上下沿间距可能发生变化,此时与其反相的CK#就起到纠正的作用(CK上升快下降慢,CK#则是上升慢下降快)。而由于上下沿触发的原因,也使CL=1.5和2.5成为可能,并容易实现。


MEM TECH 12 01 cfsz.png
与CK反相的CK#保证了触发时机的准确性

2、 数据选取脉冲(DQS)

DQS是DDR SDRAM中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由北桥发来的DQS信号,读取时,则由芯片生成DQS向北桥发送。完全可以说,它就是数据的同步信号。

在读取时,DQS与数据信号同时生成(也是在CK与CK#的交叉点)。而DDR内存中的CL也就是从CAS发出到DQS生成的间隔,数据真正出现在数据I/O总线上相对于DQS触发的时间间隔被称为tAC。注意,这与SDRAM中的tAC的不同。实际上,DQS生成时,芯片内部的预取已经完毕了,tAC是指上文结构图中灰色部分的数据输出时间,由于预取的原因,实际的数据传出可能会提前于DQS发生(数据提前于DQS传出)。由于是并行传输,DDR内存对tAC也有一定的要求,对于DDR266,tAC的允许范围是±0.75ns,对于DDR333,则是±0.7ns,有关它们的时序图示见前文,其中CL里包含了一段DQS的导入期。

前文已经说了DQS是了保证接收放的选择数据, DQS在读取时与数据同步传输,那么接收时也是以DQS的上下沿为准吗?不,如果以DQS的上下沿区分数据周期的危险很大。由于芯片有预取的操作,所以输出时的同步很难控制,只能限制在一定的时间范围内,数据在各I/O端口的出现时间可能有快有慢,会与DQS有一定的间隔,这也就是为什么要有一个tAC规定的原因。而在接收方,一切必须保证同步接收,不能有tAC之类的偏差。这样在写入时,芯片不再自己生成DQS,而以发送方传来的DQS为基准,并相应延后一定的时间,在DQS的中部为数据周期的选取分割点(在读取时分割点就是上下沿),从这里分隔开两个传输周期。这样做的好处是,由于各数据信号都会有一个逻辑电平保持周期,即使发送时不同步,在DQS上下沿时都处于保持周期中,此时数据接收触发的准确性无疑是最高的。


MEM TECH 12 02 DQSxr.png
在写入时,以DQS的高/低电平期中部为数据周期分割点,而不是上/下沿,但数据的接收触发仍为DQS的上/下沿

3、 写入延迟

在上面的DQS写入时序图中,可以发现写入延迟已经不是0了,在发出写入命令后,DQS与写入数据要等一段时间才会送达。这个周期被称为DQS相对于写入命令的延迟时间(tDQSS, WRITE Command to the first corresponding rising edge of DQS),对于这个时间大家应该很好理解了。

为什么要有这样的延迟设计呢?原因也在于同步,毕竟一个时钟周期两次传送,需要很高的控制精度,它必须要等接收方做好充分的准备才行。tDQSS是DDR内存写入操作的一个重要参数,太短的话恐怕接受有误,太长则会造成总线空闲。tDQSS最短不能小于0.75个时钟周期,最长不能超过1.25个时钟周期。有人可能会说,如果这样,DQS不就与芯片内的时钟不同步了吗?对,正常情况下,tDQSS是一个时钟周期,但写入时接受方的时钟只用来控制命令信号的同步,而数据的接受则完全依靠DQS进行同步,所以DQS与时钟不同步也无所谓。不过,tDQSS产生了一个不利影响——读后写操作延迟的增加,如果CL=2.5,还要在tDQSS基础上加入半个时钟周期,因为命令都要在CK的上升沿发出。


MEM TECH 12 03 DDRdhx.png
当CL=2.5时(上图可点击放大),读后写的延迟将为tDQSS+0.5个时钟周期(图中BL=2)

昔日贵族——Rambus DRAM(一)

谈起DDR SDRAM与Rambus DRAM(简称RDRAM)之间的恩怨,很多人现在还是津津乐道。的确,上一世纪末的内存大战虽胜负已分,但至今仍余波未平。在主流市场DDR SDRAM成为王者,RDRAM则沦为“高端贵族”。

MEM TECH 13 01 rd-drd.png

Rambus公司于1990年3月成立,之后不久就有了Rambus的核心专利——RSL(Rambus Signaling Level,Rambus发信电平技术)。Rambus内存最早出现于1995年12月,那时它与任天堂64(Nintendo64)游戏机一起发售,但名声不大。从1996年12月开始,Rambus与Intel合作开发,准备将Rambus推广到PC领域。到Rambus内存真正亮相于PC市场时已经是1999年11月了。

一、RDRAM简介

RDRAM与DDR SDRAM一样,也是一种采用双沿触发技术的内存, 但它在结构、控制体系方面相对于传统SDRAM有着不小的变化,首先我们来看看它与SDRAM之间的简单比较:


MEM TECH 13 02 biao-5.png
MEM TECH 13 03 SDR-RD.png

RDRAM与传统SDRAM的架构比较

从架构比较图中,可以看出RDRAM在工作方式上与SDRAM有了很大不同。SDRAM需要多颗芯片并联组成P-Bank与北桥沟通,而在RDRAM架构中每个芯片就是一个单独工作的读写单元,芯片的位宽就是与北桥接口的位宽,所以如果想用ECC,就要用专门的ECC型芯片,也因此有了16/18bit的两种规格。而芯片的位宽就是一个RDRAM通道的位宽(本文以16bit芯片为例进行介绍)。

为了达到更高的容量,在一个通道中将多颗RDRAM芯片串起来,形成RIMM(Rambus Interface Memory Module,Rambus接口内存模组),如果主板允许,完全可以设计一个超长的内存插槽与模组,但现实中肯定不能这么做,所以在主板上Rambus又把模组串起来组成通道。由于是串联的形式,所以要求起始端与终结端形成一个完整的通路,而RIMM就是这个通路的串联器,因此Rambus要求所有的插槽必须插满,如果没有RIMM则用C-RIMM(Continuity RIMM,RIMM续连器)代替,以达到联通RSL信号并行终结器的目的。工作时,RDRAM每次寻址一颗芯片,所需要的数据则由通道数据总线传送到北桥,而不像SDRAM那样由所在模组直接通过DIMM接口传向北桥,也因此RIMM的引脚定义几乎是左右对称的。

由于位宽的降低,为保证高带宽,RDRAM使用了更高的时钟频率(这就意味着它不可能与系统时钟同步,所以只能叫RDRAM而不是RSDRAM),芯片的工作频率明显高于SDRAM/DDR,这样芯片的工作热量也急剧上升,为此Rambus在官方规范中规定RIMM必须配备散热片,从而成了现在这个样子。


MEM TECH 13 04 rimm4200.jpg
32bit位宽PC1066芯片标准的RIMM,它是目前PC领域中性能最高的RDRAM产品

二、RDRAM的结构简介

1、 RDRAM的L-Bank结构

RDRAM的内部仍主要由L-Bank构成,但它的设计与SDRAM家族有很大的不同。首先,每个L-Bank有两个数据通道A和B,各为8bit位宽(ECC型号为9bit,这种设计就是Direct DRAM较以前RDRAM的不同),每个端口都配有S-AMP。根据L-Bank数量与S-AMP的分配方式不同,目前RDRAM共有三种内核结构,分别是32s、16d与4i。

较早时,RDRAM的设计是16d,所谓的d是指Double(双),即除了0与15号L-Bank,其余相邻的L-Bank每个数据通道(A和B)共用一个S-AMP。

MEM TECH 13 05 16d.png

16d L-Bank结构(上图可点击放大)

后来分别向高端和低端领域发展了32s与4i技术。前者的s代表Split,它将原来的16d内核分割为两个部分,各为16d结构,0、15、16、31号L-Bank的每个数据通道各自独占一个S-AMP。4i则与传统的SDRAM相似,i代表Independent(独立),只有4个L-Bank,各L-Bank的每个数据通道有单独的S-AMP。


MEM TECH 13 06 32s.png
32s L-Bank结构


MEM TECH 13 07 4i.png
4i L-Bank结构

上文已经讲过,L-Bank数越多,造成L-Bank寻址冲突的机率就越小,但理论上L-Bank越多,所用的S-AMP也就越多, RDRAM内存核心加工与面积控制的难度就越大,因此32s与16d都采用了共享S-AMP的设计。但即使这样,RDRAM的生产成本仍被限制在较高的水平上,在早期这成为了RDRAM难以普及的重要原因。而4i就是为解决这一问题而出现的方案,成本更低,但性能也较前两者降低了。

另外,由于共享S-AMP的设计,除了个别独有S-AMP的L-Bank,其他的L-Bank每次预充电操作也都是成双成对的。为此,在逻辑控制上,RDRAM的操作要尽量避免相邻L-Bank前后进行,否则也会降低RDRAM的实际效率。

2、RDRAM的主要特点

目前RDRAM主要有两个容量规格——128Mbit和256Mbit。L-Bank中存储单元的容量也并不等于RDRAM的接口位宽,而是它的8倍,因此可以说RDRAM是一种8bit预取设计,这是它最主要的特点。对于16bit芯片,其存储单元的容量为128bit,这些数据分别从通道A和B传输至L-Bank,也就是说L-Bank两端的S-AMP一次各负责72bit数据的传输。由于预取为8bit,所以RDRAM的突发长度也固定为8,因为如果再高,对于PC应用将不太适合。不过需要特别注意的是,一个字节的数据不是由数据通道中的8条数据线进行并排传输,而是一个字节由一条数据线进行8次传输(即串行传输,这也是为什么有人说RDRAM是串行内存的原因),这一点也与SDRAM不同,它意味着北桥在进行数据读/写时,必须要等8个周期之后才能完成,中途不能停止。也就是说,读取时目前的北桥(如850)一次接收128bit(16字节)的数据,然后再转换为两个64bit数据分两次向CPU传送。

MEM TECH 13 08 RDRAM-S.png

由于RDRAM的存储单元容量很大,所以RDRAM的行列地址线也大为减少,以256Mbit的4i结构的RDRAM为例,行地址为12bit(4096),列地址为7bit(128)。如果是32s结构的,由于L-Bank地址的增多,行列地址要更少(分别是9和7bit)。而且RDRAM的行列地址线是独立的,但是RDRAM的行与列地址线各自只有3条和5条,显然不够用,Rambus又是怎么搞定的呢?这就涉及到RDRAM具体的操作设计了。

昔日贵族——Rambus DRAM(二)

三、 RDRAM的具体操作与相关技术

1、 初始化与命令包

RDRAM也有一个控制寄存器,在开机初始化过程中用来对RDRAM芯片进行配置,有的信息由北桥动态写入(如芯片地址、自刷新模式等),有的则是出厂时就设置好不能更改的(如刷新计数、生产商信息、支持的协议版本等)。在初始化之后,RDRAM才能进入正常的工作状态。 RDRAM的读写操作过程与SDRAM基本是一样的,也要进行片选、L-Bank定址、行/列寻址等操作(此时的行就是指RDRAM内存系统中的页),但由于它的每次操作只针对一颗芯片,所以具体操作起来有很大不同,这主要体现在“命令包”的方式上。


MEM TECH 14 01 RDRAMd.png
RDRAM读取时序图,以PC800为例,400MHz时钟频率。

在上图中,我们可以看到行寻址命令与列寻址(读)命令并没有同时发出,而且各自占用了10ns的时间。我们算一算,对于PC800,10ns相当于8个传输周期。难道是传输有延迟?从行列地址的设计,就能猜到这是一个命令包形式的操作。 所谓的命令包,就是将一组命令集合在一起,统一发出。在RDRAM中,行命令包与列命令包都分为两种,一种是正常的读/写操作命令,一种是芯片操作命令(如数据掩码、预充电、刷新、电源管理等)。现在我们就看看行与列读/写命令包都包含哪些信息。


MEM TECH 14 02 hmlb.png
行读/写命令包的信息组成


MEM TECH 14 03 biao-6.png

MEM TECH 14 04 ld.png

列读/写命令包的信息组成

MEM TECH 14 05 biao-7.png


至于操作命令包就不在此多说了,因为构成的形式基本就是这样,每次用8个传输周期进行命令发送。而且由于RDRAM的命令代码很多,也比较复杂,在本专题中也不用一一列出,关键在于让大家明白RDRAM的寻址是怎么一回事即可,剩下的具体代码定义,如果有兴趣大家可以自行研究。

MEM TECH 14 06 RD-32.png

2、 操作时序计算

通过上面的时序图,我们可以发现RDRAM计算时序的方法与SDRAM家族不一样,这在比较两者间时序效率时有着关键的影响。

Rambus的时序规定与FPE/EDO内存时一样,在读取时延用了tRAC、tCAC的定义,前者是行访问周期(RAC,RAS Access Cycle/Delay),后者是列访问周期(CAC,CAS Access Cycle/ Delay),你可以把它等同于SDRAM中的CL,但决不能在RDRAM中引入CL这个概念。在写入时则将tCAC替换为tCWD(CAS to Write Delay)。它们的单位都是时钟周期,对于PC800,一个时钟周期就是2.5ns,对于PC1066就是1.876ns了。显然,时钟频率越高,延迟周期就越短。

但是这些时序是从命令包发送完毕开始计算,SDRAM则是在命令发送同时开始计算。因此,在计算RDRAM的操作延迟时,命令包本身占用的时间也必须要考虑进来。

3、 写入延迟与掩码操作

RDRAM为写入设置了专用的延迟tCWD,这并不是被迫而是有意设计的。RDRAM不需要DQS之类的信号进行同步操作,数据是可以立即接受的,但出于总线利用率的考虑,RDRAM加入了写入延迟,它略短于tCAC。在具体操作中,芯片上没有引脚控制写入允许/禁止,一切的命令在命令包中进行定义,所以读命令可以在写过程中发出,经过tCAC后有效。这样在写后读操作中,除了tCAC与tCWD之间的差距外(估计是留给写回的时间),几乎没有任何停顿,而不像SDR/DDR SDRAM中有较大延迟。

在写入过程中,数据都是先存在写入缓冲区中,这个操作的目的在于等待掩码的控制。RDRAM的数据掩码只对写入有效,当收到掩码命令后,RDRAM将指定的引脚数据从缓冲区中删除,之后再进行真正的写入。

昔日贵族——Rambus DRAM(三)

4、多通道技术与多通道模组

PC800的速度在当时可算是RDRAM的一极限,但它的1.6GB/s带宽并不能满足高端应用的需要,而且DDR一方主推的产品是P2100的DDR-266,为此RDRAM利用双通道技术来弥补带宽上的不足。简单的说,它就像一个用于内存的RAID,两个通道的数据在RAC一端进行分割(写)与合并(读),两个通道的RIMM缺一不可并要求结构完全一致,因为寻址信号是一样的,必须适用于两个RIMM,这也就意味着两个RIMM的存储轨迹也是一样。但是,数据的寻址延迟并没有变化,只是连续传输率提高了一倍达到3.2GB/s(两个PC800通道),而且总的内存容量也增加了一倍。时至今日,虽然RDRAM使用窄位宽设计,但毕竟不是串行的方式,提升频率也越来越困难,最新的PC1066标准也只达到2.1GB/s的带宽,此时双通道设计几乎成为RDRAM的标配。可以说没有双通道技术的支持,RDRAM是很难走到今天的。


MEM TECH 15 01 RDstd.png
RDRAM双通道结构

以前,双通道技术是以两条RIMM来实现,在双通道已经是RDRAM标准设计的今天,这种设计的弊病很明显,比如客户的购置成本、主板的布线设计等。为此,在一些内存厂商的支持下,RDRAM出现了多通道模组设计,其主体思路就是将每个通道的信号终结电路移植到模组上来,在一个模组上实现多通道传输。


MEM TECH 15 02 32bit RIMM.png
32bit的RIMM设计,每个通道的终结器做在了模组上

目前PC市场上32bit RIMM逐渐开始流行并终将取代传统的双通道设计,对于64bit RIMM,由于是4通道设计,得需要4通道北桥芯片的支持,所以目前不可能在台式机领域里普及。


MEM TECH 15 03 32-64.png
不同规格的RIMM间比较(上图可点击放大)

MEM TECH 15 04 32-RIMM.png


5、 黄石技术

黄石(Yellowstone)是Rambus为了适应未来带宽的需要而开发的信号与数据传输技术,其主要的技术特点有四个:

MEM TECH 15 05 YS.png
黄石技术的物理系统结构

A、3.2GHz传输频率,未来可高达6.4GHz,按16bit位宽计算,带宽可达6.4GB/s,双通道应用则为12.8GB/s。

B、极低电压的差分RSL信号(DRSL),降低电源消耗并保证信号质量与制造成本。信号电压差值只有200mV,是目前电压差最小的内存信号技术。


MEM TECH 15 06 DRSL.png
DRSL发信技术与其他内存接口发信技术的比较

C、八倍数据流技术(ODR,Octal Data Rate)。目前采用黄石技术的RDRAM,时钟频率仍是400MHz,但芯片内部通过专用的锁相回路(PLL)将其转换为1.6GHz的内部时钟,然后在此基础上使用DDR技术,从而能在一个时钟周期内传输8次数据。数据传输频率也因此达到了3.2GHz。


MEM TECH 15 07 ODR.png
ODR操作示意图

D、固定相位技术(FlexPhase),使内存生产者不再费力的去调校PCB的设计以减少延迟/潜伏期对数据/时钟间同步的影响。固定相位技术使信号本身就具备了数据/时钟同步与自校准能力,从而使外围有关时序跟踪的设计与布线变得非常简单,并有助于提高同步性,提高总线利用率。


MEM TECH 15 08 YS-G.png
Rambus展示的用于显卡的点对点黄石RDRAM显存方案

黄石技术于2001年10月2日正式发布,但是虽然它有这样那样的优点,但从最近的资料中显示,Rambus主要将其定位于消费电子、网络、通信和图形设备市场。对于目前的桌面PC市场,黄石在近期应用的可能性并不大。

昔日贵族——Rambus DRAM(四)

四、 目前的RDRAM与DDR SDRAM的比较

1、 延迟与总线利用率的比较

仍以PC800为例,由于tRAC已经包括了从行选通至数据输出的所有延迟,与是否双通道无关,所以我们只需将它再加上命令包的占用时间即可算出RDRAM一次访问所需要的时间。PC800的tRAC基本都是40ns(16个时钟周期),加上命令包占用的4个时钟周期10ns,总共耗时为50ns。而这是在行关闭的情况下,没有计算预充电的时间tRP,它一般为12个时钟周期(加上命令包时间),即30ns,共计80ns。显然,时钟频率越高,延迟就会越短。下面就来比较一下读取操作时RDRAM与DDR SDRAM的延迟。


MEM TECH 16 01 biao-8.png
读取操作时RDRAM与DDR SDRAM的延迟比较表(上图可点击放大)

从对比表中可以看出,RDRAM相对于DDR SDRAM在首次寻址时的确存在较大的延迟,即使是最新的PC1066,在与DDR-333的比较中也不占优势。不过,借助于双通道的设计,RDRAM在高数据量传输应用中的优势还是比较明显的。另外,在总线的利用率方面RDRAM的设计也居领先地位,这为保证它的总体效率提供了坚实的保障。


MEM TECH 16 02 biao-9.png
各内存的总线效率比较

这个对比表是东芝公司经过反复实验而得出的结论,它是通过一些典型的操作(如写-读-读),结合不同页命中情况下的时序,以及刷新对内存操作的影响等分析而得出的。由于DDR SDRAM在L-Bank数量上占劣势,所以出现L-Bank寻址冲突的可能性要大为提高,而且在写后读操作中,RDRAM的延迟也明显小于SDRAM家族,因此虽然PC800的峰值带宽不如DDR-266,但综合效率要更好。这可以解释为什么在一些测试中,RDRAM明显比DDR领先的原因。不过,在以零散数据为主的操作中,RDRAM的固定传输周期以及高延迟就成为了性能的障碍。

从前面的分析可以看出,SDRAM/DDR在数据控制上的灵活性要比RDRAM高,首次访问的延迟也更短,因此在某些操作中,即使带宽比RDRAM系统小,性能仍不见得落后。比如845D/E在某些应用测试中,完全可以与双通道PC1066一较高低。而Intel决定在高端服务器领域使用DDR芯片组,也基本是出于这个考虑,因为在服务器的操作中,零散型存取操作所占比例很大。相反,若大规模连续存取操作占比例很大(如视频与音频工作站),那么可能就要考虑RDRAM了。

2、 未来竞争展望

目前随着多通道技术在DDR上的普及,RDRAM在带宽上的优势也变得不明显了。所以,RDRAM如果不及时提高单通道的性能,很快会被强大的DDR家族赶出台式机领域。但RDRAM的时钟频率已经很高了,再向上提高已经很难,不少RDRAM厂商都表示,800MHz时钟频率可能将是RDRAM的一个巨大门槛,即使能超过,成本可能也是惊人的,要知道目前533/400MHz的RIMM就已使用了8层PCB,800MHz时PCB成本将很难控制。这也是为什么RDRAM急于推出32bit与64bit RIMM的原因,毕竟内存这种高带宽应用设备,还是需要一定位宽的保证。而且高位宽的同步性也不像想象中的那么难以控制,DQS的设计就很大程度地解决了这一问题,所以,DDR可以借助较少的转产成本,较低的PCB成本(即使是DDR-Ⅱ也是6层设计),成为PC内存的首选产品。

现在再去争论RDRAM与DDR谁胜谁败已经没有意义,RDRAM已经很难再在主流市场重振雄风。这主要不是它的技术限制,而是早期的市场动作与成本的压力造成的。虽然现在4i芯片开始起步,但支持这种结构的芯片组还很难找到(至少850E不支持)。在820时代,RDRAM由于成本而没有打开市场,现在可以通过降低成本来提高竞争力,但DDR一方也有了多通道技术。Rambus也因此明智地将黄石定位于专用/定制市场。这样,在今后很长一段时间里我们只有看DDR的独角戏了。

明日之星——DDR-Ⅱ与DDR-Ⅲ(一)

作为DDR的接班人,DDR-Ⅱ在规范制定之初就引起了广泛的关注,进入2002年,三星、Elpida、Hynix、Micron等都相继发布了DDR-Ⅱ芯片(最早由三星在5月28日发布),让人觉得DDR-Ⅱ突然和我们近了。可是,DDR-Ⅱ规范却一直没有正式公开,在JEDEC上仍只有一篇ATi技术人员写的,在目前看来有些内容都已过时的简要介绍。

原来,DDR-Ⅱ标准到2002年10月完成度也没有达到100%(厂商透露大约为95%),而上述厂商所推出的芯片也在不断的修改中,预计正式的规范将在明年第一季度推出。不过,DDR-Ⅱ的主体设计已经完成,不会有大的改动,所以通过这些“试验性”芯片,我们仍可掌握DDR-Ⅱ的主要信息。

DDR-Ⅱ相对于DDR 的主要改进如下:

MEM TECH 17 01 biao-10.png

DDR-Ⅱ与目前的DDR对比表

由于DDR-Ⅱ相对DDR-I的设计变动并不大,因此很多操作就不在此详细介绍了,本文重点阐述DDR-Ⅱ的一些重要变化。

一、 DDR-Ⅱ内存结构

DDR-Ⅱ内存的预取设计是4bit,通过DDR的讲述,大家现在应该知道是什么意思了吧。

上文已经说过,SDRAM有两个时钟,一个是内部时钟,一个是外部时钟。在SDRAM与DDR时代,这两个时钟频率是相同的,但在DDR-Ⅱ内存中,内部时钟变成了外部时钟的一半。以DDR-Ⅱ 400为例,数据传输频率为400MHz(对于每个数据引脚,则是400Mbps/pin),外部时钟频率为200MHz,内部时钟频率为100MHz。因为内部一次传输的数据就可供外部接口传输4次,虽然以DDR方式传输,但数据传输频率的基准——外部时钟频率仍要是内部时钟的两倍才行。就如RDRAM PC800一样,其内部时钟频率也为100MHz,是传输频率的1/8。


MEM TECH 17 02 DDR-IIczbj.png
DDR-Ⅱ、DDR与SDRAM的操作时钟比较

所以,当预取容量超过接口一次DDR的传输量时,内部时钟必须降低(除非数据传输不是DDR方式,而是一个时钟周期4次)。如果内部时钟也达到200MHz,那外部时钟也要达到400MHz,这会使成本有大幅度提高。因此,DDR-Ⅱ虽然实现了4-bit预取,但在实际效能上,与DDR是一样的。在上面那幅比较图中,可以看出厂商们的一种误导,它虽然表示出在相同的核心频率下,DDR-Ⅱ达到了两倍于DDR的的带宽,但前提是DDR-Ⅱ的外部时钟频率也是DDR和SDRAM的两倍。在DDR的时钟频率已经达到166/200MHz的今天,再用100MHz去比较,显然意义不大。这点也请大家们注意识别,上图更多的是说明DDR-Ⅱ内外时钟的差异。毕竟内部时钟由外部决定,所以外部时钟才是比较的根本基准。

总之,现在大家要明确认识,在外部时钟频率相同的情况下,DDR-Ⅱ与DDR的带宽一样。

二、 DDR-Ⅱ的新操作与新时序设计

1、片外驱动调校(OCD,Off-Chip Driver)

DDR-Ⅱ内存在开机时也会有初始化过程,同时在EMRS中加入了新设置选项,由于大同小异,在此就不多说了。在EMRS阶段,DDR-Ⅱ加入了可选的OCD功能。OCD的主要用意在于调整I/O接口端的电压,来补偿上拉与下拉电阻值。目的是让DQS与DQ数据信号之间的偏差降低到最小。调校期间,分别测试DQS高电平/DQ高电平,与DQS低电平/DQ高电平时的同步情况,如果不满足要求,则通过设定突发长度的地址线来传送上拉/下拉电阻等级(加一档或减一档),直到测试合格才退出OCD操作。

MEM TECH 17 03 OCD.png

OCD的作用在于调整DQS与DQ之间的同步,以确保信号的完整与可靠性

不过,据一些厂商的技术人员介绍,一般情况下有DQS#(差分DQS时)就基本可以保证同步的准确性,而且OCD的调整对其他操作也有一定影响,因此在普通台式机上不需要用OCD功能,它一般只会出现在高端产品中,如对数据完整性非常敏感的服务器等。

2、片内终结(ODT,On-Die Termination)

所谓的终结,就是让信号被电路的终端被吸收掉,而不会在电路上形成反射,造成对后面信号的影响。在DDR时代,控制与数据信号的终结在主板上完成,每块DDR主板在DIMM槽的旁边都会有一个终结电压岛的设计,它主要由一排终结电阻构成。长期以来,这个电压岛一直是DDR主板设计上的一个难点。而ODT的出现,则将这个难点消灭了。

顾名思义,ODT就是将终结电阻移植到了芯片内部,主板上不在有终结电路。ODT的功能与禁止由北桥芯片控制,ODT所终结的信号包括DQS、RDQS(为8bit位宽芯片增设的专用DQS读取信号,主要用来简化一个模组中同时使用4与8bit位宽芯片时的控制设计)、DQ、DM等。需要不需要该芯片进行终结由北桥控制。 那么具体的终结操作如果实现呢?首先要确定系统中有几条模组,并因此来决定终结的等效电阻值,有150和75Ω两档,这一切由北桥在开机进行EMRS时进行设置。


MEM TECH 17 04 ODTx.png
在向内存写入时,如果只有一条DIMM,那么这条DIMM就自己进行终结,终结电阻等效为150Ω。如果为两条DIMM,一条工作时,另一条负责终结,但等效电阻为75Ω


MEM TECH 17 05 ODTd.png
在从内存读出时,终结操作也将在北桥内进行,如果有两条DIMM,不工作的那一条将会终结信号在另一方向的余波,等效电阻也因DIMM的数量而有两种设置


MEM TECH 17 06 ODTdd.png
两个DIMM在交错工作中的ODT情况,第一个模组工作时,第二个模组进行终结操作,等第二个模组工作时,第一个模组进行终结操作

现在我们应该基本了解了ODT的功能,它在很大程度上减少了内存芯片在读取时的I/O功率消耗,并简化了主板的设计,降低了主板成本。而且ODT也要比主板终结更及时有效,从而也成为了提高信号质量的重要功能,这有助于降低日后DDR-Ⅱ进一步提速的难度。但是,由于为了确保信号的有效终结,终结操作期将会比数据传输期稍长,从而多占用一个时钟周期的时间而造成总线空闲。不过,有些厂商的技术人员称,通过精确设置tDQSS,可以避免出现总线空闲。

明日之星——DDR-Ⅱ与DDR-Ⅲ(二)

3、前置CAS、附加潜伏期与写入潜伏期

前置CAS(Posted CAS)是为了解决DDR内存中指令冲突而设计的功能。它允许CAS信号紧随RAS发送,相对于以往的DDR等于将CAS前置了。这样,地址线可以立刻空出来,便于后面的行有效命令发出,避免造成命令冲突而被迫延后的情况发生,但读/写操作并没有因此而提前,仍有要保证有足够的延迟/潜伏期,为此,DDR-Ⅱ引入了附加潜伏期的概念(AL,Additive Latency),与CL一样,单位为时钟周期数。AL+CL被定义为读取潜伏期(RL,Read Latency),相应的,DDR-Ⅱ还对写入潜伏期(WL,Write Latency)制定了标准,WL是指从写入命令发出到第一笔数据输入的潜伏期,不要将它和tDQSS弄混了,后者是指DQS而不是数据。按规定,WL=RL-1,即AL+CL-1。

MEM TECH 18 01 P-CAS.png
在没有前置CAS功能时,对其他L-Bank的寻址操作可能会因当前行的CAS命令占用地址线而延后,并使数据I/O总线出现空闲,当使用前置CAS后,消除了命令冲突并使数据I/O总线的利率提高

MEM TECH 18 02 AL.png
设置Posted-CAS后,必须附加潜伏期以保证应有延迟,此时读取潜伏期(RL)就等于AL+CL,从中可以看出AL的值为CL+tRCD-1

DDR-Ⅱ中CL最低值为3,最高为5,并且不再有x.5的设计,而AL值则为0-4。当AL设为0时,前置CAS无效,即为传统DDR模式的操作。不过前置CAS在解决命令冲突的时间也带来了新的问题——在背靠背式读取时,仍将经过AL+CL的潜伏期才能读取数据,比传统的只有CL相比,读取的延迟反而增加了。因此,AL=0是默认设置,只有在那些读写命令非常频繁的操作场合,才建议启动前置CAS功能(如服务器等),对于台式机用户,前置CAS的优点不足以抵消其带来的不利影响。


MEM TECH 18 03 ALqd.png
由于有了AL,在同一行中进行再读取时,在CL的基础上仍将增加AL造成的延迟,从而影响了性能

三、 DDR-Ⅱ未来发展与DDR-Ⅲ

1、 DDR-Ⅱ 的发展计划

虽然目前多家厂商都推出了DDR-Ⅱ内存芯片,但从DDR官方组织JEDEC方面得到的信息表明,距离DDR-Ⅱ内存大规模上市还很遥远,2004年才会是DDR-Ⅱ普通的阶段。而由于三星、南亚与Micron公司的大力推广,这期间JEDEC很可能会接受DDR-400标准,目前的争执主要在于能否在DDR-I的体系下保证DDR-400的可靠性。对此(成为JEDEC正式标准),三星与南亚公司都表示了很强的信心。 笔者认为,DDR-400应该会获得认可,毕竟市场上是有需要的,而让市场去等一年的时间迎接DDR-Ⅱ 400似乎并不现实。不过,多通道技术在DDR领域里的普及,可能也会改变JEDEC对认证DDR-400的想法,但关键要看多通道的性价比能不能填补这一空档,否则DDR-400就是一个最佳的选择(在完整/进阶版完稿之后又传来了Intel准备支持DDR-400的消息,可见DDR-400的前途)。


三星公司展示的DDR-333(下)与DDR-400(上)内存模组
三星公司展示的DDR-333(下)与DDR-400(上)内存模组

MEM TECH 18 05 samsungDDR-400v.jpg
三星是DDR-400的主推厂商,但请注意DDR-400的电压变化,它可能是引起兼容性问题的根源之一

也由于多通道的出现,市场上对DDR-Ⅱ的渴望也并不大,毕竟它与同频的DDR-I内存的带宽一样。而从上文可以看出,DDR-Ⅱ相对于DDR-I的不同设计很多都集中在了如何在更高的工作(时钟)频率下保证数据的可靠。只有当DDR-Ⅱ依靠自身的特有功能与设计来获得更高的时钟频率时,再配合多通道,才会真正拉开与DDR-I的距离,那时也就是DDR-Ⅱ普及的开始。但笔者预测DDR-Ⅱ 400将像DDR-200一样,注定是一个一出生就过时的标准,DDR-Ⅱ至少要从533开始流行。不过在目前情况下,我们还不必太在意DDR-Ⅱ的进展情况,说句实话,它离我们还很远。今天的介绍只是让大家对其有一个大概的了解。

明日之星——DDR-Ⅱ与DDR-Ⅲ(三)

1、DDR-Ⅱ内存图赏


MEM TECH 19 01 Micron-DDR-533.jpg

MEM TECH 19 02 Micron-DDR-II-533ac.jpg

MEM TECH 19 03 Microncsfxpt.jpg

MEM TECH 19 04 Micronxtbq.jpg

Micron公司的DDR-Ⅱ 533内存与DDR-Ⅱ分析/检测卡,它用来分析DDR-Ⅱ内存的工作情况,并依此对内存的内部设计进行改进,值得注意的是系统平台用的是令人怀念的Micron自己的芯片组


MEM TECH 19 05 samsungDDR-II 533-1.jpg
三星公司展示的DDR-Ⅱ 533内存模组,模组标准为PC4300,相应的,如果是DDR-Ⅱ 400将是PC3200


MEM TECH 19 06 DDR-IIncmz.jpg
Elpida公司的DDR-Ⅱ内存模组,银光闪闪的CSP封装显得与众不同

2、DDR-Ⅱ时代的封装技术

可以肯定的是TSOP-II将在DDR-Ⅱ时代彻底退出内存封装市场。并且将会出现改良型的CSP——WLP(Wafer Level Packaging,晶圆级封装),它是比CSP更为贴近芯片尺寸的封装方法,由于在晶圆上就做好了封装布线,因此在可靠性方面达到了更高的水平。不过,外在的模样仍与现在的CSP封装差不多,WLP更多的改进是在其内部。

另外值得一提的是为了应付更高容量的需求而采用的SiP封装技术,它是System-in-a-Package的缩写,有时又称之为Stacked Pakage,可以看作是一种集成封装技术。它将多枚内存芯片核心堆叠在一起,然后统一封装成一颗芯片,在有限的面积内通过充分利用空间达到容量倍增的目的。SiP并不是内存中专用的封装技术,原来是用于多种不同功能的芯片统一封装(如一颗嵌入式CPU+DRAM芯片)。

MEM TECH 19 07 4D.jpg
目前的SiP技术可以在CSP的基础上最多堆叠4枚内存芯片

3、DDR-Ⅲ简介

DDR-Ⅲ的设计始于2001年5月,目前只有一个大概的规格。按照JEDEC的计划,DDR-Ⅲ将在2007年正式出台,数据传输率至少从667MHz开始,预取数据容量大于4bit(很可能采用RDRAM那样的8bit设计),而且工作电压比1.8V更低,寄生干扰也将进一步减少。显然,它离我们更是遥远,还不到谈论它还的时候,要知道半导体技术日新月异, DDR-Ⅲ完全有可能因此而中途改变设计。在此,我们就当个小花边新闻吧。