👉个人主页:highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
参考资料:《镁光SDRAM数据手册》、《PC SDRAM specification》
目录
Read
Write
Precharge
DQM
Power down
Clock Suspend
本篇继续介绍SDRAM相关命令功能。
Read
读命令有带自动预充电的读和不带自动预充电的读。如下图所示,WE#为高表示读,同时发送列地址和bank地址(理解一下为什么前面行激活已经发过bank地址了,为什么这里还需要发?),A10为高表示使能自动预充电,为低表示不使能自动预充电,如果选择了自动预充电,则正在访问的行在READ突发结束时会被预充电;如果未选择自动预充电,则该行保持打开状态以供后续访问。注意,在行激活之后,需要间隔tRCD时间才能发读或写命令,tRCD也称为行选通周期,很好理解,要把一整行成千上万个晶体管打开肯定是需要时间的。另外,读取数据是否出现在DQ上,取决于两个时钟周期(DQM latency)前DQM输入上的逻辑电平。如果给定的DQM信号为高,则两个时钟后对应的DQ将为HIGH-Z;如果DQM信号为低,DQ将提供有效数据输出。
Write
写和读类似,只是WE#为低,其他控制信号电平一样。DQM的生效与读命令稍微有点不一样,这里没有两个时钟周期的延迟(只有读有CAS潜伏期,也称读延迟RL,写没有),如果给定的DQM信号为低,则相应的数据被写入存储器;如果DQM信号为高,则相应的数据输入被忽略,并且不执行对该字节/列位置的WRITE。
Precharge
从之前文章提到的存储阵列结构可以知道,一根位线上连接了很多个行的存储单元,如果某一个行打开了,不把这行先关闭,又去打开另一个行,那这一根位线肯定无法同时正确表示两个存储单元的值,所以在打开另一行之前,需要把当前行关闭,这个过程就叫做预充电。注意DRAM操作命令中的Precharge,它的含义范围比感应放大器操作过程中的Precharge更广一点,DRAM命令中的预充电操作包括:对当前工作行中所有存储体进行数据重写、关闭当前行、释放(旁路)感应放大器、将位线电平充电到VDD/2。而感应放大器的预充电操作指的是:感测电路sensing circuit被旁路,电压均衡电路激活,位线被预充电到参考电压Vref,即VDD/2。
操作波形如下图,可以通过A10、BA0、BA1进行被充电bank的选择。注意A10的功能,既可以在读或写命令中表示是否使能自动预充电,也可以在独立的预充电命令中用来选择预充电的范围。
针对不同容量的SDRAM,预充电的范围控制如下图:
在发出预充电命令之后,要经过一段时间才能允许发送行激活命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电周期)。和tRCD、CL一样,tRP的单位也是时钟周期数,具体值视时钟频率而定。
DQM
DQ mask,高有效,对SDRAM颗粒来说是输入信号。写操作时,该信号为输入数据的屏蔽信号,读操作时,该信号为输出数据的使能信号。读操作的使能存在2个时钟周期的延迟,称为DQM latency,若想要屏蔽某段DQ不输出,需要提前2个时钟周期将DQM拉高,在输出disable时,output buffer为高阻状态,如果这个时候做数据输入就不会出现总线争用。这个DQM功能在读突发被写操作截断时有大用,后面细说。另外,写操作屏蔽没延迟,如果要写入数据,需要把DQM及时拉低,否则输入数据将会被屏蔽。如下图所示:
Power down
将CKE拉低,再加上一个NOP命令即可进入power down状态,将CKE拉高,再加上一个NOP命令即可退出power down状态。Power down状态下不执行自刷新,所以power down时间不能超过刷新周期(64ms)。
Clock Suspend
当列访问/突发正在进行并且CKE被拉低时,将进入时钟挂起模式。在时钟挂起模式中,内部时钟被停用,从而冻结同步逻辑。
对于CKE被采样为低的每个正时钟边沿,下一个内部正时钟边沿被暂停。当内部时钟边沿暂停时,输入引脚上出现的任何命令或数据都将被忽略,输出DQ将保持进入时钟挂起模式前一拍的驱动电平,并且只要时钟被暂停就不增加突发计数器。
通过拉高CKE可以退出时钟挂起模式,内部时钟和相关操作将在随后的正时钟沿上恢复。
下图为写突发时钟挂起:
下图为读突发时钟挂起:
下一篇讲述刷新相关内容,这部分内容稍微多一点,所以单独拎出来。