DRAM Training

有人说BIOS程序就是按照硬件手册和根据用户选择填寄存器,几张表就能解决的事为什么要这许多程序呢?

虽然数千个选择形成的组合爆炸让穷举表成为不可能,但它也道出了BIOS大部分程序的实质:填写寄存器

有一个声音发出了不同意见,在BIOS程序里面,长期居住了一个另类,他的名字叫做MRC:内存参考代码。他的任务就是初始化内存,而他却管自己叫做Memory Training代码,主打的是调整时序和提高信号完整性。好高级的名字:Training,训练,似乎和人工智能有关?

当然不是,但和AI 模型的training之所以取名如此一样,都是为了通过实验来寻找可以解决问题的方案。Deep Learning的Training得到神经网络的权重矩阵;

而Memory Training得到一组对齐、补偿和参考电压参数,来平衡和对冲线路的差异和信号的噪声。

如果我们查看Intel的BIOS的代码,会发现MRC代码量很大。而它所以另类因为它是唯一与模拟信号和信号完整性打交道的地方,大量的采样、眼图代码让它与众不同。ARM和AMD则没有如此大量的Memory Training代码,这是为什么呢?内存不Training行不行?

内存为什么要Training?

内存I/O部分频率越来越高,如此高的频率让小小的一点误差都会被放大。熟悉主板布线的同学应该知道高速信号布线的时钟约束十分严苛,一组高速信号在主板上拐个弯,内圈和外圈的走线长度会产生差距,尽管很小,低速信号没关系,但高速信号时钟约束就达不到,必须在相反的方向拐回来补偿一下。

内存I/O频率上G的频率,让任何细小的误差都必须得到补偿,所以要在整个数据链路进行对齐和补偿。

一个比较完整的内存访问链路包括了很多部分:


从源头开始包括MC (内存控制器,memory Controller)、PHY(MC和PHY有些在一起,很多是分离设计来增加灵活性);从Pitch到pin,再从pin穿过主板到达slot的布线;slot过金手指通过fly-by或者直连到内存颗粒;内存颗粒中到内存Cell。

这么长的链条每个点都有可能引入时钟不同步和采样延迟的问题,所以要在各个部分分别对齐,让内存DIMM的上百条连线整齐划一。(DIMM是内存插槽的类型。 DIMM全称Dual-Inline-Memory-Modules,中文名叫双列直插式存储模块)

这其实是内存初始化对齐大步骤共十几个的末尾部分

  • 对齐和补偿要从芯片内部开始,当芯片出口好了,
  • 再对齐DCA、DCS(因为下面的步骤需要下command);
  • 再是jedec spec里面的Read Leveling,read DQS/DQ;
  • 再下来才是Write Leveling,和write DQS/DQ。
  • 为了信号好,还要匹配RON和ODT电阻,
  • 以及通过调整vRef来让眼图眼睛张开,并寻找安全和合适的采样点。
  • DDR5因为速度太高,还要加入DFE等均衡器来提高信号完整性:

这些步骤还不包括RDIMM要求的backside training和LRDIMM的 DB到颗粒的额外Training步骤,所以服务器内存初始化更加繁杂的多。

谁来进行Training?

这些步骤大部分是所有内存方案都要做的,包括焊在板子上的Solder Down方案和不同的内存控制器。关键是谁来执行这些步骤,谁来Training整个命令和数据链条。

有两种方案:In Band和OOB(Out Of Band)。大家经常在通信领域听到band概念,这里没有通信调制,还提band是怎么个意思呢?其实这种说法在silicon技术文档里面经常提到,这个所谓的band,是指CPU的计算资源,即CPU的Compute Bandwidth

  • In Band,就是CPU自己亲历亲为,自己完成任务;
  • OOB是说不占用CPU资源,让别家完成,比较典型的是由一个MCU完成,当然完成过程中和过后还需要和CPU通过mailbox等机制互相交互。

OOB training十分常见,比大家认为的常见更加常见。现在几乎所有高速通信线路都需要Training,包括但不限于PCIe、USB、SATA等等。而完成这个Training的并不是CPU,可以是MCU和DSP等。

好了,我们回到原来的问题:为什么Intel的MRC代码量很大,而ARM和AMD则没有如此大量的Memory Training代码?

相信同学们都已经有了答案。是的,Intel采用In Band training,而ARM和AMD采用OOB Training。

最后给大家留个思考题:这两种方式各有什么优缺点,为什么Intel采用In Band,而ARM和AMD采用OOB?

OOB的training sequencer集成在PHY里面,访问DRAM更快,所以training速度也快。

但由于第三方vendor的封闭性,开放的FW接口有限,所以不够灵活,后期兼容性调整比较费力。

arm总比intel先进,intel搞cpu时还没有mcu,后来积重难返,为了复用和兼容只好一条道走到黑。MRC是一段程序,程序执行需要ram,它是初始化ram的,ram未初始化之前是不能用的,先有鸡还是先有蛋,这代码写起来一定很纠结。
oob用mcu,mcu自带不用trainning的低速ram。

oob也只是让另外的固件去做初始化。不存在修代码更方便的说法吧。无论bios去做还是其他的去做,最后都要通过更新固件来更新内存training过程。

我看未必是技术上的问题。估计Intel的MC和PHY都是自己做的,用处理器training顺理成章,他自己也不做小mcu内核,更不太可能专门为training集成个第三方的小mcu;ARM,AMD系统,更有可能会采购第三方的MC/PHY,由IP设计方集成的方案自然更可靠和高效。

 CS训练模式 (CSTM)


 简介


CS训练模式是一种促进CS_n信号采样序列的环回的方法。在这种模式下,CK在运行,而CA信号保持在NOP命令编码状态。一旦启用了这个模式并选择了DRAM设备来主动采样和驱动反馈,DRAM将在CK的上升沿时对CS_n信号进行采样。每组四个CK上升沿的采样将被包含在逻辑计算中,以确定发送回主机的CSTM输出结果,通过DQ总线发送回主机。一旦开始采样,DRAM必须保持每4个tCK的连续采样组。当CS_n Sample[0]和Sample[2]的结果为逻辑0,而CS_n Sample[1]和Sample[3]的结果为逻辑1时,DRAM将在所有的DQ信号上驱动0。没有要求驱动任何时序信号,输出信号可以每4个tCK转换一次。
 CSTM的进入和退出
当主机发送带有CS训练模式进入操作码的MPC命令时,CS训练模式被启用。由于CS训练必须在建立CK和CS_n信号对齐之前进行,MPC命令会延伸到多个tCK周期,期间CS_n信号被断言。当DRAM处于此模式下时,命令仍然会被主动处理。在启用CS训练模式时,主机内存控制器只能发送NOP命令和MPC退出CS训练模式命令。发送其他命令可能会产生不可靠的结果。一旦DRAM启用了CS训练模式,DRAM开始在每个上升的CK边沿进行采样,4个采样组连续循环。根据采样值的不同,驱动DQ信号为高电平或低电平。在进入CS训练模式之前,DRAM不驱动DQ信号,并根据默认的RTT_PARK设置终端。启用CS训练模式后,DQ信号将开始根据CS训练模式的采样驱动输出值。一旦DQ信号由DRAM驱动,RTT_PARK终端将不再应用,类似于读操作。
要退出CS训练模式,必须发送一个MPC命令来禁用CS训练模式。由于在退出CS训练模式时CS_n和CK之间的时序关系已被理解,主机可以在MPC命令期间发送多周期CS_n断言或单个tCK断言。
CSTM操作
在CS训练模式下,CS_n值在所有CK上升沿上进行采样。每组连续的4个采样按照两个一组进行评估,然后在发送到DQ输出之前,将这两组合并进行逻辑或操作。确定输出的采样评估结果如表


在CS训练模式下,CA ODT像功能性操作一样被启用。根据功能设置(通过VrefCA命令),VrefCA被分组设置。
从在第四个CK上升沿(Sample[3])期间采样CS_n信号到将采样评估的输出驱动到DQ引脚上的稳定值之间的延迟被指定为tCSTM_Valid,如图83所示。 tCSTM_entry、tCSTM_exit和tCSTM_DQ_Window的详细信息也被说明。
展示了一个示例,其中DQ输出从逻辑0切换到逻辑1值,展示了最小的tCSTM_DQ_Window:
 

当主机使用CSTM对DDR5进行CS_n时序训练时,由于每个DRAM的内部时序变化不同,每个DRAM的CS_n采样时序可能会不同。因此,即使每个DRAM的CS设置/保持时间都是适当的,可能具有不同起始点的4-tCK CS_n采样窗口可能会显示不同,如图85所示。
主机应该基于对每个CS_n边沿的断言来训练CS_n时序,以覆盖多个DRAM,而无需退出CSTM。
 输出信号


哪些信号将传输CS训练模式环回采样评估的输出。这些值是异步驱动的,但可能会随着每个4tCK而切换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值