如何在shell单元建立washer_STA | 8. SDC是如何炼成的?验收篇 如履薄冰

本文介绍了如何在项目早期验收和检查时序设计约束(SDC),通过PT工具的check_timing命令深度检查SDC的完整性,以及使用report_analysis_coverage命令统计未满足的约束。此外,还强调了异步路径检查和跨时钟域一致性的重要性,并提供了相关工具和命令的使用方法。
摘要由CSDN通过智能技术生成

你好,我是老本(Benjamin)。转发需注明作者和原文链接!

STA是由SDC驱动的,所以SDC的完整性、正确性和一致性直接决定着综合、布局布线以及STA的有效性。

在STA系列开篇文章《STA | 0. 静态时序分析概述》就提到了其局限性,通过后仿真不但可以弥补STA方法的缺漏,而且可以很大程度上佐证SDC的正确性。特别是对于接口时序约束,牵涉到标准协议和异步关系等,后仿真如果PASS可以让SDC作者睡得更香甜些。

后仿真一般是验证团队的职能领域,需要后端提供网表和SDF,不过后仿真需要后端所提供数据的时序是有要求的,其中hold timing必须干净,setup timing最好能干净,实在不行可以通过降频让setup满足。由此可见,后仿真往往是在项目后期才能够被执行。那我们在项目前期怎么去验收SDC呢?有了标准就不至于整天提心吊胆。下面以PT为例来进行讲解,其它工具会有些许区别。

21a44809c4a972b6fc73f1d772b0145e.png

check_timing

check_timing这个命令是在对时序约束做一个深度的体检,能检查时序约束相关的各种问题,其默认检查项是有下面的这个变量控制的:

pt_shell> printvar timing_check_defaults

这个变量的工具默认值:

  • generated_clocks

    检查generated_clocks的定义是否合理,有没有源时钟,是否存在相互循环定义的情况。

  • generic

    检查是否存在unmapped的cells,这类generic cell一般是零延时,影响时序检查准确性。

  • latch_fanout

    检查电平触发latch的扇出是不是自身,有没有latch级联的情况

  • loops

    检查组合逻辑有没有反馈回路,STA对这种反馈回路是不会分析的,需要通过set_disable_timing来打断这种反馈回路

  • no_clock

    检查是否有时序单元的clock pin不在任何时钟网络上,特别留意中途是不是通过“set_sense -stop_propagation”之类的命令强制切断了时钟的传播。

  • no_input_delay

    检查Input Port是否有关联的时钟,否则相关IN2REG路径是unconstrained的。

  • partial_input_delay

    检查在set_input_delay时,是否存在只指定-min或者-max其中之一的情况

  • unconstrained_endpoints

    检查时序单元数据Pins或者Output Ports是否没有max delay约束

  • unexpandable_clocks

    检查相关的clocks之间是否可扩展,在跨两个不同频率的时钟路径上计算时序时,往往需要扩展时钟以计算相应的setup timing

  • no_driving_cell

    检查Input Port是否定义了驱动单元,工具只会在相连的net有寄生参数存在时才会产生Warning信息

  • pulse_clock_non_pulse_clock_merge

    检查pulse clock和normal clock是否共用相同时钟网络

  • pll_configuration

检查PLL的配置是否存在问题。

对于check_timing报告中的Warning和Error,要仔细地检查,最好是一个Warning/Error都没有,下面的结果也挺令人赏心悦目的(仅有2个Warning需要排查):

d47545878b1a468b48f1ed39219cccca.png

需要注意的是,在综合阶段需要先check_design保证设计本身没有问题的情况下,再通过check_timing进行时序约束的检查。

21a44809c4a972b6fc73f1d772b0145e.png

report_analysis_coverage

report_analysis_coverage命令可以统计出有design中需要STA进行的检查有多少项,其中有多少满足(Met),有多少违反(Violated),有多少缺失检查(Untested),如下图所示:

a9085a0551b89a427b72a5b96504f75b.png

需要特别注意的是Untested一栏,造成的原因可以有以下几类:

  • false_paths

    set_false_path 或者asynchronous/exclusive clock groups

  • user_disabled

    timing check被用户禁用了,例如set_disable_timing

  • constant_disabled

    set_case_analysis或者实际Signal已经接电源或地(Tie High/Low)

  • no_paths

    路径不存在或被切断,造成原因也可能是set_disable_timing

  • mode_disabled

    特定mode相关时序约束,在其他mode下不会检查

  • no_endpoint_clock

    endpoint没有时钟

  • no_startpoint_clock

    startpoint没有时钟

  • no_constrained_clock

    针对skew和clock separation检查,没有约束时钟

  • no_ref_clok

    针对skew和clock separation检查,没有参考时钟

  • no_clock

    针对min_pulse_width和min_period检查,没有时钟定义

  • unknown

    其它未知原因

具体可以通过以下命令来debug:

pt_shell> report_analysis_coverage -status_detail untested -check setup

需要特别强调:对于异步路径,比如false_path,case_analysis,set_disable_timing等等,每一条SDC语句都需要designer仔细review确认,签字画押。

21a44809c4a972b6fc73f1d772b0145e.png

一致性和CDC检查

对于Top,往往还需要检查Top和Block的约束的一致性,以及跨时钟域检查。这里常用两个工具:一个是PT的GCA,适合门级网表的分析。另一个是SpyGlass,常用在RTL级别。

下图是GCA一般流程:

d7d45077f2234f1a258f074164e854d4.png

如果要进行Top和Block约束的一致性检查,可以参考以下命令:

ptc_shell> read_verilog ./top.vptc_shell> link_design topptc_shell> source top_constraints.tclptc_shell> link_design -add block1ptc_shell> source block1_constraints.tclptc_shell> set out_dir /user/abc/compare_topptc_shell> compare_block_to_top -block_design block1

GCA中也可以打印出跨时钟域信息,通过以下命令:

ptc_shell> report_clock_crossing

需要强调,在RTL交付前,跨时钟域的检查是非常关键的,利用SpyGlass等工具检查其是否存在时钟同步单元(synchronizer),并在需要时添加必要的约束控制跨时钟路径,避免功能错误。另外,SpyGlass也能够进行约束一致性检查,有兴趣的可以查看其用户手册。

彩蛋:转发本文到朋友圈,并添加老本(微信号: rtl2gds_ben)为好友,会收到免费《IC后端工程师学习路线图》文章,包括职业发展规划建议,以及全方位的学习资料。

*****推荐阅读*****

行业观察:

为什么说ICC和ICC2的后代FC有重登王者的气质?

后端攻城狮失业后的最佳选择?竟然是她们!

摩尔定律为什么是18个月?真相不忍细看!那就花2分钟了解一下。

如何从0到1创立AI芯片公司?- 超超超深度解读寒武纪《招股书》

STA系统性介绍文章:

STA | 4. Latch应用总结

未来还会有更多综合,PnR,PV,Formal,PI,DFT方面系统性介绍文章...

16bfe1fdab004da32c8baa3bac4905fc.png

老本(Benjamin)

3b14f35ddb31d2fb386bf81c237ccbad.png

RTL2GDS公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值