本篇博文中的分析是根据真实客户问题撰写的,该客户发现硬件中存在 DDR4 校准错误,不同板以及不同构建 (build) 之间出现的故障并不一致。
本篇博文旨在演示用于缩小根本原因范围以及修复此问题的部分调试技巧。
最后,问题是由于用户 XDC set_false_path 约束覆盖 MIG IP 约束所导致的,错误使用 set_false_paths 的危险性由此可见一斑。
这是使用方法论报告系列博文的第 3 部分。如需阅读本系列中的其他博文,请点击
问题说明:
用户的设计使用的是 Vivado 和 SDx 流程。此设计包含 2 个 DDR4 64 位接口,运行速度为 2000 Mbps。此设计已达成时序收敛,但在某一个 DDR4 接口或者有时在 2 个接口上都会观察到校准失败。
硬件故障与构建有关:
■成功的构建在多个板上都成功完成
■而失败的构建则在多个板上都失败
■大部分情况下其中一个接口或者 2 个接口都会发生故障
■失败的比特因构建而不同
调试方法:
失败特征表明存在时序约束或 CDC 问题,因此我们使用以下步骤进行调试。
1) 添加 ILA 并重新运行设计实现。现在,故障消失了,或者转移到其它比特。
2) 使用增量实现流程,以保留失败特征。
3) 向 ILA 添加流水线阶段以简化时序收敛。此测试的目标是在失败的阶段中寻找期望的模式,以便缩小失败的比特的范围。
4) 尝试 Pblock 以使 MIG IP 的布局保持彼此接近。在此情况下,失败特征并未发生改变:
■成功完成时序收敛的接口在硬件中失败
■未完成时序收敛的接口在硬件中则能成功完成时序收敛
根据以上结果可见,问题可能在于某些 MIG 约束被用户或者被 Vivado 流程所覆盖。
下一步是复查用户的 XDC 约束。
执行此操作时,我们注意到时钟间的 false_paths 约束是由用户设置的。
现在,运行以下建议的报告组合。关键的报告是 report_methodology 和 report_cdc。
■Report CDC
■Report Methodology
■Report Exception
■Report MIG set_max_delay(用于确认这些约束是否被忽略)
根本原因分析:
MIG set_max_delay 路径并未被忽略。
report_timing 报告了最大延迟
我们在部分 MIG 路径(互连结构 (fabric) 到 PHY)上发现了以下 CDC 严重警告。
现在,将这些路径与 MIG 设计示例中的示例进行比对,这些示例是使用 IP integrator 流程创建的,且已安全完成时序收敛。
根据发现的结果,我们移除了用户添加的所有 false_paths 约束,并在未重新实现整个设计的情况下重新报告时序。
报告显示针对 2 个 DDR4_rx/tx,在最差情况下存在超过 3ns 的时序收敛失败,如下所示。
我们可以利用时序汇总报告 (Report Timing Summary) 的限定机制仅对 MIG 接口进行集中分析。
现在,我们发现用户添加的 false_paths 约束导致从互连结构 (fabric) 到 PHY 路径被忽略。
解决办法:
■从目标 XDC 移除上述 false_paths 并重新运行设计实现。
■设计重新恢复正常时序。
■现在,CDC 报告显示先前忽略的路径已安全达成时序收敛。
■测试硬件上的比特文件时,2 个 DDR4 接口都一致通过校准。
结论:
请务必谨慎处理 set_false_path 约束。
此约束很容易导致必须达成时序收敛的路径被忽略。在此类约束中使用通配符时或者在整个时钟域之间设置 false_paths 时,除非您确定这些时钟域之间没有任何路径需达成时序收敛,否则请务必谨慎操作。操作错误可能导致硬件故障,并导致调试流程难以持续且耗时冗长。
面临在时序无错误的设计上遇到硬件故障的情况时,可在 Vivado 中运行几项检查。下列检查应始终运行,尤其是在布局布线之后。仅仅确认时序无错是不够的,您仍需要完成这些检查:
1) 时钟交互报告 (Report Clock Interaction):
提供有关设计中所有时钟的信息。
2) 方法论报告 (Report Methodology)
如果观察到不安全的路径或用户忽略的路径,则可使用 Report Methodology 并集中解决严重警告。
3) CDC 报告 (Report CDC)
在此示例中,Report CDC 帮助发现了由于用户约束导致被忽略的关键路径。
将这些结果与 MIG 设计示例进行比对有助于从设计中存在的数百万条路径中发现可疑路径。
使用限定机制可将分析范围缩小到选定的模块。
4) 例外报告 (Report exception):
此报告可提供有关由于时序例外(如果有)而被忽略的路径的信息,例如,set_false_paths 或 set_clock_groups。
一些小技巧:
对于超大型设计,解析数百万条路径是非常困难且耗时的。
为了加速周转,可使用以下命令缩小报告范围:
要在原理图视图中高亮实例,请执行以下操作:
report_cdc -cells [get_selected_objects] -details -name report_timing_summary -cells [get_selected_objects ] -name
要检查是否已忽略 set_max delay,请执行以下操作:
report_timing -from [get_pins */*/*/*/slave_rdy_cptd_sclk_reg/C] -to [get_pins */*/*/*/u_slave_rdy_cptd_sync/SYNC[*].sync_reg_reg[0]/D] -name t3
可从 MIG XDC 找到以上时序路径。“-name”开关将在 GUI 中生成报告。
审核编辑:汤梓红
-
DDR4
+关注
关注
12文章
321浏览量
40783 -
时序
+关注
关注
5文章
387浏览量
37317 -
校准
+关注
关注
1文章
154浏览量
21863 -
Vivado
+关注
关注
19文章
812浏览量
66470
发布评论请先 登录
相关推荐
评论