使用静态验证进行FPGA设计的高级跨时钟域检查
📑 目录
使用静态验证进行FPGA设计的高级跨时钟域检查
会议: SNUG 2015
作者: Chen Qingfu (HuaWei 华为), Tammy Deng (Synopsys)
页数: 7
源文件: SNUG_TPC_Spyglass_Poppen_Advanced_Clock_Domain_Crossing_Checks_for_FPGA_Design_paper.pdf
Page 1
使用静态验证进行FPGA设计的高级跨时钟域检查
Chen Qingfu, Tammy Deng
HuaWei Inc., Synopsys Inc. 深圳, 中国 www.huawei.com www.synopsys.com
摘要
随着FPGA设计中功能和结构复杂度的增加,引入了各种时钟。与多时钟域时钟 Clock Domain交叉相关的问题需要被正确检查。在本文中,我们介绍了一种使用Synopsys VC CDC静态验证解决方案在设计阶段检查跨时钟域 CDC的方案。本文还展示了一个案例研究,涉及静态验证流程、调试方法、过滤和报告方案,以快速缩小潜在的CDC问题范围,并帮助设计人员定位根本原因。
关键词:CDC (Clock Domain Crossing)
Page 2
目录
1. 引言 2. 挑战 3. CDC验证流程 4. VC CDC设置 5. 报告设计中的CDC问题 6. 调试CDC违规 7. 结论 8. 参考文献
图表
图1:VC CDC流程 图2:CDC设置脚本 图3:CDC报告摘要 图4:CDC结构报告 图5:发散原理图问题的GUI 图6:Verdi追踪问题引脚
Page 3
1. 引言
随着FPGA设计中功能和结构复杂度的增加,引入了各种时钟。与跨时钟域 CDC相关的问题需要被正确检查。传统的仿真验证技术不足以发现这些问题。部分CDC相关问题列举如下:
- 由于触发器 Flip-Flop的建立和保持时间违规导致的亚稳态 Metastability问题 - 由于亚稳态信号发散导致的功能问题 - 由于异步复位 Asynchronous Reset的撤销沿违反复位恢复时间导致的触发器亚稳态问题
在本文中,我们介绍了Synopsys VC CDC静态验证解决方案,用于在设计阶段检查跨时钟域 CDC相关问题。本文还展示了一个案例研究,涉及静态验证流程、调试方法、过滤和报告方案,以快速缩小潜在的CDC问题范围,并帮助设计人员定位根本原因。
2. 挑战
我们在之前的CDC验证方案中面临一些挑战,而VC CDC能够很好地处理这些问题。
首先,我们无法确定设计中是否存在异步复位 Asynchronous Reset、再收敛 Reconvergence和信号发散 Divergence问题。VC CDC具有捕获这些问题的能力。
其次,我们对如何缩小潜在CDC问题范围并快速定位根本原因感到困扰。VC CDC有能力帮助我们通过过滤缩小这些潜在CDC问题的范围,并使用定制的GUI、原理图和Verdi nTrace快速定位根本原因。
3. CDC验证流程
在我们的设计中,我们没有SDC 时序约束文件。VC CDC以RTL文件作为其输入。VC CDC将传播时钟并基于域分组识别CDC路径。它具有全面的同步器 Synchronizer检测机制,会识别带有适当同步器的跨域,并报告同步器缺失或使用不当的违规情况。这里的所有步骤都是离散和交互式的,意味着在每个步骤结束时,我们可以获得该步骤的报告。
一旦跨时钟域 CDC同步器问题得到解决,将检查高级CDC问题,如信号发散 Divergence、再收敛 Reconvergence和复位验证。所有违规将被转储到一个数据库中,使用Tcl接口(report)可以查询并生成标准或自定义报告。
Page 4
GUI和原理图专为CDC需求定制,包括对象的时钟域着色、借助原理图中文本框定位器标注各种重要对象、在原理图中精确定位CDC问题以进行根本原因分析。以及通过Verdi nWave查看相关代码。
图1:VC CDC流程
4. VC CDC设置
设置CDC验证流程,首先指定时钟列表非常重要。在我们的设计中,我们使用VC CDC工具自动推断时钟根,并生成包含时钟定义的Tcl文件。在审查和修改时钟根列表后,我们在Tcl文件中添加时钟的域分组和复位定义信息。此外,设计中包含不应在CDC路径中检查的RAM行为模型,我们将这些行为模型设置为黑盒。除这些之外,我们使用TCL命令自定义了部分VC CDC流程,这有助于在遇到意外错误时自动退出vc_static_shell。
unix > vc_static_shell -file vcst.tcl -output_log_file vcst.screen.log
Page 5
图2:CDC设置脚本 vcst.tcl
5. 报告设计中的CDC问题
当我们获得CDC报告时,它报告了设计中存在的异步复位 Asynchronous Reset和信号发散 Divergence问题。
图3:CDC报告摘要
我们只关注复位和发散以及再收敛问题。以下命令有助于缩小问题范围:
vc_static_shell> report_cdc –stage struct
Page 6
图4:CDC结构报告
6. 调试CDC违规
VC CDC验证流程中提到的GUI和原理图可以帮助我们进行根本原因分析。在图4中,工具报告了STRUCT_DIVERGE_CROSS_PATH警告。以下命令有助于打开GUI并通过原理图进行调试:
vc_static_shell> view_activity
图5:发散原理图问题的GUI
在图5中,原理图通过着色对象标注时钟域。紫色表示clka域,黄色表示clkb域。发散点 Divergence Point定位器位于clka域和clkb域之间。
我们可以快速可视化问题,然后通过原理图和Verdi nTrace修复并追踪问题。
Page 7
vc_static_shell> set enable_verdi_debug true
图6:Verdi追踪问题引脚
7. 结论
VC CDC静态验证方案执行结构和功能分析,以确保在FPGA设计上跨越异步时钟域 Asynchronous Clock Domain的信号被可靠接收。案例研究描述了如何使用VC CDC的不同机制(如过滤、GUI、原理图和Verdi nTrace)缩小潜在跨时钟域 CDC问题范围,并获得最大的验证效率。
8. 参考文献
1. Kesava R. Talupuru, Sanjai Athi, "Achieving Glitch-Free Clock Domain Crossing Signals Using Formal Verification, Static Timing Analysis, and Sequential Equivalence Checking", International Workshop on Microprocessor Test and Verification 2. Synopsys VC CDC user guide
图片索引
本文共6张图片,存放于 SNUG_TPC_Spyglass_Poppen_Advanced_Clock_Domain_Crossing_Checks_for_FPGA_Design_paper_images/ 目录。
第4页:图1:VC CDC流程 第5页:图2:CDC设置脚本、图3:CDC报告摘要 第6页:图4:CDC结构报告、图5:发散原理图问题的GUI 第7页:图6:Verdi追踪问题引脚