2020-12-22

常见DDR问题

介绍
也许微处理器中最重要的接口是DRAM控制器。它允许CPU以一种经济有效的方式访问大量内存。这些年来,随着我们从SDRAM到DDR3甚至更高版本的发展,总线速度变得更快,而电压却变得更低。这就给工程师带来了越来越大的压力,要求他们确保所有的设计都是正确的,否则就会遇到问题。有时问题很明显,外部存储器根本无法工作。也许更糟糕的情况是,事情似乎运转良好,但也有一些问题潜伏在极端的温度或过程中才显现出来。

本页旨在达到两个目的:

1.如果您遇到DDR问题,它会给出一些需要检查的想法,以确定根本原因。

2.更好的是,当你完成未来的设计时,它应该是一个需要避免的问题清单!

查找问题

快速简便的测试

1.使用Code Composer Studio和JTAG仿真器连接到线路板。

2.配置DDR接口。这可以通过CCS gel文件或某种引导加载程序软件(如u-boot或x-loader)来完成。本主题不打算介绍实际的寄存器配置。这个主题在包含计时电子表格等的其他文章中也有介绍。

3.打开内存窗口指向外部内存。通常,我改变显示的内存大小来计算实际内存总线的大小,例如,16位总线设置为16位值,32位总线设置为32位值。这使得将任何损坏的值与出现问题的特定通道或位进行匹配变得更加容易。因为我们不运行任何代码,所以尽可能使内存窗口变大,宽度为2的一些幂(例如,4、8、16 words/halfwords)。这使得以后更容易发现计时错误,因为您可以看到在执行写入操作时相邻行是否损坏,或者写入数据出现在其它的地方。

4.在内存窗口中支持启用/禁用数据缓存的部分,多次点击“刷新”(或者,点击“持续刷新”按钮,以便CCS不断更新窗口),务必确保未选中“数据缓存”复选框;我们希望看到DDR中的值,而不是缓存。如果你在窗口中看到内存变化,那么很明显是出了问题。

5.尝试在某个地方插入一个值,确保它“粘住”,并且不影响其他地址。这就是为什么一个大内存窗口是一个好主意-典型的ddr有2KB-8KB的页面大小(根据总线宽度可能更大);所以你能看到的越多越好。

以上方法并不是内存测试的全部方法。有更好的可用选项,如memtester等,以便进行更全面的测试。上面的测试是一个简单的方法,可以用来判断在启动一个新的电路板时,DDR接口是否有明显的问题。

完整试验程序

1.在低温高压下测试电路板。低温应仍在所有部件的规格范围内。“高电压”指的是与DDR相关的任何轨道可以(在合理范围内)调整。例如,在Sitara设备上,VDD_CORE rail为EMIF供电,VDDS_DDR rail用作总线电压。如果这些rail是可调的(比如通过PMIC),那么你应该为低温测试提高一点电压,以加强接口。

2.在高温和低压下测试电路板。高温应仍在所有部件的规格范围内。请记住,不同的部件可能对其温度有不同的规定。例如,TI-Sitara设备通常指定一个结温度,而DDR3设备通常指定一个外壳温度。同时请记住,对于许多DDR设备,刷新率需要在85C以上翻倍。对于电压,这又与影响DDR的电压有关,您只需要稍微降低一点(即仍然希望它们符合规范)。

对于上面的测试,您需要运行更全面的测试,比如memtester。
问题类型

位翻转

如果有一个位(或多个位)始终存在问题,这可能表明布局存在问题。再次检查有问题的特定位的跟踪长度,以确保其符合有关DQS和lane内其他位的倾斜要求。

缺少/零字节

如果有一个特定的字节正在“丢失”,也就是说整个字节显示为零,那么这可能表示DQS线的问题。

•特别是,您可以检查偏差报告,以确保DQS满足所有要求。您可能还希望查看信号完整性,可能是通过高质量范围和/或使用IBIS模型进行模拟。

•大多数较新的设备(例如支持DDR3的设备)能够调整DQS时间。如果您还没有执行调平/训练以确定最佳值,那么下一步将是一个很好的步骤,因为这将调整DQS时间。

数据变化无处不在!

这很可能是一个配置问题,即根据您的配置重新检查DDR数据表。您可能与bank数量、列地址位等不匹配。

这种不匹配的另一个特征是您看到重复的数据—例如,偏移量0处的数据与偏移量256处的数据匹配,1匹配257,2,匹配258。。。等等。如果重复模式之间的偏移量(本例中为256)小于DDR接口的行长度(即,(2^^#列地址)* bus_width_in_bytes(以字节为单位);那么这无疑是问题所在。如果偏移量大于或等于行长度;则问题可能仍然存在于此配置中,但也可能指向与较低地址位(A0、A1)有关的微妙的计时问题;后者将用于寻址DDR的相邻行。

极端温度下的故障

可能有多个参与者:

1.在高温下,确保您仍在DDR指定的温度范围内。在某些温度下,您需要将刷新率提高一倍(请参阅DDR数据手册)。

2.这可能与边缘时间/布局有关,因为计时会随温度变化。

3.这可能与PLL有关。验证是否观察到预期的DDR时钟频率。如果PLL的配置不符合规范(中频不符合规范等),或者PLL电源出现问题,极端温度会导致PLL失去锁定。

4.电源总是任何DDR问题的疑点。在故障情况下,验证所有相关电源是否在规范范围内(例如,PLL电源、CORE/EMIF电源、VDDS U DDR、VREF等)。

32位访问有效,但8位访问失败

如果您的DQS线路被交换,可能会发生这种情况。确保它们连接到适当的数据通道。

读取失败

通常由于信号完整性问题而导致读取失败。在DDR2和更高版本的内存中,经常会出现这种情况,即在处理器上没有正确配置片上On-Die终端(ODT)。需要为DDR和处理器配置ODT。DDR的配置在EMIF的SDRAM_CONFIG寄存器中指定。有一个单独的寄存器,可以是DDR PHY控制寄存器,有时也可以是来处理器配置ODT控制寄存器。

突发的第一次访问是垃圾

这通常表示与DQS时序相关的问题。在硬件级别,您可能需要检查DQS和数据信号的飞行时间,以确保偏差在规范范围内。

这也可能与DDR PHY的内部计时有关。DDR PHY控制寄存器的“read latency”字段可以增加1以提供更多的余量。旁注:这个“read latency”字段与PHY本身有关,与DDR规范中的JEDEC“read latency(RL)”无关。以下是有关此字段的其他信息:

•DDR_PHY_CTRL_1中的读取延迟是针对DDR PHY的。这不应与DDR设备数据表中的RL混淆。这两者都是不同的。

•DDR PHY的读取延迟用于将读取数据从DQS时钟域传输到其内部时钟域。DDR PHY有一个伪同步FIFO,它将读取的数据从DQS时钟域传输到其内部时钟域。DDR PHY读取延迟定义了在读取期间DQS时钟写入FIFO之后,DDR PHY在使用内部时钟读取FIFO之前应等待的时间。DDR PHY读取延迟数由系统的往返延迟定义(IO延迟+板延迟+CL)。

•因此,更改DDR PHY读取延迟不会影响DDR总线上观察到的任何波形。严格来说,这是从DQS域到DDR PHY时钟域的数据传输的一个内部时钟数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值