ODT(On-Die Termination,终端电阻)是DDR4的一个特点,对于x4和x8器件,其允许DRAM改变每个DQ,DQS_t,DQS_c和DM_n的终端电阻阻值,对于x8器件,当MR1的A11=1时,还能改变TDQS_t和TDQS_c的阻值。改变阻值的方式为利用ODT pin脚或写命令或MR寄存器中设置的默认值(这个默认值英文中带有“Parking”一词,Park本身便有停靠的意思)。对于x16器件,ODT可以用于每个DQU, DQL, DQSU_t, DQSU_c, DQSL_t, DQSL_c, DMU_n and DML_n信号。ODT用于提高信号完整性。更多信息详见以下章节:
- 5.1章节描述了ODT控制模式
- 5.2章节描述了同步ODT模式
- 5.3章节描述了动态ODT功能
- 5.4章节描述了异步ODT功能
- 5.5章节描述了关闭ODT模式
在自刷新模式下,ODT功能是被关闭的。图174展示了简明的ODT功能。其中DQ,DQS,DM,TDQS信号上方有RTT电阻,电阻旁边有个开关,当开关接通,则说明信号接上了RTT电阻。开关的是否关断/闭合取决于内部的ODT控制逻辑,该逻辑由外部的ODT pin脚和MR寄存器的设置以及其它别的控制信息决定。RTT的阻值可根据MR寄存器的设置而改变,可理解为初中物理的变阻器。在自刷新模式下,以及MR1的A[10:8]=000的情况下,DRAM将会忽略外部的ODT pin脚的输入。
5.1 ODT模式寄存器和ODT状态表
DDR4的ODT有四种状态:电阻disable、RTT_WR、RTT_NOM以及RTT_PARK。如果MR1 A[10:8]或MR2 A[10:9]或MR5 A[8:6]其中的一个或几个不是全零的情况下,则会使能ODT模式,同时,这些MR寄存器中也设置了终端电阻的阻值到底是多少。
进入自刷新模式后,DRAM自动disable ODT电阻并无视MR的设置将其设置为高阻态。
应用举例:内存控制器可以结合ODT pin,在WR/RD命令时控制每个RTT的阻值具体是多少。
- RTT_WR:无论ODT pin的电平为高还是为低,当rank(注意这里是rank)接收写入颗粒的数据时,终端电阻阻值为RTT_WR。
- RTT_NOM:假设MR1的ODT没有被disable,当ODT pin拉高时,此时终端电阻阻值为RTT_NOM。
- RTT_PARK:给MR5以合适的设置,且当ODT pin脚为低时,终端电阻阻值为RTT_PARK。
- 电阻Disable:在发送READ命令后,DRAM驱动数据回传到控制器时,会disable终端电阻。disable的时间起点为发送READ命令之后的(RL-X)个CK周期,持续时长为BL/2 + X个CK周期。其中X为前导时钟长度。
RTT阻值的优先级如下:电阻Disable > RTT_WR > RTT_NOM > RTT_PARK。优先级表明,当ODT pin为高电平时,如果WR命令到来,则此时对应的终端电阻为RTT_WR而非RTT_NOM;如果此时为RD命令,即使ODT pin为高,回传数据时DARM将会disable终端电阻。
表72为具体的终端电阻状态。
- 当发送READ命令后,DRAM将会在回传读数据的时候将终端电阻设置为高阻态。
- 当RTT_WR使能后,在发送写命令的时候无论ODT pin以及其它MR的设置如何,其终端电阻值都为RTT_WR。
- 当disable RTT_NOM,ODT receiver的供电将关闭以降低功耗。
终端电阻的有效值Rtt可以为240,120,80,60,48,40,34欧姆。
图175展示了RTT阻值的计算方式。
表73展示了,当经过ZQ校准后,在不同的Vout的情况下,在整个温度范围内,RTT阻值的取值范围为。其中最左列为RTT的标准取值。
5.2 同步ODT模式
当DLL打开并被锁定时,都将选择同步的ODT模式。同步ODT模式包括:
- 当CKE为高时任何bank被激活
- 当CKE为高时的刷新
- 当CKE为高时DRAM的idle状态
- Active Power downw模式
- Precharge Power down模式
其中第四点和第五点要根据4.28章节的Power Down内容给出解释,如下:
如果任何命令完成后,所有的bank都被关闭,此时进入power down模式,称为precharge Power Down模式;如果命令完成后,有任何一个bank打开,此时进入Power down模式称为active power down模式。详见表56的描述。
在同步ODT模式中,当CK上升沿采样到ODT pin为高时,经DODTLon个CK周期后,终端电阻值变为RTT_NOM,当在CK上升沿采样ODT pin为低时,经DODTLoff个CK周期后,终端电阻阻值不再为RTT_NOM。ODT开启和关闭的延迟与Write Latency有关,WL = CL+AL+PL,DODTLon=WL-2,DODTLoff=WL-2。前导时钟为2tCK时,DODTLon=WL-3,DODTLoff=WL-3。
5.2.1 ODT延迟与Posted ODT
如表74和表75所示。
5.2.2 时序参数
在同步ODT模式下,有如下时序参数:DODTLon, DODTLoff, RODTLoff, RODTLon4, RODTLon8, tADC,min,max。其中tADCmin、tADCmax为RTT从某个值切换到另一个值所需要的时间。时间参数tADC在同步ODT模式和电阻Disable模式下都适用。
当ODT pin拉高,必须保持ODTH4个CK周期(突发长度为4),或者必须保持ODTH8个CK周期(突发长度为8)。另外,根据MRS设置的不同,当开启CRC或前导为2tCK时,ODTH的值也会发生变化。
图176展示了同步ODT的时序。可见,ODT pin在CK下降沿进行改变,不到一个周期就能改变完成。tADCmax/min时间小于一个CK。这里有个问题,当ODT在下降沿改变时,为何tADC在ODT下降沿之前就开始出现了?实际上,参见5.6节tADC的测量方式,其不是根据ODT pin的高低电平来测量的,而是根据DODTLon/DODTLoff的右边界来作为tADC的起点。
图177展示了带有WRS4命令的时序图。这里有个疑问,在ODT拉高4个周期的时候,并没有发送写命令,从而不会知道突发长度到底是多少。难道在T0时刻前已经规定了突发长度?按照后续发送的WRS4命令,看起来应该是在T0以前规定了突发长度。另外,WRS4命令的发送正好处于DODTLon结束后的下一个CK上升沿,非常巧合,非常特例。个人理解,WRS4也可以推迟几个CK周期再发送。
图177的底下有一行小字,表明了
- ODT必须至少拉高ODTH4个CK周期。ODTH的测量是从ODT信号在第一次拉高到第一次拉低时持续的时长。
- 当CRC开启或写前导为2tCK时,ODTH4的持续时长也需进行相应改变。
5.2.3 读操作时的ODT
由于读操作需要DRAM返回数据给内存控制器,故需要驱动DQS信号和DQ信号,而DRAM不能在驱动信号的同时还挂载一个终端电阻(这就是为什么在数据返回时,本身DQS和DQ为高阻态,但是由于有数据返回,变成了有变化的数据信号)。在读后导结束前,RTT将不会回到RTT_NOM值,如图178的T25时所示。
在下图的阴影处,本质上为高阻态。时序参数tHZ对应tADC。
图179与图178相似,仅改变了读前导时长。
5.3 动态ODT
动态ODT即为不发送MRS命令即可改变RTT值。支持动态ODT功能描述如下:
5.3.1 功能描述
将MR2的A9或A10其中一个设置为1,即可进入动态ODT模式。
- 动态ODT支持三种RTT值:RTT_NOM, RTT_PARK and RTT_WR,相比与同步ODT模式,少了一个电阻disable。
- 在没有命令发送的情况下,终端电阻如下:
终端电阻要么为RTT_NOM,要么为RTT_PARK。
RTT_NOM的开/关时序由ODT pin以及ODTLon/off的延迟决定;当ODT pin为低时,RTT = RTT_PARK。
- 当有写命令时,如果使能了动态ODT,则终端电阻如下:
在写命令发送后的ODTLcnw时序后,RTT = RTT_WR。
在写命令发送后的ODTLcwn8(突发长度为BL8(Fixed or OTF))或ODTLcwn4(突发长度为BL4(Fixed or OTF)),RTT不再等于RTT_WR。
当处于CRC或者2tCK前导模式下,ODTLcnw的时长应该增减1或2个CK周期。
表76展示了动态ODT模式下的时序参数和延迟时间,其中未使能CRC,且前导时钟为1tCK。
表77详细说明了CRC使能/不使能,前导为1tCK/2tCK情况下时序参数的变化。
5.3.2 ODT时序图
下面靓图为动态ODT的时序图。
5.4 异步ODT模式
当DLL被disable时,也就是MR1的A0=0时(即DLL off时),ODT的模式为异步ODT模式。在异步ODT模式下,内部ODT命令不会受到AL延迟的影响,也不会受到外部ODT信号的影响(这句话存疑)。此模式下所用的时序参数为tAONAS,tAOFAS。
tAONSAS为开启RTT_NOM的时间。tAONASmin的右边界为终端电阻的阻值从RTT_PARK开始变换,tAONASmax的右边界为终端电阻变成了RTT_NOM,两者的左边界为CK信号上升沿采样到ODT pin脚信号为高的时刻。
与tAONSAS参数相对应的为tAOFAS。tAOFASmin的右边界为终端电阻阻值从RTT_NOM开始变换,ttAOFASmax的右边界为终端电阻变成了RTT_PARK,两者的左边界为CK信号上升沿采样到ODT pin脚信号为低的时刻。
图182为上述两段话的说明。
表78阐述了时序参数的具体取值范围。
个人理解, 异步ODT和同步ODT最大的区别即为DLL是否打开。在打开DLL的情况下为同步ODT模式,在关闭DLL的情况下为异步ODT。两者的时序延迟也有差别,前者与MR寄存器中设置的WL、AL等延迟有关,后者的时序延迟仅在1ns到9ns之间。
5.5 下电时disable ODT bufferr模式
在下电时,如果MR5的A5=1,则DRAM颗粒不会提供RTT_NOM终端电阻给所有的输入。当进入下电模式时,内存控制器必须持续控制ODT pin脚为高或者为低,即从在CK采样到CKE为低之前的tDDODToff - 1的时刻,到CK采样到CKE为低之后的tCPDEDmin,这两段时间内,ODT pin必须保持在某一稳定的电平。在此时序之后,ODT pin可以为Floating态。在CKE拉高时(以及tANPD)之前,终端电阻可以为RTT_NOM,也可以为RTT_PARK(虽然图183中CKE拉低时和拉低之前,RTT的值为RTT_NOM)。tANPD=WL-1,其右边界为PDE。
当退出Power down模式,ODT pin必须在CKE拉高之后的tXP时间后拉高。
5.6 ODT时序的定义
不同于时间的测量,ODT时序测量需要引入参考负载,建议直接翻阅此章节,尽是图和表。