视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
DDR基本原理
2025-10-01 16:42:13 责编:小OO
文档
DDR系统学习资料

1存储器

存储器是计算机系统中的记忆设备,用来存放程序和数据,是计算机系统中不可或缺的组成部分。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。

1.1存储器分类

按读写功能可分为ROM和RAM

1.2RAM(Randm Access Memory随机存取存储器)

主要特点:

(1)  随机存取

当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。相对的,读取或写入顺序访问存储设备中的信息时,其所需要的时间与位置就会有关系(如磁带)。 

(2)  易失性

  当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会。 

(3) 高访问速度

  现代的随机存取存储器几乎是所有访问设备中写入和读取速度最快的,取存延迟也和其他涉及机械运作的存储设备相比,也显得微不足道。 

(4) 对静电敏感

  正如其他精细的集成电路,随机存取存储器对环境的静电荷非常敏感。静电会干扰存储器内电容器的电荷,引致数据流失,甚至烧坏电路。故此触碰随机存取存储器前,应先用手触摸金属接地。

1.3SRAM (Static RAM静态RAM)

不要刷新,只要不掉电,数据可以一直保存,存取速度快,但结构复杂,价格昂贵,CPU的缓存用的就是SRAM。

RAM有两大类,一种称为SRAM,速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为DRAM,保留数据的时间很短,需要不断地刷新;速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。

1.4DRAM(Dynamic RAM动态RAM)

要不断刷新以保持数据,存取速度相对SRAM较慢。PC机的内存类型有SDRAM、DDR SDRAM和RDRAM三种。其中DDR SDRAM内存占据了市场的主流,而SDRAM内存规格已不再发展,处于被淘汰的行列。RDRAM则始终未成为市场的主流,只有部分芯片组支持,而这些芯片组也逐渐退出了市场,RDRAM前景并不被看好。

1.5SDRAM(Synchronous Dynamic Random Access Memory同步动态随机存储器)

同步是指工作时需要同步时钟,内部的命令的发送与数据的传输都以它为基准;

动态是指存储阵列需要不断的刷新来保证数据不丢失;

随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。

1.6DDR SDRAM(Double Data Rate SDRAM双倍速率同步动态随机存储器)

DDR内存是在SDRAM内存基础上发展而来的,仍然沿用SDRAM生产体系。SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输;DDR内存则是一个时钟周期内传输两次次数据,它能够在时钟的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。DDR内存可以在与SDRAM相同的总线频率下达到双倍的数据传输率。

1.7RDRAM

RDRAM(Rambus DRAM)是美国的RAMBUS公司开发的一种内存。与DDR和SDRAM不同,它采用了串行的数据传输模式。数据存储位宽是16位,远低于DDR和SDRAM的位。但在频率方面则远远高于二者,可以达到400MHz乃至更高。同样也是在一个时钟周期内传输两次次数据,能够在时钟的上升期和下降期各传输一次数据,内存带宽能达到1.6Gbyte/s。

     普通的DRAM行缓冲器的信息在写回存储器后便不再保留,而RDRAM则具有继续保持这一信息的特性,于是在进行存储器访问时,如行缓冲器中已经有目标数据,则可利用,因而实现了高速访问。另外其可把数据集中起来以分组的形式传送,所以只要最初用24个时钟,以后便可每1时钟读出1个字节。一次访问所能读出的数据长度可以达到256字节。

2SDRAM 内存模组

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

PC133 时代的 168pin SDRAM DIMM

2.1物理Bank

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

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

2.2 芯片位宽

已经讲到SDRAM 内存系统必须要组成一个 P-Bank 的位宽,才能使 CPU 正常工作,那么这个 P-Bank 位宽怎么得到呢?这就涉及到了内存芯片的结构。每个内存芯片也有自己的位宽,即每个传输周期能提供的数据P-Bank 的需要,但这对技术的要 求很高,在成本和实用性方面也都处于劣势。所以芯片的位宽一般都较小。台式机市场所用的 SDRAM 芯片位宽最高也就是 16bit,常见的则是 8bit。这样,为了组成 P-Bank 所需的位宽,就需要多颗芯片并联工作。对于 16bit 芯片,需要 4 颗(4×16bit=bit)。对于 8bit 芯片,则就需要 8 颗了。

以上就是芯片位宽、芯片数量与 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 的芯片集合。只是由于设计难度、制造成本、芯片组的配合等原因而没有这么做。

注意:面数≠P-Bank 数,只有在知道芯片位宽的情况下,才能确定 P-Bank的数量。

3 SDRAM内部结构

3.1逻辑 Bank

SDRAM 的内部结构简单地说就是一个存储阵列。因为如果是管道式存储(就如排队买票),就很难做到随机访问了。

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

L-Bank 存储阵列示意图

由于技术、成本等原因,不可能只做一个全容量的 L-Bank,而且最重要的是,由于 SDRAM 的工作原理,单一的 L-Bank 将会造成非常严重的寻址冲突, 大幅降低内存效率。所以人们在 SDRAM 内部分割成多个L-Bank,较早以前是2个,目前基本都是 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 有效。

3.2内存容量 

显然,内存芯片的容量就是所有 L-Bank 中的存储单元的容量总合。计算有多少个存储单元和计算表格中的单元数量的方法一样: 存储单元数量=行数×列数(得到一个 L-Bank 的存储单元数量)×L-Bank的数量。

在很多内存产品介绍文档中,都会用 M×W 的方式来表示芯片的容量,M 是该芯片中存储单元的总数,单位是兆,W 代表每个存储单元的容量,也就是 SDRAM 芯片的位宽,单位是 bit。计算出来的芯片容量也是以 bit为单位,但用户可以采用除以 8 的方法换算为字节(Byte)。比如 8M×8,这是 一个 8bit 位宽芯片,有 8M 个存储单元,总容量是 Mbit(8MB)。

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

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

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

3.3DIMM设计 

为什么在相同的总容量下,位宽会有多种不同的设计呢?

这主要是为了满足不同领域的需要。现在大家已经知道 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 模组设计中出现。

4引脚定义

内存芯片要想工作,必须要与内存控制器有所联系,同时对于一个电气元件,电源供应也是必不可少的,而且数据的传输要有一个时钟作为触发参考。因此,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示意图。

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

5基本操作与时序

SDRAM 的内部结构

128Mbit(32M×4)SDRAM 内部结构

5.1芯片初始化

在 SDRAM 芯片内部还有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时主芯片都要先对这个控制逻辑核心进行初始化。关键的阶段就在于模式寄存器(MR,Mode Register)的设置,简称 MRS(MR Set),这一工作在主芯片的控制下进行,寄存器的信息由地址线来提供,地址线提供不同的 0/1 信号来获得不同的参数, 在设置到 MR 之后,就开始了进入正常的工作状态。

SDRAM 模式寄存器所控制的操作参数

图中相关参数将结合下文具体讲述

5.2行选址

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

行有效时序图

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

5.3列选址与读写命令 

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

SDRAM 基本操作命令

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

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

读写操作示意图

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

tRCD=3 的时序图

5.4读操作

在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据 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。

CL=2 与 tAC 示意图

CL的数值不能超出芯片的设计规范,否则会导致内存的不稳定,甚至开不了机,而且它也不能在数据读取前临时更改。CL周期在开机初始化过程中的 MRS 阶段进行设置,在主芯片中可以对其进行调整,然后开机时通过 A4-A6 地址线对 MR 中 CL 寄存器的信息进行更改。

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

5.5写操作

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

数据写入的时序图

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

5.6突发长

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称BL)。

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

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

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

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

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

5.7预充电

由于 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 的单位也是时钟周期数,具体值视时钟频率而定。

读取时预充电时序图

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

误区:读写情况下都要考虑写回延迟

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

数据写入时预充电操作时序图

注意:其中tWR 参数,由于它的存在使预充电操作延后,从而造成写回延迟

5.8刷新

DRAM要不断进行刷新才能保留住数据,刷新是 DRAM 最重要的操作之一。刷新操作与预充电中重写的操作一样,都是用 S-AMP 先读再写。但为什么有预充电操作还要进行刷新呢?

因为预充电是对一个或所有 L-Bank 中的工作行操作,并且是不定期的;而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank 预充电不同的是, 这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。 那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是ms,也就是说每一行刷新的循环周期是 ms。这样刷新速度就是:行数量/ms。我们在看内存规格时,经常会看到4096 Refresh Cycles/ms 或 8192 Refresh Cycles/ms 的标识,这里的4096 与 8192 就代表这个芯片中每个 L-Bank 的行数。刷新命令一次对一行有效, 发送间隔也是随总行数而变化,4096 行时为 15.625μs(微秒,1/1000 毫秒),8192 行时就为 7.8125μs。

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

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

5.9数据掩码

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

读取时数据掩码操作,DQM 在两个周期后生效,突发周期的第二笔数据被取消

写入时数据掩码操作,DQM 立即生效,突发周期的第二笔数据被取消

有关内存内部的基本操作就到此结束,其实还有很多内存的操作没有描述, 但都不是很重要了,限于篇幅与必要性,我们不在此介绍。下面通过一个形象的例子来说明DDR的基本原理。

5.10形象的例子

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

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

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

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

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

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

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

(5) 当货物传送完后,原始货物还要送回储藏间保管,这是必须的,但如果没有要 求,货物可以一直保留在生产车间,如果再有需要就再生产,而不用再麻烦搬 运工了(读出放大器相当于一个 Cache)。调度人员接着会进行下一批货物的 调度,当他发现下一批货物在上次操作的子仓库中,但不在刚才通话的那一层, 只能再重新拨电话。这时,他通知各子仓库货物翻新运回,清理生产车间,之 后挂断电话(预充电命令),这一切必须要在指定时间里(tRP)完成,然后才 能给新的楼层打电话。搬运员接到通知后,就将这一层中所有房间的货物都拿 到生产车间进行翻新(没有货物的就不用翻新),然后再搬回储藏间。干完这 一切之后,搬运工挂了电话(关闭行)就可以休息了,他们称这种工作为“货物清理返运”(预充电)。这个工作的速度也要快,否则同样会影响集团名声。 当然,这个工作可以让搬运工自动完成(自动预充电),只需调度员在当初下 搬运指令时提醒一他:“货物运送完了,就进行货物清理返运吧,我不管了”(用 A10 地址线)。

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

6DDR SDRAM

DDR SDRAM 全称为 Double Data Rate SDRAM,中文名为“双倍数据流 SDRAM”。 DDR SDRAM 在原有的 SDRAM 的基础上改进而来。也正因为如此,DDR能够凭借着转产成本优势来打败昔日的对手 RDRAM,成为当今的主流。由于前文已详细地讲述了SDRAM原理和结构,下面简单介绍DDR 的原理和相对于SDRAM的不同。

DDR SDRAM 可在一个时钟周期内传送两次数据

6.1DDR 基本原理

首先我们看一张 DDR时序图

DDR SDRAM 读操作时序图

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

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-nPrefetch(n 代表芯片位宽)。

6.2DDR SDRAM 与 SDRAM 的不同

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

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

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

6.3差分时钟

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

与 CK 反相的 CK#保证了触发时机的准确性

6.4数据选取脉冲(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 的导入期。

实测DDR读操作波形

实测DDR写操作波形

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

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

6.5写入延迟

上面的 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 的上升沿发出。

当 CL=2.5 时,读后写的延迟将为 tDQSS+0.5 个时钟周期(图中 BL=2)另外,DDR 内存的数据真正写入由于要经过更多步骤的处理,所以写回时间(tWR)也明显延长,一般在 3 个时钟周期左右,而在 DDR-Ⅱ规范中更是将 tWR 列为模式寄存器的一项,可见它的重要性。

6.6突发长度与写入掩码

在 DDR SDRAM 中,突发长度只有 2、4、8 三种选择,没有了随机存取的操作(突发长度为 1)和全页式突发。这是为什么呢?因为 L-Bank 一次就存取两倍 于芯片位宽的数据,所以芯片至少也要进行两次传输才可以,否则内部多出来的数据怎么处理?而全页式突发事实证明在 PC 内存中是很难用得上的,所以被取消也不希奇。

但是,突发长度的定义也与 SDRAM 的不一样了(见本章节最前那幅 DDR 简示图),它不再指所连续寻址的存储单元数量,而是指连续的传输周期数,每次是一个芯片位宽的数据。对于突发写入,如果其中有不想存入的数据,仍可以运用 DM 信号进行屏蔽。DM 信号和数据信号同时发出,接收方在 DQS 的上升与下降沿来判断 DM 的状态,如果 DM 为高电平,那么之前从 DQS 中部选取的数据就被屏蔽 了。有人可能会觉得,DM 是输入信号,意味着芯片不能发出 DM 信号给主芯片作为屏蔽读取数据的参考。其实,该读哪个数据也是由主芯片决定的,所以内存芯片也无需参与主芯片的工作,哪个数据是有用的主芯片自己知道。

6.7延迟锁定回路(DLL)

DDR SDRAM 对时钟的精确性有着很高的要求,而 DDR SDRAM 有两个时钟,一个是外部的总线时钟,一个是内部的工作时钟,在理论上 DDR SDRAM 这两个时钟 应该是同步的,但由于种种原因,如温度、电压波动而产生延迟使两者很难同步, 更何况时钟频率本身也有不稳定的情况(SDRAM 也内部时钟,不过因为它的工作/传输频率较低,所以内外同步问题并不突出)。DDR SDRAM 的 tAC 就是因为内 部时钟与外部时钟有偏差而引起的,它很可能造成因数据不同步而产生错误的恶果。实际上,不同步就是一种正/负延迟,如果延迟不可避免,那么若是设定一 个延迟值,如一个时钟周期,那么内外时钟的上升与下降沿还是同步的。鉴于外 部时钟周期也不会绝对统一,所以需要根据外部时钟动态修正内部时钟的延迟来实现与外部时钟的同步,这就是 DLL 的任务。

DLL 不同于主板上的 PLL,它不涉及频率与电压转换,而是生成一个延迟量 给内部时钟。目前 DLL 有两种实现方法,一个是时钟频率测量法(CFM,Clock Frequency Measurement),一个是时钟比较法(CC,Clock Comparator)。CFM是测量外部时钟的频率周期,然后以此周期为延迟值控制内部时钟,这样内外时 钟正好就相差了一个时钟周期,从而实现同步。DLL 就这样反复测量反复控制延迟值,使内部时钟与外部时钟保持同步。CC 的方法则是比较内外部时钟的长短,如果内部时钟周期短了,就将所少 的延迟加到下一个内部时钟周期里,然后再与外部时钟做比较,若是内部时钟周期长了,就将多出的延迟从下一个内部时钟中刨除,如此往复,最终使内外时钟同步。

CFM 式 DLL 工作示意图

CC 式 DLL 工作示意图

CFM 与 CC 各有优缺点,CFM 的校正速度快,仅用两个时钟周期,但容易受到 噪音干扰,并且如果测量失误,则内部的延迟就永远错下去了。CC 的优点则是 更稳定可靠,如果比较失败,延迟受影响的只是一个数据(而且不会太严重), 不会涉及到后面的延迟修正,但它的修正时间要比 CFM 长。D LL 功能在 DDR SDRAM 中可以被禁止,但仅限于除错与评估操作,正常工作状态是自动有效的。下载本文

显示全文
专题