DDR3 CMD
从Micron 1Gbit DDR3 datasheet中摘录
ACT命令用来为后续操作打开(激活)一个特定bank中的一个row。BA[2:0]上的数据选择bank,A[n:0]选择row。这个row一直处于打开(激活)状态,
直到一个PRE命令指向到了这一个bank。
在同一个bank中打开不同的row之前,需要有PRE命令。
PRE命令用来关闭在一个bank或多个bank中打开的row。在PRE命令发出之后的tRP时间后,bank才是有效的,除非有auto-precharge的操作。
在auto-precharge的时候,只要不打断在当前bank中的数据传输,不违反时间参数的要求,指向另一个bank的读写命令是允许的。
A10输入引脚决定了是不是所有bank都被PRECHARGE。
如果只有一个bank被PRECHARGE,输入BA[2:0]选择bank,否则BA[2:0]是无关位。
当一个bank被PRECHARGE之后,它处于idle状态并且在读写这个bank之前必须要对其激活。
如果在一个bank中没有row被激活,或者先前打开的row此刻正在PRECHARGE,那么发出的PRECHARGE命令是无效的。
但是PRECHARGE的时间周期是有向这个bank发出的最后一个PRECHARGE命令决定的。
读命令用来启动在一个活动row中的突发读操作。根据突发类型和突发长度,A[2:0]选择起始的col地址。A10选择是否有auto-precharge的操作。
如果有auto-precharge,在读结束之后,这个row会被PRECHARGE。如果没有auto-precharge,在读结束之后,这个row仍然是打开的,允许对这个row的后续操作。
当读命令发出的时候,A12的值决定了是BC4或者BL8。当READ命令发出之后,突发的读操作是不能被打断的。
WRITE命令用来在一个活动的row中启动一个突发写操作。BA[2:0]选择bank。A10决定是否有auto-precharge。当写命令发出的时候,A12的值决定是BC4还是BL8。
在DM的影响下,出现在DQ上的数据,写入缓存之中。如果DM信号是低,相关的数据会写入内存之中。如果DM信号是高,相关的数据就会被忽略。
DRAM的普通操作的时候会用到REFRESH。REFRESH类似于CAS#-before-RAS#(CBR)refresh或者auto-fresh。这条命令并不是持续的,因此每当需要的时候,必须发出这个命令。
地址由内部的fresh controller产生。在REFRESH期间,addr引脚是无关位。DRAM要求在Tc<=85°时,平均7.8us刷新一次,在Tc>85°时,平均3.9us刷新一次。
REFRESH周期从REFRESH命令被接受开始,经过tRFC(MIN)之后结束。
为了允许提高调度效率和任务切换效率,fresh的决定间隔是可以调整的。最多8个命令可以向DRAM发出,意味着REFRESH命令之间的最大绝对间隔是9倍最大平均刷新频率。
发出了8个REFRESH命令之后,进入self refresh。在跳出self refresh之后,REFRESH命令被允许,所发出的的REFRESH的命令的最大数量不能超过8个。
所指出的最大8个REFRESH命令是JEDEC固定的;但是,只要所有要求的REFRESH命令在64ms内全部发出,超过8个REFRESH命令是允许的
典型的asynchronous DRAM(异步DRAM)的刷新方式是ROR,这种方式依次刷新每一行。控制器输出刷新命令的时候,需要输出row地址。
为了方便起见,把row地址计数器放在DRAM芯片中,这种方式CBR。这种刷新方式已经成了ADRAM的典型操作方式,也是SDRAM的唯一操作方式。
总结
每个bank上有一组放大器,这一组放大器指向一个row,在这颗DDR3有8个bank,因此有组放大器。
当激活一个bank的row的时候,放大器就指向了这个row。可以同时打开多个bank中的row,但在一个bank中只能有一个打开的row。
ACT命令对应着BA,一个ACT命令只能打开一个bank中的某一行,因此还需要row地址。
如果一个bank中已经打开了一个row,而此时需要访问这个bank中的另一个row的时候,需要先关闭这个row,再打开新的row。
PRECHARGE命令用来关闭某个bank或全部bank中打开的row,命令发出的时候无需指出row地址,因为在一个bank中只能打开一个row。