如何调试设计中的时钟域交汇问题

今日头条

1141人已加入

描述

本篇博文中的分析是根据客户真实问题撰写的,该客户发现即使时序已得到满足的情况下,硬件功能仍出现错误。最后发现,问题与时钟域交汇 (Clock Domain Crossing) 有关,因此,本篇博文介绍了如何调试设计中的时钟域交汇问题。

问题说明:

在此设计中,用户生成了比特流并将其用于器件编程,在硬件上进行测试时,用户发现少量时钟域上无法获得期望的功能。

用户对行为仿真和实现后仿真进行了测试,发现信号上可得到正确的结果。

同时,这些用户未发现任何种类的时序违例,所有值均为正值,如“设计时序汇总 (Design Timing Summary)” 中所示。

时钟域

注:您可使用以下选项自行检查设计的时序汇总信息:

■ 在 Vivado GUI 中,转至“报告 (Reports)”选项卡 ->“时序 (Timing)”->“时序汇总报告 (Report Timing Summary)”

■运行以下 Tcl 命令:

report_timing_summary -file /timingreport.txt

根本原因:

硬件功能问题背后可能存在多种原因。

包括缺少时钟域交汇 (CDC) 同步器、时钟拓扑欠优化、时钟结构中使用了组合逻辑、亚稳态以及经典的未约束路径问题。

要检查与时钟/架构/CDC 等相关的警告/严重警告,可使用方法论报告。

要在 Vivado GUI 中打开方法论报告,请转至“报告 (Report)”选项卡 ->“方法论报告 (Report Methodology)”,或者在 Tcl 控制台 (Tcl console) 中,使用 report_methodology。

报告打开后,您可能会看到几条与设计相关的警告和严重警告,需您进行检查。

在此示例中,报告中显示了几条警告,这些警告与 CDC 相关的错误实践有关(这些警告的 ID 为 Timing-9 和 Timing-10),如下所示。

时钟域

这些警告声称工具经由约束语句(例如,set_false_path 或 set_clock_groups)的使用,在 2 个时钟域之间检测到一个或多个异步时钟域交汇。

但它在捕获时钟端未找到任何双寄存器逻辑同步器。因此,它建议用户运行 report_CDC 并对这些 CDC 路径执行进一步分析。

要在 Vivado GUI 中打开 CDC 报告,请转至“报告 (Report)”选项卡 -> “时序 (Timing)”->“CDC 报告 (Report CDC)”。或者,您可在 Tcl 控制台中运行 report_cdc 命令。

请参阅 (UG906) 以获取有关阅读此 CDC 报告的详细指南。

CDC 报告显示在发生硬件功能错误的时钟域内存在不安全的未知 CDC 端点(如下所示)。请参阅 (UG906) 以了解此报告命名法。

时钟域

如何解决这些警告/严重警告?

1) (UG906)包含有关这些警告以及其它时序方法论检查的详细说明。请详查其中提供的示例,以理解每一项警告及其根本原因。您可通过添加适当的同步电路(通过修改 RTL 或者使用赛灵思可参数化宏 (XPM))来相应改善设计。

2) 您可能还需要相应添加或修改约束,或者在 RTL 源代码中为 CDC 端点添加 ASYNC_REG 属性。(您还可参阅(UG906)以便详细了解 CDC 拓扑结构。)

3) 对于伪静态寄存器接口,最好将 CDC 接口豁免,而不是对其进行过度设计。

如需获取有关豁免以及如何创建豁免的更多信息,请参阅 (UG906)。

注:伪静态 CDC 寄存器接口为包含近似静态的配置寄存器的 CDC 路径。这些路径初始化后可能不再改变,或者可能仅改变 1 次,因此用户几乎可以将其看作是静态的。

结论

对 CDC 路径完成必要修改后,客户得以成功通过硬件的功能测试。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分