1. 芯片初始化
可能很多人都想象不到,在 SDRAM 芯片内部还有一个逻辑控制单元,并且有一个模式寄存器为 其提供控制参数。因此,每次开机时 SDRAM 都要先对这个控制逻辑核心进行初始化。有关预充电和刷 新的含义在下文有讲述,关键的阶段就在于模式寄存器(MR,ModeRegister)的设置,简称 MRS(MR Set), 这一工作由北桥芯片在 BIOS 的控制下进行,寄存器的信息由地址线来提供。
SDRAM 模式寄存器所控制的操作参数:地址线提供不同的 0/1 信号来获得不同的参数。在设置到 MR 之后,就开始了进入正常的工作状态;
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 有效。
3.列读写
行地址确定之后,就要对列地址进行寻址了。但是,地址线仍然是行地址所用的 A0-A11(本例)。 没错,在 SDRAM 中,行地址与列地址线是共用的。不过,读/写的命令是怎么发出的呢?其实没有一 个信号是发送读或写的明确命令的,而是通过芯片的可写状态的控制来达到读/写的目的。显然 WE#信 号就是一个关键。WE#无效时,当然就是读取命令。
上图是 SDRAM 基本操作命令, 通过各种控制/地址信号的组合来完成(H 代表高电平,L 代表低 电平,X 表示高低电平均没有影响)。此表中,除了自刷新命令外,所有命令都是默认 CKE 有效。对 于自刷新命令,下文有详解。 列寻址信号与读写命令是同时发出的。虽然地址线与行寻址共用,但 CAS(Column Address Strobe, 列地址选通脉冲)信号则可以区分开行与列寻址的不同,配合 A0-A9,A11(本例)来确定具体的列地 址。
然而,在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为 tRCD,即 RAS to CAS Delay(RAS 至 CAS 延迟),大家也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件 响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。 tRCD 是 SDRAM 的一个重要时序参数,可以通过主板 BIOS 经过北桥芯片进行调整,但不能超过厂 商的预定范围。广义的 tRCD 以时钟周期(tCK,Clock Time)数为单位,比如 tRCD=2,就代表延迟周 期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于 PC100 SDRAM,tRCD=2,代表 20ns 的延迟,对于 PC133 则为 15ns。
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 的数值不能超出芯片的设计规范,否则会导致内存的不稳定,甚至开不了机(超频的玩家应 该有体会),而且它也不能在数据读取前临时更改。CL 周期在开机初始化过程中的 MRS 阶段进行设置, 在 BIOS 中一般都允许用户对其调整,然后 BIOS 控制北桥芯片在开机时通过 A4-A6 地址线对 MR 中 CL 寄存器的信息进行更改。 不过,从存储体的结构图上可以看出,原本逻辑状态为 1 的电容在读取操作后,会因放电而变 为逻辑 0。所以,以前的 DRAM 为了在关闭当前行时保证数据的可靠性,要对存储体中原有的信息进行 重写,这个任务由数据所经过的刷新放大器来完成,它根据逻辑电平状态,将数据进行重写(逻辑 0 时 就不重写),由于这个操作与数据的输出是同步进行互不冲突,所以不会产生新的重写延迟。 后来通过技术的改良,刷新放大器被取消,其功能由 S-AMP 取代,因为在读取时它会保持数据的 逻辑状态,起到了一个 Cache 的作用,再次读取时由它直接发送即可,不用再进行新的寻址输出,此 时数据重写操作则可在预充电阶段完成。
问题:为什么读取后,高电平不会消失? 上面这段话为答案;
5.数据写入
数据写入的操作也是在 tRCD 之后进行,但此时没有了 CL(记住,CL 只出现在读取操作中),行 寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。
从图中可见,由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入 寄存器中,然后再由写入驱动器进行对存储电容的充电操作,因此数据可以与 CAS 同时发送,也就是 说写入延迟为 0。 不过,数据并不是即时地写入存储电容,因为选通三极管(就如读取时一样)与电容的充电必须 要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写 入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR 至少占用一 个时钟周期或再多一点(时钟频率越高,tWR 占用周期越多),有关它的影响将在以后进一步讲述。
6. 突发模式
突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称 BL)。 在目前,由于内存控制器一次读/写 P-Bank 位宽的数据,也就是 8 个字节,但是在现实中小于 8 个字节的数据很少见,所以一般都要经过多个周期进行数据的传输。 上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读/写命令(行地址不变,所以不用再对行 寻址)。虽然由于读/写延迟相同可以让数据的传输在 I/O 端是连续的,但它占用了大量的内存控制资 源,在数据进行连续传输时无法输入新的命令,效率很低(早期的 FPE/EDO 内存就是以这种方式进行 连续的数据传输)。 为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面 相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传 输需要若干个周期(主要是之前的延迟,一般的是 tRCD+CL)外,其后每个数据只需一个周期的即可 获得。在很多北桥芯片的介绍中都有类似于 X-1-1-1 的字样,就是指这个意思,其中的 X 代表就代表 第一笔数据所用的周期数。
非突发连续读取模式:不采用突发传输而是依次单独寻址,此时可等效于 BL=1。虽然可以让数 据是连续的传输,但每次都要发送列地址与命令信息,控制资源占用极大。
突发连续读取模式:只要指定起始列地址与突发长度,寻址与数据的读取自动进行,而只要控制 好两段突发读取命令的间隔周期(与 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。 另外,在 MRS 阶段除了要设定 BL 数值之外,还要具体确定读/写操作的模式以及突发传输的模 式。突发读/突发写,表示读与写操作都是突发传输的,每次读/ 写操作持续 BL 所设定的长度,这也 是常规的设定。突发读/单一写,表示读操作是突发传输,写操作则只是一个个单独进行。 突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序。顺序传输是指从起始单元开始 顺序读取。假如 BL=4,起始单元编号是 n,顺序就是 n、n+1、n+2、n+3。交错传输就是打乱正常的顺 序进行数据传输(比如第一个进行传输的单元是 n,而第二个进行传输的单元是 n+2 而不是 n+1),至 于交错的规则在 SDRAM 规范中有详细的定义表,但在这此出于必要性与篇幅的考虑就不列出了。
7. 预充电
由于 SDRAM 的寻址具体独占性,所以在进行完读写操作后,如果要对同一 L-Bank 的另一行进行 寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。L-Bank 关闭现有工作行,准备打开 新行的操作就是预充电(Precharge)。 预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。实 际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,同时释放 S-AMP(重 新加入比较电压,一般是电容电压的 1/2,以帮助判断读取数据的逻辑电平,因为 S-AMP 是通过一个 参考电压与存储体位线电压的比较来判断逻辑值的),以准备新行的工作。 具体而言,就是将 SAMP 中的数据回写,即使是没有工作过的存储体也会因行选通而使存储电容 受到干扰,所以也需要 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 的单位也 是时钟周期数,具体值视时钟频率而定。
自动预充电时的开始时间与此图一样,只是没有了单独的预充电命令,并在发出读取命令时,A10 地址线要设为高电平(允许自动预充电)。可见控制好预充电启动时间很重要,它可以在读取操作结束 后立刻进入新行的寻址,保证运行效率。 误区:读写情况下都要考虑写回延迟有些文章强调由于写回操作而使读/写操作后都有一定的延 迟,但从本文的介绍中写可以看出,即使是读后立即重写的设计,由于是与数据输出同步进行,并不 存在延迟。只有在写操作后进行其他的操作时,才会有这方面的影响。写操作虽然是 0 延迟进行,但 每笔数据的真正写入则需要一个足够的周期来保证,这段时间就是写回周期(tWR)。所以预充电不能 与写操作同时进行,必须要在 tWR 之后才能发出预充电命令,以确保数据的可靠写入,否则重写的数 据可能是错的,这就造成了写回延迟。
上图为数据写入时预充电操作时序图:注意其中的 tWR 参数,由于它的存在,使预充电操作延 后,从而造成写回延迟.
8. 刷新
之所以称为 DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最 重要的操作。刷新操作与预充电中重写的操作一样,都是用 S-AMP 先读再写。 但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有 L-Bank 中的工作行操作, 并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的 存储体中的数据。但与所有 L-Bank 预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而 预充电中各 L-Bank 中的工作行地址并不是一定是相同的。 那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是 64ms(毫秒,1/1000 秒),也就是说每一行刷新的循环周期是 64ms。这样刷新速度就是:行数量/64ms。 我们在看内存规格时,经常会看到 4096 Refresh Cycles/64ms 或 8192 RefreshCycles/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 有效才能退出自刷新模式并进入正常操作状态。
9. 数据掩码
在讲述读/写操作时,我们谈到了突发长度。如果 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 与写入命令一样是立即成效。