@DDR3协议中寄存器的问题(以JEDEC 79-3E为基础)
DDR3协议中寄存器的问题(以JEDEC 79-3E为基础)
好记性不如烂笔头,记录学习DDR3学习过程的重要知识点
本文参考了中国的孩子的博文感谢大神的分享!
状态机简图
状态机简图展示了DDR3状态之间的转换关系:
图1- 状态机简图
图中虚线是自动跳转,实线是通过发送命令才能跳转的。
下面是框中对应的命令。
ACT = ACTIVATE
MPR = Multipurpose register
MRS = Mode register set
PDE = Power-down entry
PDX = Power-down exit
PREA = PRECHARGE ALL
PRE = PRECHARGE
READ = RD, RDS4, RDS8
ZQCL = ZQ LONG CALIBRATION
REF = REFRESH
SRE = Self refresh entry
ZQCS = ZQ SHORT CALIBRATION
RESET = START RESET
WRITE = WR, WRS4, WRS8
PROCEDURESRX = Self refresh exit
WRITE AP = WRAP, WRAPS4, WRAPS8
READ AP = RDAP, RDAPS4, RDAPS8
Start-Up : Power on -> Reset Procedure -> Initialization -> ZQ Calibration -> IDLE
READ : idle -> Activating -> (Bank Active) -> Reading -> Precharging ->idle
Write :idle -> Activating -> bank active -> writing -> precharging ->idle
Refresh : idle -> Refreshing ->idle
Self-refresh : idle -> self-refresh ->idle
ZQ Caliration : idle -> ZQCL/ZQCS ->idle
Leveling : idle -> MRS,MPR,Write Leveling -> idle
Power Down :
RESET 和 Initialization 步骤
复位是异步复位,当拉低后要保持200ns,在些期间输出会被禁止,ODT被关闭(处于高阻)。
在RESET#拉高之前CKE应该拉低,当RESET拉高之后,DRAM必须要重新初始化。所有的
计数器—除刷新计数器外,都会复位,当RESET拉低之后 ,DRAM中存储的数据,也变为不
确定值。
POWER UP和Initialization需要如下顺序.
- 通电( RESET#建议保持在0.2 x VDD“主电源设备电源”以下;所有其他输入可能未定义)。
RESET#至少需要保持200 us,电源稳定。在复位被取消断言之前的任何时候(最短时间
10ns), CKE被拉“低”。 300 mv到VDDmin之间的电源电压斜坡时间不得大于200 ms;在斜坡
期间, VDD > VDDQ和(VDD - VDDQ) < 0.3 v.(VDDQ给IO buffer供电)
• VDD 和 VDDQ 由单个功率转换器输出驱动, AND
• 除VDD、 VDDQ、 VSS、 VSSQ以外的所有管脚的电压电平,一侧必须小于或等于VDDQ和
VDD,另一侧必须大于或等于VSSQ和VSS。此外,一旦功率斜坡完成, VTT(匹配电压)最
大限制为
0.95V, AND
• Vref(参考电压) 跟随VDDQ/2.
或者
• 在VDDQ之前或与VDDQ同时应用无坡度反转的VDD。
• 在VTT和Vref之前或同时应用VDDQ,没有任何斜率反转。
• 除VDD、 VDDQ、 VSS、 VSSQ以外的所有管脚的电压电平,一侧必须小于或等于VDDQ和
VDD,另一侧必须大于或等于VSSQ和VSS。 - RESET# 解除断言后,再等待500 us,直到CKE激活。在此期间, DRAM将启动内部状态初始
化;这将独立于外部时钟完成。 - 时钟( CK, CK#)需要启动并稳定至少10 ns或5 tCK(更大)才能激活。由于CKE是同步信
号,因此必须满足相应的设置时钟时间( tIS)。此外,在CKE激活之前,必须注册NOP或取
消选择命令(使用tIS设置时钟时间)。一旦CKE在复位后注册为“高”, CKE就需要连续注册
为“高”,直到初始化序列完成,包括tDLLK和tZQinit的过期。 - 只要RESET#被断言, DDR3 SDRAM就会将其片上终端保持在高阻抗状态。此外,在RESET#
解除评估之后, SDRAM将其管芯端接保持在高阻抗状态,直到CKE被注册为高阻。 ODT输入
信号可能处于未定义状态,直到CKE注册为高电平。当CKE被记录为高电平时, ODT输入信号
可以静态地保持在低电平或高电平。如果要在MR1中启用RTT_NOM,则ODT输入信号必须
静态保持在低位。在所有情况下, ODT输入信号保持静态,直到加电初始化序列完成,包括
tDLLK和tZQinit的过期。 - 在CKE被注册为高之后,在发出加载模式寄存器的第一个MRS命令之前,等待重置CKE退出
时间tXPR的最小值 (tXPR=max (tXS ; 5 x tCK) - 发出MRS命令,用所有应用程序设置加载MR2。 (为MR2发出MRS命令, BA0置“Low”, BA2
置“High”, BA1置“High”。 ) - 发出MRS命令以加载所有应用程序设置的MR3。 (为MR3发出MRS命令, BA2置“Low”, BA0
和BA1置“High”。 ) - 发出MRS命令以加载所有应用程序设置和DLL已启用的MR1。 (为发出“DLL启用“命令”,为A0
置“低”,为BA0置“高”,为BA1 - BA2置“低”)。 - 发出MRS命令以加载所有应用程序设置和“DLL重置”的MR0。 (发出DLL重置命令,给A8置
“High”,给BA0-2置“Low”). - 发出ZQCL命令开始ZQ校准.
- 等待tDLLK和tZQinit完成.
- DDR3 SDRAM现在可以正常操作了.
图3 — Reset and Initialization Sequence at Power-on Ramping
ZQCL: 上电初始化后,用完成校准ZQ电阻。ZQCL会触发DRAM内部的校准引擎,
一旦校准完成,校准后的值会传递到DRAM的IO管脚上,并反映为输出驱动和ODT阻值。
ZQCS: 周期性的校准,能够跟随电压和温度的变化而变化。校准需要更短的时间窗口,
一次校准,可以有效的纠正最小0.5%的RON和RTT电阻。
MRS (mode register set)
MODE Register Set, 模式寄存器设置。为了应用的灵活性,不同的功能、特征
和模式等在DDR3芯片上的Mode Register中,通过编程来实现。模式寄存器MR
没有缺省值,因此模式寄存器MR必须在上电或者复位后被完全初始化,这样才
能使得DDR可以正常工作。正常工作模式下,MR也可以被重新写入。模式寄存
器的设置命令周期tMRD就两次操作的最小时间。MRS命令要求所有bank处于
idle状态,并且MRS只能在precharged状态下进行。
模式寄存器,分为MR0、MR1、MR2和MR4。
MR0用来存储DDR3的不同操作模式的数据:包括突发长度、读取突发种类、CAS长度、测试模式、DLL复位等。
MR1用来存储是否使能DLL、输出驱动长度、Rtt_Nom、额外长度、写电平使能等。
MR2用来存储控制更新的特性, Rtt_WR阻抗,和CAS写长度。
MR3用来控制MPR。
• BA2 = 0, BA1 = 0, BA0 = 0 for MR0
• BA2 = 0, BA1 = 0, BA0 = 1 for MR1
• BA2 = 0, BA1 = 1, BA0 = 0 for MR2
• BA2 = 0, BA1 = 1, BA0 = 1 for MR3
MPR寄存器
MPR: Multi-purpose register. 多用途寄存器。MPR的功能是读出一个预先设定
的系统时序校准比特序列。为了使能MPR功能,需要在MRS的寄存器MR3的A2
位写1,并且在此之前需要将DDR3的所有bank处于idle状态; 一旦MPR被使能后,
任何RD和RDA的命令都会被引入到MPR寄存器中,当MPR寄存器被使能后, 除非
MPR被禁止(MR3的A2=0),否则就只有RD和RDA被允许。在MPR被使能的时候,
RESET功能是被允许的。
Precharge Power Down: bank在in-progress命令后关闭。
Active Power Down:bank在in-progress命令后依然打开。
Self refresh temperature(SRT)
当disable,手动更新的速率是以85度为标准的,并且要求器件的温度不能超过85
个人感觉这里面有三个概念要搞清楚,(自刷新)self refresh ,(自动刷新)ASR和SRT。
当ASR和SRT均未开开启时就是self refresh模式,self refresh的刷新频率为1x,它是按
照在85T内的正常温度范围内来刷新,如果温度超过85T,在85T~95T扩展温度范围,就
只能开启ASR或SRT,SRT开启之后就是按2x的刷新频率来刷新,而ASR是根据温度范
围来决定刷新的频率,如果在正常温度范围则为1x,如果是扩展温度范围则为2x。
但要注意,SRT 和 ASR不能同时开启。
有这样一句话:自动刷新用于正常操作模式 ,在自动刷新时 ,其他命令无法操作。
自刷新主要用于低功耗状态下的数据保存 。
ODT(On-Die Termination)
动态ODT是DDR3新增加的功能有,DDR3的新动态ODT特性具有针对不同的负载条件
优化终结电阻值的灵活性,这样可以改善信号完整性,它还提供了管理终结功耗的一种
方法。动态ODT使DDR3器件能无缝地改变针对不同模块发出的“WRITE”命令之间的终
结电阻值。该特性是DDR2系统所不能提供的,在同一个器件上,DDR2需要总线空闲时
间来改变终结电阻值。
在DLL Disable Mode模式下是不支持ODT(NOM ODT和动态ODT)的,在DLL Disable Mode下
ODT管脚必须要拉低,RTT,nom MR1[9, 6, 2] 和 RTT(WR) MR2[10, 9]也要设置为0。
ODT分为常规ODT(NOM ODT)和动态ODT两种模式,分别对应Rtt_Nom和Rtt_WR两种终端值。
当ODT在模式寄存器中设置使能之后—无论是Rtt_Nom还是Rtt_WR,并把ODT管脚拉高,DRAM
将会终结 DQS, DQS#, DM, 和所有的DQ. 对于TDQS使能的x8 DRAM,TDQS和TDQS#也会被终结。
要使能Rtt_WR并非必须使能Rtt_Nom,两都是相互独立的,如果禁止Rtt_Nom使能Rtt_WR,DRAM只会在写操作时终结相应信号.
注意区分几个参数。
Rtt、Rtt.nom和Rtt(wr),, RTT(EFF)。
四个状态:使能(enabled),禁止(dsiabled),打开(turn on)和关闭(turn off)。
动态ODT
动态ODT只应用于写周期,在Rtt_Nom 和 Rtt_WR均使能的情况下,DRAM会在写操作命令时把Rtt_Nom切换到Rtt_WR,当写突发完成后又会切换回Rtt_Nom,在终结阻值的切换过程是不需要MR寄存器去设置的。
Synchronous ODT
什么是同步ODT?
在self refresh模式或者在MR1与MR2中disable掉ODT时ODT管脚的电平被忽略。
当ODT (RTT_nom)无效时,ODT (RTT_nom)值是高阻Z。
使能动态ODT只能应用在写周期,并且在write leveling mode下不可用。动态ODT与ODT可以相互独立使用。
同步ODT参数。
未完待续。。。。。