0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何判断路径的timing exception约束

吴湛 来源:哎呀2015 作者:哎呀2015 2022-08-02 08:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

随着设计复杂度和调用IP丰富度的增加,在调试时序约束的过程中,用户常常会对除了自己设定的约束外所涉及的繁杂的时序约束感到困惑而无从下手。举个例子,我的XDC里面并没有指定set_false_path,为什么有些路径在分析时忽略了?我怎么去定位这些约束是哪里设定的?

事实上,Vivado集成设计环境提供了很多辅助工具来协助用户完成时序约束的分析。

本文结合一个具体案例,阐述了如何追溯同一时钟域内partial false path的来源,希望为开发者的设计调试提供一些技巧和窍门。

首先来看问题。

在此设计中,当用report clock interaction查看时钟关系时,注意到不少单时钟域被标注成了partial false path。对于一个约束文件众多,约束较为复杂的设计,如何进一步推断partial false path有哪些路径,是被哪些约束覆盖了呢?

以其中的一个时钟域GTYE4_CHANNEL_RXOUTCLK_7为例:

Step1:关闭merging timing exceptions

运行Tcl命令让时序工具不要合并时序异常约束。

config_timing_analysis -merge_exceptions false

要注意的是,这种模式会导致更长的运行时间和更大的内存占用,因此不推荐默认情况下将时序工具保持在此模式下。

调试完成后,要恢复到默认模式,请将-merge_exceptions 的值设置为 True。

你可以用report_config_timing来报告exception merge的情况。

Step2:产生详细的时序路径报告

如果你只是要快速浏览路径的起始元件,可运行以下Tcl命令:

join [get_timing_paths -max_paths 100 -user_ignored -from [get_clocks GTYE4_CHANNEL_RXOUTCLK_7] -to [get_clocks GTYE4_CHANNEL_RXOUTCLK_7]] \n

返回会分行显示partial false path的startpoint和endpoint。

{gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_cmac_cdc_sync_gt_txresetdone_int3/s_out_d4_reg/C --》 gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_top/obsibdaaf4ker2wujpra0sjb/RX_SERDES_RESET[0]}

{gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_cmac_cdc_sync_gt_txresetdone_int3/s_out_d4_reg/C --》 gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_top/obsibdaaf4ker2wujpra0sjb/RX_SERDES_RESET[3]}

{gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_cmac_cdc_sync_gt_txresetdone_int3/s_out_d4_reg/C --》 gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_top/obsibdaaf4ker2wujpra0sjb/RX_SERDES_RESET[2]}

{gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_cmac_cdc_sync_gt_txresetdone_int3/s_out_d4_reg/C --》 gen_die_comm_top[1].leda_die_comm_top_int/gen_cmac[3].u_hard_caui4_top_wrapper_inst/u_cmac_usplus_0/inst/i_cmac_usplus_0_top/obsibdaaf4ker2wujpra0sjb/RX_SERDES_RESET[1]}

为了得到我们所需的更详细信息,可在Clock Interaction Report表格中,选中GTYE4_CHANNEL_RXOUTCLK_7这个时钟域,右键菜单选择Report Timing,

并且在设置对话框的Advanced标签卡中勾选Report user ignored paths选项。

对应的Tcl命令为:

report_timing -from [get_clocks GTYE4_CHANNEL_RXOUTCLK_7] -to [get_clocks GTYE4_CHANNEL_RXOUTCLK_7] -delay_type min_max -max_paths 10 -sort_by group -input_pins -routable_nets -user_ignored -name timing_3

当然,你可以根据需要增大max_paths的数目,以便更完整地包含所有路径。

运行结果如下图,可以看到,除了常规的时序路径信息,Exception一列还额外罗列了约束ID。

Step3:查找约束ID

这个ID反映的是Constraint position,我们可以打开Timing Constraints窗口,非常直观方便地定位这个ID所对应的约束语句。

Timing Constraints窗口仅对Synthesized Design或Implemented Design适用。你可以通过以下三种方式之一找到其入口(截图匹配Vivado 2020.2版本):

Open Synthesized/Implemented Design,选择菜单Windows 》 Timing Constraints

Open Synthesized Design,选择Flow Navigator里Synthesized Design部分的Edit Timing Constraints

Open Implemented Design,选择Flow Navigator里Implemented Design部分的Edit Timing Constraints

打开后,在All Constraints子窗口下拉找到Position一列为643的约束语句,如图所示:

选中此行约束,可以看到右上可视化表格的同条约束也自动被选中,向右拉到Source File一列可以看到约束所在的XDC文件,或者在All Constraints窗口上翻到此约束所在的层次,同样会列出XDC文件的具体信息。

如果你偏好Tcl模式,也可以用write_xdc导出带有ID的所有时序约束。

write_xdc -type timing -write_id timing.xdc

不过-write_id选项仅在2020.2及之后版本才支持。

至此,我们已经定位了partial false path的路径细节及约束来源。

如前所述,调试完约束后,请将-merge_exceptions设回默认值true,以免对运行时间及内存产生负面影响。

文中的方式可以应用到所有诸如此类“哪些约束覆盖了此路径“的疑问解答上,希望对各位开发者的时序调试有所帮助。

审核编辑:郭婷

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

    关注

    5

    文章

    1849

    浏览量

    154898
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76107
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    时序约束问题的解决办法

    在使用vivado对 Verilog 代码进行综合后,点击“SYNTHESIS”下的“Report Timing Summary”,可以查看综合后的时序报告,查看 Setup Time 和 Hold
    发表于 10-24 09:55

    关于综合保持时间约束不满足的问题

    两个时钟是没有约束的异步时钟 3、在 synthesis 中 打开 edit timing constraints 设置异步时钟,如下图: 4、再重新运行 synthesis 中的 report
    发表于 10-24 07:42

    地平线的L3判断与实践路径

    在智能驾驶演进过程中,L3/L4/L5等“高级别自动驾驶”的持续探索成为行业焦点,围绕其实现路径、验证方式与工程落地的讨论也在持续深化。
    的头像 发表于 06-27 09:39 1181次阅读

    PCB Layout 约束管理,助力优化设计

    本文重点PCBlayout约束管理在设计中的重要性Layout约束有助避免一些设计问题设计中可以使用的不同约束在PCB设计规则和约束管理方面,许多设计师试图采用“一刀切”的方法,认为同
    的头像 发表于 05-16 13:02 812次阅读
    PCB Layout <b class='flag-5'>约束</b>管理,助力优化设计

    FPGA时序约束之设置时钟组

    Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束中设置了时钟组或false路径。使用set_clock_groups命令可以使时序分析工具不分析时钟组中时钟的时序
    的头像 发表于 04-23 09:50 963次阅读
    FPGA时序<b class='flag-5'>约束</b>之设置时钟组

    一文详解Vivado时序约束

    Vivado的时序约束是保存在xdc文件中,添加或创建设计的工程源文件后,需要创建xdc文件设置时序约束。时序约束文件可以直接创建或添加已存在的约束文件,创建
    的头像 发表于 03-24 09:44 4381次阅读
    一文详解Vivado时序<b class='flag-5'>约束</b>

    真空断路器的工作原理 真空断路器和空气断路器的区别

    一、真空断路器的工作原理 真空断路器是一种利用真空作为灭弧介质的断路器,其工作原理主要基于真空环境中电流流过零点时等离子体的迅速扩散来熄灭电弧,从而完成切断电流的任务。以下是真空断路
    的头像 发表于 01-31 10:59 4514次阅读

    漏电继电器多长时间检查一次,漏电断路器坏了怎么判断

    在电气系统中,漏电继电器与漏电断路器作为关键的安全装置,承担着监测电路中的漏电情况并在检测到异常时及时切断电源的重要职责,以防止电击事故和火灾等安全隐患。为了确保这些设备的正常运行和电气系统的整体安全,定期的检查与维护是必不可少的。本文将深入探讨漏电继电器的检查周期以及漏电断路
    的头像 发表于 01-29 16:34 2211次阅读

    真空断路器与其他类型断路器的性能对比

    在电力系统中,断路器是实现电路控制和保护的关键设备。随着技术的发展,断路器的种类也越来越多,包括真空断路器、空气断路器、油断路器和SF6
    的头像 发表于 01-17 09:39 1953次阅读

    断路器选型的实用技巧

    在电力系统和工业自动化领域,断路器扮演着至关重要的角色。它们不仅保护电路免受短路和过载的损害,还确保了人员和设备的安全。然而,选择合适的断路器并非易事,需要考虑多种因素。 1. 了解基本参数 在选型
    的头像 发表于 01-03 09:37 2484次阅读

    工业断路器与家用断路器的区别

    断路器是电气系统中用于保护电路免受过载和短路损害的重要元件。它们能够在检测到异常电流时自动切断电路,从而保护电气设备和人员安全。根据应用场景的不同,断路器可以分为工业断路器和家用断路
    的头像 发表于 01-03 09:34 2547次阅读

    断路器的分类及应用领域

    断路器的分类 断路器可以根据不同的标准进行分类,以下是几种常见的分类方式: 按极数分类 : 单极断路器:用于单相电路。 双极断路器:用于两相电路。 三极
    的头像 发表于 01-03 09:33 2860次阅读

    如何测试断路器是否正常

    断路器是电气系统中的关键组件,用于保护电路免受过载和短路的影响。它们能够在检测到异常电流时自动断开电路,从而避免设备损坏或火灾。 断路器的基本原理 在开始测试之前,了解断路器的工作原理是有帮助
    的头像 发表于 01-03 09:32 2613次阅读

    dac7624 data output timing是做什么用的?

    1:请问左侧的 data output timing 是做什么用的?右侧的是写数字输入的时序吧。2:这款dac可以单纯的用IO模拟时序通信吧3:这个t CSD 要求最大不能超过160ns 很多单片机都达不到吧。单纯的翻转下IO,实际用示波器也要100多ns
    发表于 01-01 07:52

    断路器的检测方法

    断路器的检测方法多种多样,以下是一些常见的检测方法: 一、直观检查 直观检查是断路器检测的基础步骤,主要通过观察断路器的外观来判断其是否存在明显的物理损坏或异常。检查内容包括: ·
    发表于 12-27 10:29