PS DRAM接口的函数式编程模型(二)

news2024/11/17 21:21:46

DRAM Input Impedance (ODT) Calibration(DRAM输入阻抗校准)

ODT技术通过在DRAM内部集成终结电阻,实现对信号线的终端匹配。当DRAM作为接收器时,ODT电阻能够吸收信号线上的反射波,防止信号反射对后续信号造成影响,从而提高信号质量。ODT的启用与禁用由主控芯片控制,在DRAM模组工作时通常关闭ODT,而对于不工作的DRAM模组则进行终结操作。

ODT值的设置

  • DDR3/DDR3L设备:ODT值通过模式寄存器MR1进行控制。可以将其禁用,或设置为以下值之一:120Ω、60Ω或40Ω。这些值的选择取决于系统的具体需求,以及DRAM与控制器之间的信号完整性要求。

  • DDR2设备:在DDR2设备中,ODT值通过扩展模式寄存器EMR进行控制。同样可以将其禁用,或设置为75Ω、150Ω或50Ω之一。与DDR3/DDR3L类似,ODT值的选择也是基于信号完整性的考虑。

DDR2和DDR3/DDR3L设备都配备了一个专用的ODT输入引脚。这个引脚在写操作期间用于启用ODT,而在其他时间则禁用ODT。通过这种方式,系统可以灵活地控制ODT的启用与禁用,以适应不同的操作场景。

校准过程

DRAM Input Impedance (ODT) Calibration通常是在系统初始化或外部环境条件发生显著变化时进行的。校准过程涉及调整DRAM内部的终结电阻值,以确保其与传输系统的阻抗匹配。这通常通过发送特定的校准命令给DRAM来实现,DRAM会根据这些命令调整其内部的电阻网络,以达到预期的阻抗值。

DRAM Output Impedance (RON) Calibration(DRAM输出阻抗校准)

RON代表DRAM输出驱动逻辑的内部电阻,相当于DRAM的输出阻抗。在DRAM与控制器之间的点到点传输系统中,如果DRAM的输入输出阻抗与控制器端以及传输线不匹配,信号传输的质量会下降。因此,通过调整RON的阻值,可以确保DRAM的输出阻抗与传输系统的阻抗相匹配,从而提高信号完整性。

RON值的设置

  • DDR2设备:在DDR2设备中,RON的值通过模式寄存器EMR进行控制,可以设置为全强度(full strength)或降低强度(reduced strength)。具体值取决于DRAM的设计和制造商的规范。

  • DDR3/DDR3L设备:在DDR3/DDR3L设备中,RON的值通过模式寄存器MR1进行控制,可以设置为40Ω或35Ω等固定值。这些值的选择同样取决于系统的具体需求和信号完整性要求。

  • LPDDR2设备:在LPDDR2设备中,RON的值通过模式寄存器MR3进行控制,可以在34Ω到120Ω的范围内设置(默认值为40Ω)。这种可调范围提供了更大的灵活性,以适应不同的应用场景和性能需求。

校准过程

在DDR3/DDR3L和LPDDR2设备中,RON的校准通常通过发送ZQCL(上电初始化时的ZQ校正)和ZQCS(正常工作时的周期性ZQ校正)命令来实现。这些命令由内存控制器发出,DRAM接收到命令后执行相应的校准流程,以调整RON的阻值。

  • ZQCL命令:用于上电初始化时的ZQ校正。在上电后,DRAM需要从整个校准窗口中找到MRx中设置的RON值,所需时间相对较长。ZQCL命令确保DRAM在初始化阶段能够正确设置RON的阻值。

  • ZQCS命令:用于正常工作时的周期性ZQ校正。由于外部环境和电压条件可能发生变化,DRAM需要定期校正RON的阻值以确保信号传输质量。ZQCS命令能够在较短的时间内完成校准过程,减少对系统性能的影响。

注意事项
  • 在发送ZQCL/ZQCS命令前,DRAM的所有Bank需要处于预充电状态,并且在校准期间不能发送任何命令或数据。

  • ZQCL和ZQCS命令的执行时间和条件可能因DRAM类型和制造商而异,具体细节请参考DRAM设备的数据手册或JEDEC规范。

  • DDR2设备通常不支持外部校准程序(如OCD),因此RON的校准可能依赖于内部的默认设置或制造商的特定调整方法。

DRAM Training

旨在通过一系列步骤来优化DRAM的读写性能,确保数据信号在DRAM上正确对齐,并计算出DRAM的正确读写延迟。DRAM Training通常包括Write Leveling(写均衡)、Read DQS Gate Training(读DQS门控训练)和Read Data Eye Training(读数据眼图训练)三个步骤,但这些步骤并非所有DRAM类型都支持。

启用Training步骤

当启用某个训练步骤时,用户需要提供一个初始延迟值,这个值将作为自动训练过程的起点。这个初始值是对系统板上预期延迟或偏差的一个粗略估计,但通常会减去一定的裕量以确保训练的准确性。

禁用训练Training步骤

如果某个训练步骤被禁用,用户则需要手动提供一个延迟值来补偿主板的延迟或偏差。这通常是因为:

  • DRAM类型不支持:例如,DDR2和LPDDR2不支持写平衡(Write Leveling)。
  • 已知的低延迟和稳定的操作条件:在这种情况下,系统的延迟和偏差非常稳定,无需进行动态训练。
  • 已知延迟设置:如果之前的训练事件已经确定了合适的延迟设置,那么在相同或类似条件下,这些设置可以被重复使用。
Training时间

Training时间通常很短,对于500 MHz的DRAM时钟,训练时间大约在1-2毫秒。

数据信号连接

为了确保Training成功,即使在使用ECC(错误检查和纠正)时,也需要将所有数据信号连接到DRAM设备。这是因为ECC虽然能增加数据的可靠性,但它本身并不改变数据信号的物理连接需求。在16位数据、10位ECC的配置中,所有的26条线路都需要正确连接到DRAM设备。

写均衡

目标:对齐CLK和DQS,以满足DRAM规范的要求。

过程:由于DDR3/DDR3L系统推荐的飞线拓扑结构,时钟(CLK)相对于写DQS在DRAM输入处会有延迟。PHY会延迟DQS信号以匹配板级偏斜。通过DRAM异步反馈CLK(用DQS的上升沿采样),控制器反复延迟DQS直到检测到0到1的转换。

适用范围:DDR3/DDR3L

注意事项

  • DDRC支持写均衡作为初始化过程的一部分。
  • 可选禁用写均衡并通过寄存器编程预定延迟值(DDR2和LPDDR2不支持写均衡)。
  • 成功训练依赖于提供近似的DQS到CLK延迟最小值,该值应基于系统板布局和封装延迟信息来估算。

读DQS门控训练

目标:调整有效的读DQS窗口,确保读数据能够正确捕获。

期望效果:名义上,这个窗口应该围绕4个(在BL=8时)有效的DQS脉冲。

最终比例:基于板级延迟的2倍,如果时钟是反向的,则额外增加0.5个周期。

初始比例:最终比例减去0.125个周期(0x20单位),但不能小于0。

适用范围:DDR3/DDR3L, LPDDR2

过程:由PHY执行,以识别读DQS的有效间隔并捕获读数据。需要将对齐的读窗口与读数据突发对齐,并排除前导码期间以及DQS信号被三态或PHY驱动的任何时期。

注意事项

  • DDRC支持此训练作为初始化过程的一部分。
  • 可选禁用训练并通过寄存器编程预定延迟值(DDR2必需)。
  • 对于LPDDR2,推荐分步训练偶数和奇数字节通道,并在DRAM控制器初始化时应用结果,禁用自动训练。
  • 成功训练依赖于提供近似的SoC到DRAM板级延迟最小值。

读数据眼训练

目标:调整RD DQS相对于RD数据的时序,确保DQS边沿位于数据眼的中间。

最终比例:名义上的理想值是0.25个周期,因为DRAM输出时DQ和DQS是对齐的。

初始比例:无需设置。

适用范围:DDR3/DDR3L, LPDDR2

过程:通过DDR3/DDR3L的MR3寄存器中的MPR位字段启用。DRAM输出一串01010101的数据模式,内存控制器根据这个已知模式调整内部DQS延迟。

注意事项

  • DDRC支持此训练作为初始化过程的一部分。
  • 可选禁用训练并通过寄存器编程预定延迟值(DDR2必需)。
  • 对于DDR3/DDR3L,如果初始比例计算出的值小于0,则设置为0;如果偏斜太小,则反转时钟。

Write Data Eye Adjustment(写数据眼调整

虽然DDR控制器通常不支持写数据眼的自动训练(即自动调整写数据相对于写DQS(数据选通信号)的对齐),但手动对齐是可行的。写数据眼是指在DRAM输入端,写数据信号相对于写DQS信号的有效窗口,这个窗口的大小和位置对于确保数据的正确传输至关重要。

理论上,写DQS的边沿应该在写数据眼的中间位置与写数据对齐。DDRC的物理层提供了一个用户可编程的相位偏移值,用于调整数据相对于DQS的相位。默认情况下,这个相位偏移值被设置为90度,这在DQ和DQS信号在板上具有相同延迟和负载的均衡设计中是足够的。

然而,在实际应用中,由于PCB布局、走线长度、信号负载等因素的差异,DQ和DQS信号可能不会完全平衡。在这种情况下,用户需要提供一个不同的相位偏移值来优化写数据眼的位置。基于工艺、电压和温度的表征结果,推荐使用的相位偏移值通常会略小于90度。

Vivado Design Suite可以自动提供这个优化后的相位偏移值,并将其包含在第一阶段引导加载程序(FSBL)或其他用户代码中。这样,在系统启动时,就可以自动应用这个优化值,从而确保写数据眼在DRAM输入端得到最佳的对齐,进而提高数据传输的可靠性和效率。

总之,虽然DDRC不支持写数据眼的自动训练,但用户可以通过手动调整数据相对于DQS的相位偏移值来优化写数据眼的位置,从而提高系统的整体性能。

自动DRAM Training的替代方案

在DRAM的自动训练因某些原因未能成功时,可以采用替代的校准方案来确保数据信号的准确对齐和系统的稳定运行。

可以通过执行简单的内存写读比较测试来检测训练失败。由于每个字节通道的训练都是独立完成的,因此内存测试应该独立检查每个数据字节。如果训练失败,这里提出了两种可能的解决方案:半自动和手动训练方法。随着该方法变得更加手动,训练时间也会增加。因此,建议遵循以下顺序:

以下是在自动训练失败时,可以采用的两种主要替代方法:半自动训练和手动训练。每种方法都有其适用场景和优缺点,因此建议按照以下顺序尝试:

  1. 尝试自动训练并验证基于板载测量的初始值
  2. 如果自动训练失败,尝试半自动训练
  3. 如果半自动训练也失败,使用手动训练

自动训练

标准训练程序如上所述。

初始化和训练的估计时间为1-2ms。

半自动训练

在DRAM自动训练失败的情况下,半自动训练方法是一个有效的替代方案,特别是当系统/板载延迟已知,但工艺、电压和温度(PVT)的时序不确定性导致自动训练失败时。半自动训练的关键在于利用已知的延迟参数作为起点,并通过迭代测试来找到最优的训练参数。

半自动训练方法步骤
  1. 确定延迟参数范围
    • 已知名义延迟值T,以及由PVT变化引起的最大偏差delta。
    • 将范围(T-delta, T+delta)分成n个部分,从而为每个延迟参数创建(n+1)个可能的值。
  2. 执行迭代训练
    • 对每个延迟参数的每个可能值组合(共有(n+1)^2种组合),执行自动训练程序。
    • 每次训练后,都进行内存测试(如写-读-比较测试)以验证训练结果。
  3. 选择最佳参数
    • 在所有成功的测试区域中,选择位于中心的参数值作为最终的训练参数。
    • 注意,每个数据字节通道(或称为数据切片)都有自己独立的参数,并应在内存测试中独立测试。
时间估算
  • 单次训练迭代时间:大约1-2毫秒(用于初始化和训练),加上内存测试的时间。
  • 内存测试时间:假设一个简单的1000字读写测试,在500 MHz下,平均访问时间为30个周期,则测试时间约为60,000个周期,即约0.12毫秒。
  • 总时间:对于25次迭代的半自动训练,总时间可能长达25-50毫秒。
注意事项
  • 半自动训练方法虽然比完全手动训练节省时间,但仍需要一定的技术专长和耐心来正确执行。
  • 迭代次数n的选择取决于PVT变化的范围和预期的精度。n越大,找到最优参数的可能性越高,但训练时间也越长。
  • 在实际应用中,可能需要根据具体情况调整内存测试的大小和复杂度,以确保测试的全面性和准确性。

在自动训练和传统的半自动训练方法都未能成功时,推荐采用多组半自动训练方法。这种方法结合了自动训练的效率和手动调整的灵活性,通过改变未被自动训练调整的两个延迟元素(写数据延迟和控制路径延迟)的值,来进一步探索最佳的训练参数组合。

DDR PHY延迟元素概述

DDR PHY包含五个可调整的延迟元素,其中四个是每个字节通道特有的(因此,实际上有17个独特的可调整延迟元素)。自动训练过程仅调整其中的三个元素:写DQS延迟、读DQS延迟和读数据延迟。另外两个元素——写数据延迟和控制路径延迟——的值来自可编程寄存器,且这些值在自动训练过程中不会被调整。

多组半自动训练

对于写数据延迟和控制路径延迟,根据系统的PVT变化和设计规范,定义合理的延迟值范围。

在这个范围内选择多个不同的延迟值组合,每个组合构成一组训练参数。

对每组训练参数,执行半自动训练过程。这包括在扩大的延迟范围内调整自动训练所涵盖的三个元素,并使用当前组的写数据延迟和控制路径延迟值。每次训练后,进行内存测试以验证训练结果。

根据内存测试的结果,选择表现出最佳性能的训练参数组合。如果某组训练参数未能通过测试,可以进一步细分该组的延迟值范围,或尝试其他组合。

重复上述步骤,直到找到满足性能要求的最佳训练参数组合。

优点

与完全手动训练相比,多组半自动训练方法显著减少了需要进行的实验次数。通过调整未被自动训练覆盖的延迟元素,能够探索更广泛的参数空间。结合了自动训练的准确性和手动调整的精细控制,提高了找到最佳训练参数组合的可能性。

注意事项

尽管比完全手动训练更快,但多组半自动训练仍然需要一定的时间来执行和验证每个训练组。执行此方法需要深入理解DDR PHY的工作原理和延迟元素的影响。某些硬件设计可能限制了可调整延迟元素的范围和精度,这可能会影响训练结果。

手动训练方法

是在完全不了解系统状态或半自动训练方法失败时的一种有效手段。该方法的核心在于完全禁用自动训练功能,并手动遍历所有延迟参数在其整个范围内的所有可能值,以找到最佳的配置。以下是手动训练方法的基本步骤:

  1. 禁用自动训练:确保DDR控制器的自动训练功能被禁用,以便能够手动控制延迟参数。

  2. 参数扫描

    • 初始化DDR控制器(DDRC),确保训练功能被禁用。
    • 对每个延迟参数(如写DQS延迟、读DQS延迟、读数据延迟、写数据延迟和控制路径延迟),在其整个可能范围内进行手动扫描。建议的每次迭代延迟增量为时钟周期的1/32,因此每个参数覆盖一个时钟周期延迟范围需要32次迭代。
  3. 内存测试:在每次延迟参数设置后,执行内存测试(如写-读-比较测试)以验证当前参数配置的性能。

  4. 记录结果:使用一个记分板来记录每次迭代的结果,包括成功或失败,以及可能的性能指标(如读写延迟、错误率等)。

  5. 寻找最佳点:根据测试结果,找到每个数据通道(或字节通道)的最佳延迟参数值。这些最佳值可能是各自通道的中点值,但也可能根据具体情况而有所不同。

  6. 优化:如果必要,可以根据测试结果进一步优化延迟参数,直到找到满足性能要求的最佳配置。

时间估算
  • 单次迭代时间:大约为700微秒(DDR3/DDR3L的DRAM重置/初始化过程需要500微秒),加上内存测试的时间,总共约为0.8毫秒。
  • 总时间:简化假设下,如果搜索范围较小,迭代次数可能较少;但在最坏情况下,如果每个参数都需要遍历整个范围(即每个参数32次迭代),并且考虑到多个参数和多个数据通道,迭代次数可能达到数千次,总时间可能长达数秒甚至更长。
注意事项
  • 时间成本:手动训练过程可能需要较长时间,特别是当参数范围较大或需要优化多个参数时。
  • 精度与复杂性:较高的迭代密度(如每次迭代1/32时钟周期)可以提高训练精度,但也会显著增加时间成本。
  • 测试全面性:确保内存测试能够全面覆盖可能的故障情况,以便准确评估每种参数配置的性能。

表10-9总结了涉及手动训练的寄存器值,这些值均以时钟周期的1/256为单位(即256个单位等于1个时钟周期,8个单位等于时钟周期的1/32)。此表应包含每个可调整延迟参数的寄存器地址、初始值、最大值、最小值以及步长(增量)等信息。不过,请注意,具体的寄存器值和范围将取决于具体的DDR控制器和硬件设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

职业院校云计算实训室建设方案全景剖析

在信息化社会的今天,云计算作为一项关键技术,正在迅速改变着教育和培训的方式。本文旨在探讨如何通过"职业院校云计算实训室建设方案",为学生提供一个现代化、高效的学习和研究环境,以适应云计算技术的发展和市场需求。…

cpp depends源码有向图分析工具

使用 cpp-dependencies.exe --dir ./example --output image.dot 输出 参考 GitHub - tomtom-international/cpp-dependencies: Tool to check C #include dependencies (dependency graphs created in .dot format) 创作不易,小小的支持一下吧!

06-图3 六度空间(C)

这个很好想,尤其是经过图的连通集,所以这一次我才有之前写的代码为主体以邻接表的方法构建了方法一,至于运用 邻接矩阵,可以查看我之前的图的连通集这一方案,稍微改装,便解决这一问题了。 “六度空间”理论…

【数据结构】PTA 带头结点的链式表操作集 C语言

本题要求实现带头结点的链式表操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中List结构定义如下: typedef struc…

Prism框架

使用 NuGet包下载 -- > Prism.Unity 框架中的数据与行为 BindableBase 在ViewModel中需要继承此类 通知属性的三种方式: public class MainViewModel : BindableBase {// 基本的通知属性private string _value;public string Value{get { return _value; }s…

SOMEIP_ETS_049: echoUTF8DYNAMIC_length_too_long_for_String

测试目的: 验证设备(DUT)是否能够正确处理一个长度大于实际字符串长度的echoUTF8DYNAMIC字符串,并返回错误消息。 描述 本测试用例旨在检查DUT在接收到一个长度超出实际字符串长度的UTF8DYNAMIC字符串的SOME/IP消息时&#xff…

Vue的生命周期理解,简单易理解

什么是Vue的生命周期 简单来说,Vue的生命周期就是vue实例从创建到销毁的一个过程,即从创建–>初始化数据–>编译模板–>挂载Dom -->渲染、更新 -->渲染–>销毁 的一系列过程。 Vue的生命周期有哪些阶段 Vue的生命周期,主…

使用 preloadRouteComponents 提升 Nuxt 应用的性能

title: 使用 preloadRouteComponents 提升 Nuxt 应用的性能 date: 2024/8/19 updated: 2024/8/19 author: cmdragon excerpt: preloadRouteComponents 是提升 Nuxt 应用性能的一个简单而有效的工具。通过在适当的时候预加载路由组件,你可以为用户提供更快速、更流…

LangGPT结构化提示词

LangGPT是Language For GPT-like LLMs的简称,中文名为结构化提示词,LangGPT是一个帮助你编写高质量提示词的工具,理论基础是我们提出的一套模块化、标准化的提斯提编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱,为…

传统园区转型升级智慧园区的路径探讨

随着科技的快速发展和经济结构的转型升级,传统园区面临着转型的迫切需求。智慧园区以其高效、绿色、智能的特点,成为了未来园区发展的方向。本文将从几个关键方面探讨传统园区如何实现向智慧园区的转型升级。 一、智慧园区的概念与特点 智慧园区是基于…

懂管理的网安人才,为什么越来越受企业青睐?

说实话,要是几年前有人跟我说网安人才还得懂管理,我可能会嗤之以鼻。网安不就是搞技术的吗?整天跟漏洞、防火墙、IDS打交道,为啥又扯到管理了? 但是仔细一想,好像时代确实变了。 由于现在的就业形势紧迫&a…

Gemma Chat【所有人都能本地部署的对话AI】

简介 Gemma Chat 是一个聊天应用,专注于实现高效的消息交互。这个项目使用 Docker 来简化部署流程gemma_chat,并且源代码托管在 GitHubGitHub - Park-C159/gemma_chat,方便开发者下载、修改和贡献。 技术栈和特色 Gemma Chat 的开发选用了 …

\r和\n不同系统的区别

文章目录 一、\r和\n的来源1、回车和换行来源2、关于字符2.1、可显示字符2.2、不可显示字符(控制字符) 二、\n和\r差异1、不同操作系统中的回车换行2、影响 一、\r和\n的来源 1、回车和换行来源 在最初的电传打印机时代,每打完一行需要换行的…

识别出未知的“FT232R USB UART”设备

使用串口调试助手测试485,笔记本电脑不识别端口,查看设备管理器后提示 识别出未知的“FT232R USB UART”设备 跳转FTDI官网下载驱动 (https://ftdichip.com/drivers/d2xx-drivers/) 继续往下拉 下载后安装即可正常使用

C++实战项目:日期计算器的实现

前言 Hello,小伙伴们,经过了前面对C基础知识的学习,我们今天就着重运用一下前面学习到的知识,来通过类和对象以及运算符重载的部分知识来实现,来完成我们的日期计算器。 日期计算器,顾名思义,…

C++入门基础知识21

成长路上不孤单😊【14后小学生一枚,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊】 关于【C 数据类型】 【!&#xff…

工业超高频读写器在工业领域的实际应用

工业级超高频读写器在多个领域具有广泛的应用,主要得益于其远距离读取、群读、穿透识别以及高数据传输速率等特性。以下是对其应用的具体分析: 一、物流仓储 货物追踪与管理:在物流仓储领域,工业级超高频读写器能够识别并跟踪货…

Python FlashText库:高效的关键词搜索和替换

更多Python学习内容:ipengtao.com 在文本处理中,关键词搜索和替换是常见且重要的任务。传统的正则表达式在处理大量文本时可能效率不高,而Python的FlashText库提供了一种高效的关键词搜索和替换方法,尤其适合处理海量数据。本文将…

746. 使用最小花费爬楼梯-dp3

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/min-cost-climbing-stairs/description/从左向右填dp表 class Solutio…

机器学习带来的新见解挑战星系形成理论

最近的研究发现,处于高密度环境中的星系往往比孤立的星系大得多,这对现有的星系形成理论提出了挑战。这一发现得益于机器学习和来自数百万个星系的大量数据。这些发现提出了关于暗物质和星系合并在塑造宇宙中的作用的新问题。 密集环境中的星系与孤立环境…