个人理解
(1)
GDDR6的training是包括CA training的,但与LPDDR4不一致,在CA training之前,LPDDR4是通过低频时钟对颗粒内部的MR寄存器进行设置。
GDDR6没有低频时钟,通过复位释放前,通过CA等引脚,将CA ODT等参数,静态设置完毕。并提供了一个特殊的MR15寄存器,用于使能CA training。
(2)
GDDR6做读写training时,是将数据存放在FIFO中,不会访问mem arry。这样设计的目的是,为了方便在正常工作的情况下,对颗粒进行training训练。比如发生EDC错误时,如果判定需要重新调整延迟,那么需要做training。
CA training
(1)CA training 通过设置MR15寄存器,使能和退出CA training。通过MR15的描述可以知道,CA training有三部分,trainingCA[9:0]与CK 上升沿对齐,trainingCA[9:0]与CK的下降沿对齐,trainingCABI与CA10
(2)CAtraining使能通过设置MR15实现,发送CAT命令需要CKEn拉高一个周期 ;退出CADT需要拉高两个周期,其中第二个周期用于设置MR15。
(3)CA training,CA的值通过latch传输到DQ的,其对应关系
(4)CA training,支持self-refresh下的CA training,需要提前配置MR2将颗粒进入self-refresh状态。这里有个疑问;
在CA training之前如何配置MR2的值呢?
文档说在低频下配置。那么需要PHY端提供低频时钟。
WCK2CK training
WCK2CK的目的是为了对齐WCK与CK。
在WCK2CK training之前需要做好以下准备:
(1)CA training完成
(2)CK时钟稳定
(3)PLL on/off 与PLL 延迟补偿enable/disable 设置好
(4)WCK2CK对齐的点和WCK ratio设置好
(5)WCK分频后的相位偏移设置好
(6)all-bank 在idle状态
注意点1 一开始分频器的相位差
在启动WCK2CK training之后,会初始化WCK divider,这样会导致每个byte上分频后的时钟相位不一致。这样会在EDC上 显现出来。这时候需要通过调整MR的值,调整分频后的相位偏移,实现对齐。如图15
还有一种方式如图16,这种方式需要在fWCKSTOP频率以下才能实现,这种方式就是WCK先固定电平,使能WC2CK training,这样会使得分频器输出都以相同的相位输出。
注意点2 分频器的分频系数
WCK有两种频率,分别对应WCK:CK =4:1 和2:1。而且颗粒内部对WCK的要求也有两种一种是Internal Quarter data rate WCK 另外一种是Internal Eighth data rate WCK, 所以分频器也存在/2和/4的情况。
这些颗粒的信息都可以通过vender ID可以得知。
Internal Quarter data rate WCK : 外部为half rate ,分频系数为2
Internal Eighth data rate WCK : 外部为half rate,分频系数为4;或者外部为quarter data rate,分频系数为2。
颗粒如何反馈WCK与CK之间的相位关系
颗粒通过EDC反馈WCK与CK之间的相位关系。
当WCK比CK早,那么EDC会拉高。增加WCK的延迟
当WCK比CK晚,那么EDC会拉低。降低WCK的延迟
当WCK与CK对齐,那么EDC状态是不确定的。
WCK与CK之间相位存在对齐范围,参考tWCK2CKPIN
注意点4 PLL/DLL 与WCK2CK之间的关系
下图可以得出,外部WCK进入颗粒后,先进行分频,然后一路用于与CK进行相位对齐检测,用于WCK2CK training。另外一路会进入PLL或直接用于采样DQ数据。
所以从下图不难得出,PLL/DLL 不会影响WCK2CK training 的结果的,但WCK2CK会调节WCK的相位,从而影响PLL/DLL的输出时钟。所以在WCK2CK training 训练中,待WCK与CK对齐后,需要将PLL/DLL复位,然后重新启动,等待tLK后PLL/DLL重新lock后才能退出WCK2CK training。图15 和图16中描述了这一过程。
注意点5 WCK2CK退出的注意事项
(1)退出WCK2CK training 通过配置MR10完成的。MR10的OP[7:4]是对内部WCK做相位调整;如果在WCK2CKtraining过程中有过设置调整,在最后退出的时候,配置MR10中的OP[7:4]用调整后的值。
(2)退出后WCK与CK需要在tWCK2CKSYNC的时间内对齐。
(3) WCK的相位因为PVT的关系存在漂移,当超过厂家设置的tWCK2CK的范围,则需要重新training
注意点6 WCK与CK相位对齐的地点
通过MR7 OP0控制
设置为0 : WCK与CK对齐在 相位检测器端
设置为1 : WCK与CK对齐在balls上,不是很理解是哪个位置。只有的fCKPIN频率内才能使用
WCK2CK auto sync
WCK2CK atuo sync可以减少training的时间。
read training
注意1: readtraining之前准备工作:
(1)至少保证一个bank 在ACT状态,或者一个REFab在执行并且需要设置MR5 OP2=0,即设置LP2=0 ,允许在REFab期间进行training操作。
(2)WCK2CK training 完成
(3)PLL/DLL lock
(4)如果要training DBI,需要将RDBI和WDBI打开。
LDFF& RDTR两个指令
LDFF是将数据load到read FIFO中
RDTR是将数据从read FIFO中读出。
这两个命令是不会访问mem arry的
LDFF
(1)LDFF命令直接将数据通过CA命令的方式load到read fifo中
(2)read FIFO中针对每一位DQ ,DBI和EDC都有6个burst,一共能存6*16=96个数据。所以上图中EDC自己单独一个6*16bits的EDCfifo ;DQ/DBI是一个合体的6*144bit的FIFO
(3)data pattern 只有10bit,所以byte0和byte1是相同的
(4)需要16个LDFF才能将一个FIFO填满,通过B选择哪个,其中0-14 可以任意顺序,第16个burst一定是15,因为它可以有效地将数据加载到FIFO中,并导致FIFO指针的增量。
(5)FIFO一共有6个,对于其他五个FIFO,通过发送LDFF burst15 将前一个的FIFO中的数据复制到下一个fifo中。所以之后连续发送五个burst15 完成对其他FIFO的赋值。如果超过5,那么只会循环覆盖。
(6)当与RDTR一起使用时,那么LDFF填满的FIFO数和RDTR访问的一致才可以
RDTR
(1)如果要使用 CE要为高。
(2)RDTR跟LDFF一样,只能在一个bank为ACT或者REFab过程且MOR5 OP2设置为0
(3)DBI和EDC只要设置才能输出
(4)时序完全符合READ操作
注意2:EDC read training 相关
(1)无论使能不使能CRC,LDFF都会将数据load到EDC fifo中,但只有在使能时,RDTR才会将EDC的数据读出。
(2)当EDC采用 half rate时,那么LDFFload到EDC fifo中的数据,0和1,2和3,4和5.。。。等等每组要load相同的值。RDTR也会以half rate的状态读出数据
WRITE TRAINING
注意1:write training之前准备工作:
(1)基本跟read training要求一样
(2)read training 完成
涉及两个命令
WRTR:通过DQ往 read FIFO写入数据
RDTR:从read FIFO中读出数据