1.precharge:
由于SDRAM的寻址具体独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。实际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。
2.refresh:
刷新操作与预充电中重写的操作一样。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有L-Bank预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不是一定是相同的。
需要注意的是,在刷新操作之前需要将所有bank全部关闭,也就是在刷新之前需要发一个precharge同时将A10拉高,此时的precharge操作是进行将所有bank关闭的操作;tRFC表示执行刷新操作需要的时间;
需要保证至少9个tREFI时间窗口内至少进行两次刷新操作,这个窗口是滚动的,这样操作的目的在于避免别的命令和刷新操作发生冲突;在后续的时间内,如果有空余时间的话,可以进行多次刷新;
前面集中区域进行了大量的刷新,在后续可以相对稀疏的进行刷新操作,此外需要注意两个刷新间隔之内(tREFI)操作之间最多只能进行16次操作;
3. self refresh
(1)DDR中的一种低功耗模式,它和正常刷新操作之间的区别仅仅是在CKE上,也就是当命令是刷新操作同时CKE为低的时候表示的是self refresh操作,此时颗粒内部的DLL会被关闭,外部输入的时钟也不再需要了,此时外部管脚上仅仅CKE(为低)和RESET(为高)是有用的;(2)自刷新模式下一方面可以保证数据不丢失,另一方面自身功耗也会降低;(3)进入自刷新模式之前也是同样需要将所有bank都关闭才能进入自刷新模式;
需要注意进入自刷新模式的时候ODT一定要被关闭,也就是为低;发起自刷新操作之后需要等待tCKSRE时间之后就可以把时钟关闭;在退出自刷新模式的时候也是需要提前tCKSRX时间将时钟拉起来,在Tc1时刻的时候进行SRX操作退出自刷新模式;在发出退出刷新操作之后经过tXS时间后就可以发起和DLL无关的操作,比如寄存器的配置,而经过txsDLL时间后才可以发起和DLL相关的命令,比如读、写、active等操作
4.row active:
在实际工作中,Bank地址与相应的行地址是同时发出的,此时这个命令称之为“行激活”(Row Active)。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址。根据相关的标准,从行有效到读/写命令发出之间的间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲),我们可以理解为行选通周期。tRCD是DDR的一个重要时序参数,广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=3,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,DDR3-800,tRCD=3,代表30ns的延迟。
关于active的一些时序理解
(1)tRRD:不同bank之间active操作之间的最少时间;
(2)tFAW:针对5个bank进行active的最少时间
(3)tRAS:针对一个bank进行active之后又进行precharge的最少时间;
(4)tRC:针对同一个bank进行两个active操作的时间间隔,需要注意的是tRC也可以表示针对同一个bank先进行active在进行refresh的时间差;
(5)tRP:针对bank进行precharge需要的时间
5. powder down:
使memory进入低功耗模式,和self refresh区别在于powder down存在时间限制,最长9*tREFI时间电荷不丢;在powder down模式下CKE为低,RESET为高,时钟是不能停止的;退出powder 模式有两种情况,一种是dll使能的情况,此时可以快速的退出powder down;另一种是dll关闭的情况,此时需要将dll使能后才可以退出,退出时间相对来说长一些。
分为两种powder down,一种是active powder down(bank打开的时候powder down),另一种是precharge powder down(bank关闭的时候powder down)
(1)T1时刻 nop操作且CKE拉低,进入power-down模式,实际上还需要再次经过tCPDED时间后在发出一个nop操作以后才算真正进入power-down模式;
(2)进入power-down模式后需要经过最少时间tPD才可以退出power-down模式;
(3)进入powder-down模式后需要经过tXP时间后才可以发送一个有效的命令;
(4)Ta1时刻退出power-down模式,CKE拉高时间至少为tCKE时间(CKE脉冲为高的时间);
T0时刻发起写操作,Tb1时刻进入power-down模式,中间需要有最少时间差tWRAPDEN
快速模式下DLL是打开的,退出power-down模式仅仅需要tXP时间就可以退出。
而慢速模式下DLL是关闭的,在等待tXP时间后,在Tc0时间后可以发起一个对寄存器MRS配置的操作使得DLL打开,等到Td0时刻才可以正常发起有效命令。
协议推荐在进入power-down之间和退出power-down之后都发起一次refresh操作,T1时刻会发起一次刷新操作;
T1时刻发起active操作,至少经过tACTPDEN时间后才可以将CKE拉低进入power-down模式,同时进入power-down模式至少需要等tPD时间后才可以退出该模式;
6.读操作的一些时序参数:
读操作有两种,一种是正操操作的读,另一种是带auto-precharge的读操作(对这个颗粒进行操作后会自动对这一行进行precharge操作)
A0-A9+A11表示列地址,A10表示是否进行auto-precharge
(1)nRCD:针对这个bank进行active操作后需要隔多少个周期后才能对这个bank进行读操作;
(2)CL(CAS read latency):从读操作发起开始需要多少个周期后才能出现数据(在上面的例子中由于AL为0,因此实际等待的周期就是CL,也就是RL就等于CL,实际上读操作后需要延迟RL个周期才会得到读数据)
(3)AL(累计的额外延迟): 这个参数后面详细解释
(4)RL:总的latency,AL+CL;
当AL为CL-1的时候,也就是AL为7,此时正常情况下针对bank0进行active后需要等八个周期才能进行发起读操作,但是如果AL为7此时可以在active操作后的下一个周期就执行active操作,虽然是在active的下一个周期执行读操作,但是实际任然等RL周期后才能得到读数据。
当AL为CL-1的时候,也就是AL为7,此时正常情况下针对bank0进行active后需要等八个周期才能进行发起读操作,但是如果AL为7此时可以在active操作后的下一个周期就执行active操作,虽然是在active的下一个周期执行读操作,但是实际任然等RL周期后才能得到读数据。
这种操作只是让读命令提前发出而已,但是实际起作用的时间是和之前操作相同的。
AL为的0的情况下原本在t8时刻的时候已经满足了nRRD为4的条件,也就是t8时刻实际上是可以进行active操作的,但是由于此时第一个active操作的nRCD时间已经到了,可以进行读操作,因此第三个active操作置后了,这会导致读出来的数据有气泡,效率降低,如果在t8时刻不仅读操作而是进行第三次active操作,理论上也是可行的,但是这种操作会增加读数据的latency,效率也会降低。
通过设置AL的方式使得读数据没有气泡增加了效率,也就是active操作后,就可以发送read操作,而实际起作用任然是t8时刻起作用。
read操作之后需要至少隔tRTP才能将这个bank关闭(这里的read操作是针对bank a row a),此时既可以关闭bank a也可以把所有的bank都关闭,precharge操作之后需要等待tRP时间后才可以对这个相同bank的不同row进行操作;
有两种模式可以选择,第一种是BL4,第二种是BL8;
tCCD表示两个read操作之间至少需要多少个周期,这里是四个周期
对于BC4 to BC4来说,用的时间是和BC8 to BC8的时间相同的,并且虽然在两个数据之间DQS属于高阻态,但是其效率并没有提升
(1)从读到写的延迟为:RL+tCCD+2clk cycle+WL(write latency);
(2)数据总线上从读数据到写数据至少需要两个clk cycle,这两个周期是用来进行读写转换的
(1)从读到写的延迟为:RL+tCCD/2+2clk cycle+WL(write latency);
(2)OTF模式(既可以4个数据也可以8个数据)相较于前面的read(BL8)to write(BL8)少了两个周期的气泡,效率有所提升;
7. 写操作
类似于读操作,不同的地方是写操作除了DQ以外还会多一个DM信号,用于数据掩盖;同样存在auto precharge操作的写;
对于写操作的时候,active操作的时候地址线上驱动的是行地址,而对于写操作的时候地址线上驱动的是列地址,bank地址一直是公用的;时钟和数据是有一个90°的相位关系以使得颗粒能够正确的采样到数据
两个写操作之间至少需要隔tCCD个时间周期
写操作的数据和时钟是成90°相位关系的,并且写操作在T7时刻才会真正的执行结束,写操作结束后需要经过tWTR时间后才可以进行读操作;注意这里的操作一定是对不同bank,如果是对相同bank的不同行进行线写后读,那么一定在写完之后需要进行precharge操作,在这里只有两种情况,一种是写和读操作都是针对相同的bank相同行,另一种是写和读操作都是针对不同bank的内容进行操作的;
写操作之后需要经过tWR(write recover)时间才能进行下一个操作,实际上这个参数的意义在于写操作的时候实际上T7时刻并没有真正将数据写到颗粒内部,需要在经过一段时间才能真正将数据写入颗粒,经过tWR时间后才可以进行precharge操作;
OTF模式下由于既可以4笔数据也可以8笔数据,因此,因此数据虽然在T7时刻就已经写好了但是任然要等到T9时刻,这是为了考虑OTF模式下也可能是8笔数据;在到T9时刻之后再经历一个tWR之后可以进行precharge操作;
类似于前面的操作,由于OTF模式任然需要多等两个周期;
和上一个OTF模式下消耗的周期是相同的,但是传输的效率有所提升;
读写转换之间需要隔tWTR个时间才可以进行,也就是写操作之后在T13时间的时候才可以进行读;这两个操作要么不同bank要么相同bank相同行
8.Power-up Initialization
(1)Ta时间之前表示的是上电过程,也就是电压稳定的过程
(2)Ta~Tb时间表示复位时间,颗粒复位所需的时间
(3)CKE拉低到时钟复位拉高之间的时间,需要间隔10ns,也就是CKE需要稳定10ns只会,reset才能被拉高
(4)差分时钟在复位信号拉高之后就可以进行操作,但是需要至少tCKSRK的稳定时间,在CKE信号拉高的情况下差分信号正式开始工作,RESET拉高到CKE拉高这个过程至少需要经过500us的时间延迟(这个500us的时间往往包含tCKSRK时间)
(5)tXPR时间表示的是CKE信号拉高到第一个有效的命令(或者非空的命令)之间所需要的时间
(6)MRS表示的是寄存器模式设置的操作
(7)tZQinit至少需要512clk cyc
(8)DLL功能使能和复位
9.Reset Initialization
复位初始化可以从任何状态进行该操作,该操作不会复位颗粒中的内容,只会复位寄存器。