PrimeTime指南——合理设置约束

        完整的STA需要满足以下两点:

  • 完整的设计约束(完整并不意味着正确)
  • 运行所有需要的时序检查

        可以用以下两条命令来进行完整性的检查:

check_timing                                // 检查是否缺少了约束条件

report_analysis_coverage            // 检查是否是否对时序进行check          

一、检查约束的完整性

        check_timing 这一命令会检查设计中的每个现有约束,如果有缺失的约束,则会发出警告,我们可以根据警告对设置的约束进行检查。

        check_timing的完整检查项目如下,粗体表示默认选项:

        我们以下图所示电路为例,对check_timing的检查内容进行说明。

1、No input delay

        这类警告是默认关闭的,你需要设置变量:

pt_shell>set_app_var timing_input_port_default_clock true

        收到这种警告信息,我们需要知道:这个输入引脚和什么相连?哪条路径会受到这条警告的影响(或者此case缺少输入端口的分析)?

        我们需要检查是否有必要约束这个port,一些情况下,是不需要为input port添加约束的

  1. 假设这个端口应该由set_case_analysis 命令设置,驱动一个固定的信号比如
  2. 假设以这个port为起点的路径在当前模式的分析中是不存在的;

 2、No output delay

        收到这类警告需要去知道:输出端口连接的是什么,寄存器还是输入端口?这条警告所影响的路径是哪一条,他是否是一个输出的时钟端口?

        输出端口必须被output delay 所约束

        如果这个端口是一个输出的时钟端口,我们不需要为端口定义output_delay,创建所需要的generate_clock 然后忽略这条警告;

3、No clock

        收到这类警告需要去知道:哪里需要创建一个时钟去驱动受影响的端口;

        检查时钟信号是否由于某些时序弧的禁用或用户使用set_sense命令手动停止信号而在时钟端口的扇出中被阻断。

 二、检查执行的完整性

        report _ analysis _coverage 这一命令会检查设计中的每个现有时序检查,如果有任何未执行,则会发出警告和原因。我们需要决定这个时序检查是否有必要,还有检查什么原因导致时序检查没有被执行。

        导致时序检查未执行的原因由下面这些:

        我们以下图为例,对这些原因进行具体的说明。

1、False path

        false_path一般是用户使用set_false_paths指定,异步或者专用的时钟组;

        收到此类的警告,我们需要去知道:1.这条时序路径包含哪个时钟?2.F1的上一级触发器是什么?3.哪条false_path的命令或者clock_group的命令与此warning相关

        设置false path使用的命令为

pt_shell > set_false_path -from F2/CLK -to F1/D

2、user disabled

        出现此类的warning,我们需要去知道:这个时序检查只是对指定cell(F1)无效还是定义在cell库中,对所有instance都无效?这两者在命令的书写上是不同的:

pt_shell > set_disable_timing -from CLK -to D F1
pt_shell > set_disable_timing -from CLK -to D {get_lib_cell core_slow.db/fdesf2a15}

3、constant_disable

        这种警告一般出现在:

  1. 用户指定 set_case_analysis
  2. 信号固定为高电平或低电平;

        出现此警告我们需要确认,这个timing的disable是不是由于用户指定的case或者恒高或者恒低电平的信号导致的;用户哪条约束导致了 timing的disable。

pt_shell > set_case_analysis 0 scan_en

三、Debug命令

        当使用check_timing 和 report_analysis_coverage 命令对约束进行检查时,按上文所述,有可能出现一些warning,这时我们需要对出现的warning进行检查,最常用的debug命令如下图:

        这些命令可以让我们快速定位问题所在。

1、all_fanin

        

         如上图,当F1的clk端发出no clock warning,我们可以使用以下命令

pt_shell > all_fanin  -startpoints -flat -to F1/CLK

        即可以找到CLK的起始点,溯源问题发生的原因。

        all_fanin的用法如下:

        如例子中的图所示,all_fanin会追踪时序弧,最后在三种端口停下:

  • 输入端口(input port)
  • CLK flop pins ,锁存器的G和D pins
  • 时序弧被disable或missing的cell 的输出pins

2、report_cell

        如果我们定位到了问题的所在,可以使用report_cell命令查看该单元的详细信息。

        report_cell的用法如下:

3、get_attribute

        PrimeTime中,针对每一个设计对象(design objects)的信息都存储在attribute中,我们可以利用get_attribute命令来获取单独的设计对象的信息。

        上图中,指定的clocks这一attribute存储了所有穿过该pin的时钟信息。

4、report_disable_timing

          report_disable_timing这一命令会检查disable的时序弧,并给出原因。

        其具体用法如下:

5、report_case_propagation

        我们可以使用 report_case_propagation命令来查找用户定义的值。

        其用法如下

6、all_fanout

        这一命令与all_fanin类似:

        用法也基本一致:

 

        合理利用PT提供的命令,我们可以很快地找到问题的所在,快速修改时序约束不合理的地方。

  • 8
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧海一升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值