引言 — 聊一聊DDR系列的第十二篇,来自于行业内小伙伴DRAMer的投稿。
今天咱们来聊一聊DRAM神秘的training过程。本文针对有一定行业背景基础的同学。
咱们都知道,不同Memory controller有不同的training sequence和training item。
本文这里主要以Intel平台为例,详细展开聊一聊DDR5繁多training item中的early CS training.
首先咱们需要知道CS是什么,我们通常称之为片选command信号,DDR5中的具体定义如下:
在知道CS信号的定义后,这里再解释一下normal CS operation和Multiple cycle CS operation。在做CS training时,主要关注的是后者。
两者主要区别是Multiple cycle CS是host始终保持CS信号在多个CLK上升沿的时期下处于low的状态,而Normal CS operation是single CLK上升沿下处于Low的状态。
上面这个时序图刚好把跑通了整个CS training的过程和结果。
前面的Mutiple cycle CS是为了将CS信号进行training,一方面是VrefCS的setting,另外一方面是Align CLK and CS。
将CSt raining到一个最佳的结果之后,后续DRAM的operation可以按照normal CS去工作。
前面也说到CS training的目的是为了得到一个最佳的CS voltage和 Timing.通常的VrefCS voltage的training range是60%-70%。Timing range是0-255.(一个tCK分成256份)。
整个VrefCS training的过程比较简单,无非就是先初始化一个default VrefCs voltage,然后在一个tCK内一个或者几个PI的sweep,找到该VrefCS voltage下的最大眼宽。
继而再次调整VrefCS,再次timing sweep,找到眼高。
直到最后Eye size太小或者没有eye的时候退出CS training。
这个时候VrefCS的眼高和眼宽都找到了,综合所有颗粒选择最合适的VrefCS value后,继而更新到相应的MR寄存器。
这里的难一点的地方是CS training mode output feedback的过程理解。我们知道VrefCS timing sweep的结果都是以DQ输出的结果判断。在连续的4个CLK的上升沿去对CS信号进行采样。
从上面的图,我们可以看出,当CS信号在CLK的第0次和第2次采样是0,第1次和第3次采样是1的时候,此时DRAM将会驱动所有的DQ逻辑电平为0输出。
所以这个时候我们只要观察DQ输出是data"*”, 还是Data"0"就能知道CS信号在该颗粒上的眼宽和眼高。
这样一来,我们也可以从DRAM training log中去寻找CS training的蛛丝马迹。
这里想用一个Intel平台CS training log中的片段来举例说明。
下图可以看出来VrefCS setting为29个offset时,PIstep=4时的眼宽Training 结果,
这张图其实是对上张图training过程的总结,可以看到每一个Byte的left,right的情况,以及width和center。
这张图是对所有VrefCs Setting结果的眼宽记录,相当于一个总的summary,这个时候Host就会综合选择一个最合适的VrefCs。
高阅读量文章