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

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

3天内不再提示

如何追溯同一时钟域内partial false path的来源

算法与数据结构 来源:XILINX开发者社区微信公众 作者:XILINX开发者社区微 2021-08-23 11:31 次阅读

随着设计复杂度和调用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的情况。

f34e4816-0210-11ec-9bcf-12bb97331649.png

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]]

返回会分行显示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。

f3ac0384-0210-11ec-9bcf-12bb97331649.png

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的约束语句,如图所示:

f46db506-0210-11ec-9bcf-12bb97331649.png

选中此行约束,可以看到右上可视化表格的同条约束也自动被选中,向右拉到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,以免对运行时间及内存产生负面影响。

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

编辑:jq

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

    关注

    0

    文章

    9

    浏览量

    11887
  • TCL
    TCL
    +关注

    关注

    10

    文章

    1657

    浏览量

    87927
  • 集成设计
    +关注

    关注

    0

    文章

    4

    浏览量

    7488
  • Vivado
    +关注

    关注

    18

    文章

    789

    浏览量

    65092

原文标题:开发者分享 | 约束调试案例分析-如何判断路径的 timing exception 约束来自哪里?

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA设计中有多个时钟时如何处理?

    FPGA设计中有多个时钟时如何处理?跨时钟的基本设计方法是:(1)对于单个信号,使用双D触发器在不同时钟
    发表于 02-24 15:47

    【时序约束】和阿东起学习时序约束之异步时钟约束 set_false_path

    总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟
    发表于 06-26 23:54

    【时序约束】和阿东起学习时序约束之异步时钟约束 set_false_path

    总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟
    发表于 06-27 00:00

    【时序约束】关于设置FALSE PATH

    总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟
    发表于 06-27 06:34

    时钟时钟约束介绍

    解释了什么时候要用到FALSE PATH: 1.从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。 2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟
    发表于 07-03 11:59

    使用选项-from[get_clock userclk1]找不到set_false_path约束的有效对象

    当我实现我的设计时,它会报告警告“没有找到set_false_path约束的有效对象,带有选项'-from [get_clock userclk1]'”。但我可以使用TB“get_clocks
    发表于 11-06 11:29

    E4422B调制信号和RF载波是否来自同一时钟源?

    您好,我正在使用E4422B ESG系列信号发生器。我对这个乐器还不熟悉,请原谅我的基本问题。 1.调制信号和RF载波是否来自同一时钟源?当我在示波器上绘制100kHz的RF载波和10kHz的调制
    发表于 11-07 10:02

    怎么将信号从时钟传递到另时钟

    亲爱的朋友们, 我有个多锁设计。时钟为50MHz,200MHz和400Mhz。如果仅使用400MHz时钟并使用时钟使能产生200Mhz和50Mhz
    发表于 03-11 08:55

    为什么Vivado没有在CCIO的同一时钟区域选择MMCM?

    问候!我正在使用Virtex7 / XC7V2000T / ***1925。我有两个clcoks,pipe3_clk和ulpi_clk,连接到同一时钟区域的两个CCIO,X1Y7。但Vivado在
    发表于 07-16 14:18

    同步从时钟到另时钟的多位信号怎么实现?

    你好,我在Viv 2016.4上使用AC701板。我需要同步从时钟到另时钟的多位信号
    发表于 08-17 07:48

    基于FALSE PATH的设置

    总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。一般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟域的路径。
    发表于 09-19 10:46 0次下载
    基于<b class='flag-5'>FALSE</b> <b class='flag-5'>PATH</b>的设置

    硬件设计中教你如何正确的约束时钟

    桔色的"Partial False Path (unsafe)"方框,那你应该是没有正确地对异步时钟约束。如果你的设计中有大量的跨时钟域的异
    的头像 发表于 07-15 15:35 6040次阅读

    如何判断路径的timing exception约束

    ,为什么有些路径在分析时忽略了?我怎么去定位这些约束是哪里设定的?本文结合一个具体案例,阐述了如何追溯同一时钟域内partial false pat
    的头像 发表于 08-02 08:03 1067次阅读
    如何判断路径的timing exception约束

    STA学习记录-时钟定义

    STA的准备工作包括:设定时钟、指定IO时序特性、指定false path和multicycle path
    的头像 发表于 05-26 17:20 751次阅读
    STA学习记录-<b class='flag-5'>时钟</b>定义

    如何做一条合格的path同一path在物理设计不同阶段的变化

    Delay值是多少才算合格呢?这一篇开始讲解路径(Path)的概念,以及衡量Path Delay是否合格的标准----建立时间(setup time)和保持时间(hold time)。
    的头像 发表于 06-27 14:12 543次阅读
    如何做一条合格的<b class='flag-5'>path</b>?<b class='flag-5'>同一</b>条<b class='flag-5'>path</b>在物理设计不同阶段的变化