PT工具常用的debug指令(持续更新)

PT工具常用的debug指令(持续更新)
  1. 获取两个时钟之间的关系,比如是否有设置allow_path
get_clock_relationship{<clock A><clock B>}

即可获取clock A和clock B之间的关系

  1. report_timing时,增加如下指令,可以在报timing的时候把当前path设置且当前生效(exception可能被覆盖)的exception报出来:
report_timing-fromA-toB-exceptionsdominant

可以在报timing的时候把当前path设置的所有的exception(可以debug exception被覆盖的情况)报出来

report_timing-fromA-toB-exceptionsall

可以把exception设置的from/through/to的信息全部报出来。

  1. 在get_pins时,可以通过增加-f "full_name=~xxx"来进行filter全称操作。-f 等价于-filter
    还可以-f "ref_name =~ xxx"来匹配module名的方式进行。

若想通过get_pins命令获取某个get_cell得到的cell的全部pins,且该cell是时序器件(非组合逻辑cell)。可以:

get_pins-of_object[get_cells-hier-filter"ref_name =~ <module name> && is_sequential == true"]

或者:

get_pins-of[get_cells-hier-filter"ref_name =~ <module name> && is_sequential == true"]

若想进一步filter该cell为leaf cell,可以:

get_pins-of[get_cells-hier-filter"ref_name =~ <module name> && is_sequential == true"&&is_hierarchical==false]
  1. report_timing 报告延时信息更加详细的方法
report_timing-inputs_pins-fromxxx-toxxx

-input_pins:强烈推荐始终开启的选项。默认报告只显示单元的输出引脚(O、Z、Q等)的延迟。加上这个选项后,它会多显示一列输入引脚(A、D、B等)。关键好处在于,你能看到线网延迟被单独剥离出来了!原来一个 Incr 值里混在一起的单元延迟和互连延迟,现在一目了然。你能直接判断延迟大头是单元本身慢,还是走线太长了。

显示某个cell输入引脚与时序延迟。在默认情况下,时序报告仅显示单元的输出引脚,线网延迟隐含在输出到输入的路径中。启用后,强制显示路径中所有单元的输入引脚,让路径节点更完整,明确展示线网延迟(从驱动单元输出引脚到负载单元输入引脚的延迟)

-nets:这个选项会把路径上的线网名称和它的扇出数显示出来。对于分析高扇出网络、了解信号分布很有帮助。但注意,它本身不显示延迟,需要配合 -input_pins 才能看到线网的具体延迟贡献。

report_timing-include_hierarchical_pins-fromxxx-toxxx

默认pt工具报告中只会显示leaf cell的延时,无法显示hierarchical pin的延时。开始该选项可以让报告显示地更加全面。

  1. 可以通过如下指令查看某个class有哪些属性
list_attributes-class[xxx]-application-nosplit

有效的class有:pin、net、cell、timing_path、clock、port、design

比如,要获取timing_path有哪些attribute,可以:

list_attributes-classtiming_path-application-nosplit

比如想要获取某个时钟的频率,周期,可以:

get_attribute[get_clock xxx]period

或者获取其waveform,显示其占空比,可以:

get_attribute[get_clock xxx]waveform ---->{217.5,870}

或者获取该时钟的master clock或者master pin:

get_attribute[get_clock xxx]master_clock
get_attribute[get_clock xxx]master_pin

或者获取该时钟是否是lib中生成的:

get_attribute[get_clock xxx]is_generated_from_lib_cell

比如想获取某个leaf cell在Lib库中调用的lib cell名:

get_attribute[get_cells xxx]lib_cell

比如想要获取某个信号设置case或者外部tie0或1,可以获取某个pin的属性:

get_attribute[get_pins xxx]case_value
get_attribute[get_pins xxx]constant

比如想要获取某个path的data delay信息,可以:

get_attribute[get_timing_path-fromA-toB-delay_typemin]arrival

比如想要获取某个path的slack信息,可以:

get_attribute[get_timing_path-fromA-toB-delay_typemin]slack
  1. 将pt抓出来的collection(比如get_cell,或者get_pins的结果)按列整齐排放的方法:
join[get_object_name[get_cells xxx]]"\n"

如果想整齐地打印到某个文件中,则:

echo[join[get_object_name[get_cells xxx]]"\n"]>>xxx.log
  1. 检查某个cell是否设置disable timing的方法
report_disable_timing[get_cells xxx]

可以报出disable的timing arc是什么。

  1. 如何在pt_shell中查看当前顶层设计是啥
current_design
  1. report_timing -path_type full_clock_expanded 的含义
    默认的path_type为full_clock。在timing报告中将会把clock的演示合并为单一clock source latency项,隐藏中间逻辑
    选择-path_type full_clock_expanded后,可以显示主时钟→生成时钟的完整转换路径(如分频、门控、MUX 时钟),让clock的路径更加完成,可以更好地分析时钟路径延时。
  2. all_fanin/all_fanout相关
    要想得到连接到某个寄存器D端的cell,且为timing的start_point起点的cell:
all_fanin-startpoints_only-flat-to$reg/D-only_cells

要想从某个寄存器的CP

all_fanout-endpoints_only-flat-from$reg/CP-only_cells
  1. 如果想用图形化的界面看一下cell之间的连接关系,则可以通过下面的指令:
start_gui 选择view->Schematic_View change_selection[get_pins$pin_name]

双击pin则会显示前面和后面的链接

  1. pt要想获取某个object的名字,比如cell的名字
    比如,抓到某个cell,想要打印它的名字:
setpin_name[get_cells-quiet-hier-filter"ref_name == "xxxx""]puts$pin_name

此时虽然终端打印结果为:

{"aaa"}

但是pin_name这个变量本质上返回的是一个指针,打印结果为:

_sel263

如果想要返回真实的名字,需要:

setpin_real_name[get_object_name$pin_name]puts$pin_real_name

然后打印结果为:

aaa