十一章 :访问协议
本章将继续讨论DRAM内存系统的基本访问协议。DRAM内存访问协议定义了DRAM内存控制器用于管理数据在自身和DRAM设备之间传输的命令和时序约束。本章中描述的基本DRAM内存访问协议具有通用性质,可以广泛应用于现代内存系统,如SDRAM、DDR SDRAM、DDR2 SDRAM和DDR3 SDRAM内存系统。对通用DRAM内存访问协议的讨论始于基本DRAM命令和在执行这些基本DRAM命令时在DRAM设备中发生的事件序列。
不同的DRAM内存系统,特别是高性能和低功耗导向的DRAM内存系统,具有略有不同的访问协议。专用或高性能的DRAM内存系统,如Direct RDRAM、GDDRx和FCRAM,具有略有不同的DRAM命令集和不同的命令时序和交互方式,与本章描述的协议略有不同。然而,在所有DRAM内存系统中,基本的命令交互方式都基本相似,理解基本的DRAM内存访问协议有助于理解更复杂的专用DRAM内存系统中的内存访问协议。
11.1 Basic DRAM Commands
在本章中,图11.1所示的SDRAM设备被用作定义基本内存访问协议的通用DRAM设备。本章中描述的通用DRAM内存访问协议基于资源使用模型。也就是说,通用DRAM内存访问协议假设只要两个不同的命令在给定的DRAM设备上不需要在同一时间使用共享资源,它们就可以完全流水线化。
图11.1说明,在现代DRAM设备中移动数据时,给定的命令将通过不同的操作阶段以促进数据的移动,在每个阶段,给定的命令将需要使用某些资源,通常无法与不同的命令共享。
图11.1示意了一个抽象DRAM命令的四个重叠操作阶段。在第1阶段,该命令通过地址和命令总线传输并由DRAM设备解码。在第2阶段,数据在存储区内移动,从存储单元到感应放大器,或者从感应放大器返回到DRAM阵列。在第3阶段,数据通过共享的I/O控制电路移动,然后通过读取锁存器或写入驱动器,根据具体情况而定。在第4阶段,对于列读取命令,DRAM设备将读取数据放入数据总线中,而对于列写入命令,则由内存控制器执行。由于数据总线可能连接到多个内存等级,因此不同内存等级的两个命令不能在同一时间点同时使用共享数据总线。
DRAM访问协议还定义了连续DRAM命令组合之间的时间约束。在本章中,DRAM内存访问协议的描述从检查单个DRAM命令开始,并随后检查DRAM命令的组合。然后,在第11.3.2节和第11.3.3节中,详细描述了基于功耗限制的约束的影响,例如行间激活延迟和四个银行激活窗口。
11.1.1 Generic DRAM Command Format 命令格式
Figure 11.2中描述了通用DRAM命令的执行过程。在图11.2中,展示了将命令从DRAM控制器传输到DRAM设备所需的时间段,并标记为tCMD。
图11.2还展示了tparameter1,这是一个通用的时间参数,用于衡量“阶段2”的持续时间。在图11.2中,tparameter1定义了所描述的命令在所选存储区使用的时间量,
而tparameter2定义了所描述的命令在多个DRAM阵列存储区共享资源的时间量。通过这种方式,tparameter1还表示两个命令的调度之间必须经过的最短时间,这两个命令的相对时间由在给定DRAM阵列存储区内共享资源所限制;tparameter2也表示两个命令的开始之间必须经过的最短时间,这两个命令的相对时间由在同一个DRAM设备中多个DRAM阵列存储区之间共享资源所限制。
DRAM命令在本章中被抽象地定义,这种抽象将每个命令的操作与特定DRAM访问协议中的操作时间特性分开。也就是说,这种抽象使得相同的DRAM命令交互可以应用于具有不同时间参数的不同DRAM内存系统。通过摒弃特定于协议的时间特性,DRAM命令可以以抽象的方式描述。而通用的DRAM内存访问协议则为DRAM内存系统的抽象性能分析提供了基础,这种分析可以广泛应用于不同的内存系统,并在跨系统比较中保持相关性。
11.1.3 Row Access Command
图11.3抽象地展示了行访问命令的进展。行访问命令也称为行激活命令。行访问命令的目的是将数据从DRAM阵列中的单元移动到感应放大器,然后将数据作为同一命令的一部分恢复到DRAM阵列中的单元中。
与行访问命令相关联的有两个时序参数:tRCD和tRAS。
行访问命令从DRAM单元阵列中移动数据到感应放大器所需的时间称为行列(命令)延迟,tRCD。从行访问命令的发出到tRCD时间后,已激活的数据整行保持在感应放大器中,随后的列读取或列写入命令可以通过数据总线在感应放大器和内存控制器之间移动数据。
从行访问命令的发出到tRCD时间后,数据可在感应放大器中使用,但尚未完全恢复到DRAM单元中。
行访问命令从DRAM单元的一行中释放和恢复数据所需的时间称为行访问控制延迟或tRAS。
从行访问命令的发出到tRAS时间后,假定感应放大器已完成数据恢复到DRAM阵列,并且可以对另一行的行访问进行预充电,该行位于同一DRAM阵列中的不同行。
理解:
tRCD :"行到列命令延迟"指的是从行访问到感应放大器准备好数据之间的时间间隔。
tRAS :指行访问命令和 DRAM 数组中数据恢复之间的时间间隔。在前一个 bank 激活之后,至少需要 tRAS 时间才能对 DRAM bank 进行预充电。
11.1.4 Column-Read Command
图11.4说明了列读取命令的执行过程。列读取命令将数据从给定DRAM阵列银行的感应放大器阵列通过数据总线传回内存控制器。
与列读取命令相关的三个基本时序参数分别是tCAS、tCCD和tBURST。
列访问控制延迟(tCAS或tCL)是DRAM设备在发出列读取命令后将请求的数据放置到数据总线上所需的时间。现代DRAM设备内部以短且连续的突发模式移动数据。图11.4说明了DRAM设备在内部以两个短的突发时间段移动数据的情况,但数据在数据总线上以较长的连续突发模式放置。
DRAM设备的内部突发长度在图11.4中标记为tCCD,
对于单个列读取命令的数据总线上的突发持续时间标记为tBURST。
时序参数tCCD代表最小突发持续时间的时序,或最小列到列命令时序。最小突发持续时间由DRAM设备的预取长度确定。例如,DDR SDRAM设备的预取长度为2个数据节拍,因此在DDR SDRAM设备中,tCCD为一个完整的时钟周期;DDR2 SDRAM设备的预取长度为4个数据节拍,因此在DDR2 SDRAM设备中,tCCD为两个完整的时钟周期;依此类推。
列访问命令的预取长度差异对通用内存访问协议的影响有限,只要tCCD短于tBURST。
在tCCD长于tBURST的情况下,内部银行列访问命令受tCCD的限制而不是tBURST。否则,只有在列读取命令紧接着立即执行预充电命令的情况下,预取长度差异会影响内存访问协议。读取到预充电的时序将在第11.2.2节中单独讨论。
理解:
tCAS :指列访问命令和 DRAM 设备开始返回数据之间的时间间隔。也称为 tCL。
tBURST :指数据突发在数据总线上占据的时间段。通常是4或8个数据节拍。在DDR SDRAM中,4个数据节拍占据2个完整的时钟周期。tCCD时间等于或者小于tBURST。tBURST相当于BL/2的时间长度。
tCCD :"列到列延迟"是指最小的列命令时序,由内部突发(预取)长度确定。多个内部突发用于形成更长的列读取突发。对于DDR SDRAM,tCCD为2个节拍(1个周期),对于DDR2 SDRAM,tCCD为4个节拍(2个周期)。表示一次预取的数据长度。
(1)比如LPDDR4是16n,即一次预取16个数据;所以当LPDDR4为BL32时,即tBURST=32,tCCD=16。此时两者不相等
(2)tCCD也不是不变的。比如DDR4;当引入BANK GROUP时,tCCD就会分为两种,一种是不同BG之间读操作之间的延迟,此时延迟短,我们称为tCCD_S;另外一种的相同BG不同BANK之间的,此时延迟长,我们称为tCCD_L。两个时间长度不同,原因简单:因为当引入BG后,会存在两个缓存;数据先缓存到BG的缓存,然后再缓存到IO缓存。当不同BG的话,存到BG的缓存可以并行进行,只需要IO缓存上的时间即可;但相同BG的话,就需要等上一笔的数据从BG缓存到IO后才能BG缓存下一笔。
11.1.5 Column-Write Command
图11.5展示了列写命令的执行过程。列写命令将数据从内存控制器移动到目标银行的放大器。列写命令经历了与列读命令类似的一组重叠阶段,但列读命令和列写命令之间的数据移动方向不同。因此,列读命令和列写命令之间的阶段顺序是相反的。
与列写命令相关的一个时序参数是tCWD,列写延迟。列写延迟规定了在命令总线上发出列写命令和内存控制器将写数据放置到数据总线之间的时序。不同的内存访问协议对于tCWD有不同的设置。
图11.5显示,在SDRAM设备中,写数据与列写命令同时放置在数据总线上,tCWD为零。在DDR SDRAM设备中,tCWD被规定为内存系统中的一个时钟周期。在DDR2 SDRAM内存访问协议中,tCWD被规定为小于tCAS的一个时钟周期,并且在DDR3 SDRAM内存访问协议中,tCWD具有可编程范围,范围在五到八个时钟周期之间。
最后,图11.5还说明了tWR,写恢复时间,和tWTR,写到读切换时间。
写恢复时间tWR是写数据传播到DRAM阵列所需的时间,在跟随写命令的预充电命令的情况下必须予以尊重。
写到读时间tWTR考虑了写命令释放的I/O门控资源所需的时间,在写命令后跟随读命令的情况下必须予以尊重。
理解:
tCWD :列写命令发出和DRAM控制器在数据总线上放置数据之间的时间间隔。tCAS-tCMD;一般不单独设置,因为其他参数能表示。
tWR:写数据放到DRAM的基本单元的时间。
tWTR:写命令到读命令的时间。对于同一行,写到读不需要进行precharge;但是写到读,IO口方向的转换需要时间。
11.1.6 Precharge Command
在典型的DRAM设备中,数据访问由两个步骤组成。首先,行访问命令将数据从DRAM单元阵列移动到感应放大器阵列。然后,在整个数据行被行访问命令移入感应放大器后,该数据被感应放大器缓存,以便后续的列访问命令将数据在DRAM设备和DRAM控制器之间进行移动。
预充电命令完成了行访问序列,因为它重置了所选DRAM单元阵列的感应放大器和位线,并为另一个行访问命令准备了它们。图11.6说明了预充电命令的进程。与(行)预充电命令相关的时间参数是tRP。也就是说,在发出预充电命令后的tRP时间内,所选DRAM单元阵列的位线和感应放大器将被正确预充电,并且随后的行访问命令可以发送到刚刚预充电的DRAM单元阵列。
两个与行访问相关的时间参数,tRP和tRAS,可以组合成tRC,即行周期时间。给定DRAM设备的行周期时间表示DRAM设备需要从DRAM单元阵列中提取数据并将数据恢复到DRAM单元,然后将位线预充电至参考电压水平以准备进行另一个行访问命令的最短时间。行周期时间是从同一DRAM存储单元的不同行中检索数据的速度的基本限制。因此,tRC通常也称为DRAM设备的随机行周期时间。
理解:tRP :precharge的时间;因为读写操作完后,需要将bitline恢复到初始电压,即Vcc/2。
tRC:对一行操作最短的时间,即tRAS+tRP
11.1.7 Refresh Command
"DRAM"是Dynamic Random-Access Memory的首字母缩写。DRAM单元中非持久性电荷存储的特性意味着存储电容器中存储的电荷将逐渐通过访问晶体管泄漏出来。因此,为了保持数据完整性,存储在DRAM单元中的数据值必须定期读取并恢复到它们各自的完整电压级别,以防存储的电荷衰减到无法区分的水平。
刷新命令完成了DRAM设备中的数据读取和恢复任务,只要对DRAM数组的给定行进行的刷新命令之间的时间间隔短于最坏情况下的数据衰减时间,就可以使用DRAM刷新命令来确保数据完整性。刷新机制的缺点是刷新操作会消耗可用带宽和功率。因此,不同的系统使用不同的刷新机制;有些旨在最小化控制器复杂性,有些旨在最小化带宽影响,而另一些旨在最小化功耗。
为了简化与刷新命令相关的控制复杂性,大多数DRAM设备使用刷新行地址寄存器来跟踪上次刷新行的地址。通常,内存控制器向DRAM设备发送一个单独的刷新命令,DRAM设备会递增刷新行地址寄存器中的地址,并对DRAM设备中所有银行中具有该行地址的所有行执行行周期。图11.7示例了一个基本的全银行并发刷新命令,现代DRAM内存控制器使用它来发送一个单一的刷新命令以刷新所有银行中的DRAM单元中的一行数据。当发出这个全银行并发的基本刷新命令时,DRAM设备从刷新地址寄存器中取得行地址,然后将相同的行地址发送到所有要同时刷新的银行。如图11.7所示,向所有银行发送的单个刷新命令需要一个刷新周期时间tRFC才能完成。
理解:refresh的时候,是所有bank的同一行,同时 刷新。刷新操作很简单,就是把wordline打开,电容的数据传到bitline上,让bitline上的电压经过差分放大器放大到高电压或者是0V;然后bitline就会反向给电容充电;从而实现refresh操作。
表11.2显示了DDR和DDR2 SDRAM设备刷新周期时间的一般趋势。随着DRAM设备密度的增加,需要刷新的DRAM单元数量也在增加。DRAM制造商显然在更大的DDR2设备上的选择是,尽管在连续几代更高容量的DRAM设备中行数翻倍,但每64毫秒周期内发送的刷新命令数量保持不变。因此,无论系统中DRAM设备的容量如何,内存控制器都会在每64毫秒向DRAM设备发送8192个刷新命令。然而,在高容量的DRAM设备中,行数超过8192行,每个刷新命令必须刷新这些DRAM设备中的2、4或8行。以4-Gbit DDR2 SDRAM设备为例,行数是刷新命令数量的八倍。因此,给定的4-Gbit DDR2 SDRAM设备将在每个刷新命令中循环并刷新8行,这一系列事件需要很长时间才能完成。表11.2显示,4-Gbit DDR2 SDRAM设备中的每个刷新命令需要327.5纳秒才能完成。
DRAM设备设计工程师和DRAM内存系统设计工程师正在积极探索替代的逐行并发刷新命令。一些先进的内存系统设计成这样,控制器手动向各个bank注入行周期读取。逐个bank的刷新方案可以减小刷新命令对带宽的影响,但会增加内存控制器的复杂性。
理解:(1)对于所有的DDR,都需要64ms中对颗粒的每一行进行一次refresh。
(2)刷新所有bank的一行的时间跟tRC的时间差不多。
(2)因为最一开始的时候,DDR都是8192行;所以需要在64ms中执行8192次refresh。
(3)DDR颗粒容量越来越大,所以行数超过了8192行;所以一次刷新多行,但时间也相应的增加。
11.1.8 A Read Cycle
图11.8展示了在通用DRAM内存系统中(如SDRAM和DDRx SDRAM内存系统)的读取周期。在典型的现代DRAM设备中,每个行访问命令将数千位数据传送到给定存储区的放大器阵列。随后的列读取命令通过数据总线将其中的数十或数百位数据传送到内存控制器。对于通过内存流式传输数据的应用程序,保持给定行的数千位数据在放大器阵列中处于活动状态,可以确保从同一行进行的后续内存读取不会产生额外的行访问延迟或能耗成本。
相比之下,不太可能在相邻位置访问数据的应用程序更倾向于在每次行访问后立即对DRAM数组进行预充电,以准备好DRAM存储区进行对同一存储区内不同行的后续访问。
图11.8示例了以快速连续方式发出的一系列命令,以访问一个DRAM单元的存储区。数据通过行访问命令从DRAM单元传入放大器阵列。经过tRCD时间后,请求的行的数据被放大器解析,并且内存控制器随后可以向DRAM设备发出列读取或列写入命令。与发出列访问命令同时,内存设备会主动从放大器阵列中恢复数据到DRAM单元中。然后,在从初始发出行访问命令的时间经过tRAS后,DRAM单元已准备好接受一个预充电命令,以重置位线和放大器阵列。
总的来说,立即对一个存储区进行预充电以准备好它进行对同一存储区内不同行的后续访问的内存系统称为密页内存系统。保持行在放大器阵列中保持活动状态的内存系统称为开页内存系统。