STA静态时序检查笔记整理

1 概述

静态时序检查作为时序sign-off的最后一道关卡,重在检查并将不符合时序要求的路径报告出来,避免芯片由于时序不好导致工作不稳定,因此检查项的全面与正确是十分重要的。

时序检查首先需要清楚时序是什么,时序的参数和要点是什么,才知道怎么检查时序。关于时序的要点网上有很多的介绍,在做综合时也需要很清楚时序,这两部分是相通的,建议在学习综合时一并学习时序分析。

静态时序检查是检查芯片中每一条真实路径的时序信息是否符合要求,使用的工具多为Prime Time(PT),其userguide可以参看如下网站(2019版)。

primetime user guide 2019.03 - 后端资料区 - EETOP 创芯网论坛 (原名:电子顶级开发网) -

PT是一个工具,如果要用好该工具,还需多读其使用手册。用好工具是基础要求,重要的是对报出的时序违例进行分析并解决才是进阶。

在Linux中可以用如下命令执行sta脚本: 

 pt_shell -f /xx/xx/scripts/pt.tcl | tee /xx/xx/log/sta_pt.log

2 sta脚本部分

2.1 设置变量 

设置变量包括了设置检查变量和环境变量。 

PT不仅可以检查layout后的电路时序,也可以检查综合后的电路时序,但在布局布线后必须做静态时序分析,综合后可以做也可以不做。

set STEP "post_layout"  #这里就是用于设置对哪个阶段的电路做静态时序分析,如果只对layout后的电路做分析,可以不用设置这个参数,这个参数是用做选择判断的条件

set MODE "func" #这个也是选择判断用的,如果电路存在正常的功能模式(func)也存在DFT等模式,则可以用这个选择分析电路处在某种状态下的时序

set PVT_CORNER "ss_v1p87_125" #STA是要对电路每个corner下都要进行的,用于确保电路在每个corner下都能正确运行,这个参数是用于选择具体在哪个corner下进行分析。

#=========设置参数========

#source  -echo -verbose /xx/xx/scripts/pt_setup.tcl

set TOP digital_top

set timing_save_pin_arrival_and_slack true

set timing_save_pin_arrival_and_required true

set timing_enable_max_capcitance_set_case_analysis true

set auto_wire_load_selection false

set svr_keep_unconnected_nets true

set timing_remove_clock_reconvergence_pessimism true

set timing_early_launth_at_borrowing_latches false

set si_enable_analysis true

这里设置的参数可能在某些条件下需要修改增删,可根据具体情况调整。

2.2 读取db文件

set link_path [concat * /xx/xx/xx/$PVT_CORNER.db \

 /xx/xx/xx/$PVT_CORNER\_ram.db]

set op_cond "ss_v1p87_125" #STA是要对电路每个corner下都要进行的,用于确保电路在每个corner下都能正确运行,这个参数是用于选择具体在哪个corner下进行分析。这个参数在去lib里有。

2.3 读取网表文件

read_verilog /xx/xx/netlist/digital_top.v

current_design digital_top

link

2.4 读取spef文件

if {$FORMAT == "spef"} {

read_parasitics -format spef -keep_capative_coupling /xx/xx/spf/$PVT_CORNER.spef.gz

write_sdf -version 3.0 -context Verilog -no_edge -include {SETUPHOLD RECREM} /xx/xx/sdf/$PVT_CORNER.sdf

} elseif { $FORMAT == "sdf"} {

read_sdf -analysis_type on_chip_variation /xx/xx/sdf/$PVT_CORNER.sdf

}

set_operating_conditions -analysis_type on_chip_variation

在布局布线后,每个corner下都有一个对应的spef文件,在什么corner下就用对应的spef文件。

2.5 读取sdc文件

if {$READ_SDC == "TRUE"} {

read_sdc -version 2.1 -echo /xx/xx/xx/xx/sdc/syn.sdc

set_propagated_clock [all_clocks]

} else { 

source /xx/xx/scripts/pt_constrant.tcl 

}

这里的pt_constrant.tcl 的设置如下,在sdc文件时可以用以下的设置粗略的检查。

if{$MODE == "func"} {

set_case_analysis 0 [get_port TEST_MODE]

} elseif {$MODE == “dft”}{

set_case_analysis 1 [get_port TEST_MODE]

}

set_wire_load_mode top

set_wire_load_model

if{$STEP=="pre_layout"}{

set_ideal_network -no_propagate 

}elseif {$STEP=="post_layout"}{

set_propagated_clock [all_clocks]

}

2.6 检查输出

检查输出包括了参数设置的输出,同时也包括时序检查结果的输出。参数设置的输出是为了核实参数设置的正确性。

check_timing -verbose > check_timing_pre.rpt

update_timing  -full

check_timing > check_timing_post.rpt

#=====source /xx/xx/scripts/output.tcl======用于输出相关参数信息=====

report_bottleneck > report_bottleneck.rpt

report_analysis_coverage -exclude_untested {constant_disable} -status_details {violated untested} > report_analysis_coverage.rpt

report_qor > report_qor_summary.rpt

report_annotated_parasitics -check -internal_nets -pin_top_pin_nets -list_not_annotated -boundary_nets -max_nets 10> report_annotated_parasitics.rpt

report_clock >

report_clock -skew -attribute >

report_clock_timing -type latency>

report_clock_timing -type skew >

report_exceptions >

report_disable_timing >

report_clock_gating_check >

report_constraint -max_capacitance -verbose -nosplit >

report_constraint -max_fanout -verbose -npsplit >

report_constraint -max_transition -verbose -nosplit >

report_constraint -max_capacitance -verbose -all_violators -nosplit >

report_constraint -max_fanout -verbose -all_violators -nosplit >

report_constraint -max_transition -verbose -all_violators -nosplit >

report_constraint -min_pulse_width -all_violators -nosplit >

set_noise_parameter -enable_propagation

check_noise > check_noise.rpt

update_noise

report_noise -all_vio -nosplit > report_noise.rpt

report_si_double_switching -nosplit -rise -fall > report_si_double_switch.rpt

 在report timing时还需要考虑片上变化(OCV)如derate的考虑,对derate的设置参考文末的第一个链接。这里简单给出基本的report timing。

source -echo -verbose /xx/xx/scripts/report_min_timing.tcl

source -echo -verbose /xx/xx/scripts/report_max_timing.tcl

保存session,用于快速恢复已有PT运行。

save_session ./session  

report timing是STA的相对关键的一部分,只有报告全了,才能全面的检查这个设计的时序。在timing报告中,主要用到的有report_命令,可以在pt_shell中查找相关的命令及其使用方法,下面给出部分命令使用的脚本举例:

report_min_timing.tcl    #report hold的violation

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time > report_timing_hold.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -start_end_type reg_to_reg >report_timing_hold_r2r.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -start_end_type in_to_reg >report_timing_hold_i2r.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -start_end_type reg_to_out >report_timing_hold_r2o.min.rpt

report_timing -delay_type min -nworst 1 -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -start_end_type in_to_out >report_timing_hold_i2o.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -exclude [concat [all_inputs] [all_outputs]]>report_timing_hold_internal_nw1.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -group **async_default**>report_timing_hold_nw1.async_default.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -group **clock_gating_default**>report_timing_hold_nw1.clock_gating_default.min.rpt

report_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time -group **default**>report_timing_hold_nw1.default.min.rpt

report_constraints -all > report_constraints.min.rpt

report_global_timing > report_global_timing.min.rpt

report_global_slack>report_global_slack.min.rpt

report_constraint -all_violations > report_drc_violations.min.rpt

report_max_timing.tcl  #report setup violation

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time > report_timing_setup.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -start_end_type reg_to_reg > report_timing_setup_r2r.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -start_end_type in_to_reg > report_timing_setup_i2r.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -start_end_type reg_to_out > report_timing_setup_r2o.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -start_end_type in_to_out > report_timing_setup_i2o.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time > report_timing_setup_nw1.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -exclude [concat [all_input] [all_outputs]]> report_timing_setup_internal_nw1.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -group **async_default**> report_timing_setup_nw1.async_default.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -group **clock_gating_default**> report_timing_setup_nw1.clock_gating_default.max.rpt

report_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time -group **default**> report_timing_setup_nw1.default.max.rpt

report_constraints -all > report_constraints.max.rpt

report_global_timing > report_global_timing.max.rpt

report_global_slack>report_global_slack.max.rpt

report_constraint -all_violators > report_drc_violations.max.rpt

上面的举例不全,使用时可根据需要增删。如果为了避免检查项不全,可以将所有检查项都检查一遍。

3 相关链接

静态时序分析STA基础 - 陆路慧 - 博客园 (cnblogs.com)

特别推荐这个链接,详细看完,收获颇丰。

STA静态时序分析——学习笔记_sta corner-CSDN博客

静态时序分析(STA) —— 时序检查_sta检查-CSDN博客 


 

静态时序分析Static Timing Analysis1——STA概述、标准工艺库、时钟、IO约束的建立-CSDN博客

静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查_sta 保持时间检查-CSDN博客

 

静态时序分析Static Timing Analysis3——特殊路径(多周期、半周期、伪路径)的时序检查_半周期时序检查-CSDN博客

静态时序分析Static Timing Analysis4——多时钟域和多时钟时序检查_慢时钟到快时钟建立时间不足-CSDN博客 【干货】STA静态时序分析详细解析 - 连更 - 后端讨论区 - EETOP 创芯网论坛 (原名:电子顶级开发网) -

笔记整理到这里,大致写成这样,后续优化再更新,若有侵权,告知并删除。

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STAStatic Timing Analysis)静态时序分析是设计验证中非常重要的一部分,它能够保证设计的时序满足要求,并且对于设计中存在的时序问题进行诊断和修复。PT(PrimeTime)是业界较为常用的 STA 工具之一。下面是一个 PTSTA 静态时序分析的教程。 1. 确定时序约束 时序约束文件是进行静态时序分析的基础,它描述了设计中的时序要求。时序约束应该包括时钟频率、时钟时序、输入输出延迟等信息。在 PT 中,时序约束文件格式为 SDC(Synopsys Design Constraints)。 2. 进行时钟分析 时钟分析是静态时序分析的第一步,它能够检查时钟网络中存在的时序问题。在 PT 中,我们可以使用 clock report 命令生成时钟分析报告。时钟分析报告能够帮助我们确定时钟路径、时钟树等信息。 3. 进行时序分析 在进行时序分析之前,我们需要将设计进行综合,并产生时序数据库(.db 文件)。时序分析主要包括前端分析和后端分析,前端分析主要是对时序路径进行分析,后端分析主要是对时序路径进行优化。 在 PT 中,我们可以使用 timing report 命令生成时序分析报告,报告中包括了时序路径、时序偏差等信息。我们可以根据报告中的信息进行时序优化,例如添加时钟缓冲、调整时钟路径等操作。 4. 进行时序约束修复 在进行时序分析时,PT 会给出一些违反时序约束的警告和错误信息。我们需要根据这些信息进行时序约束修复,以保证设计满足时序要求。在 PT 中,我们可以使用 constraint report 命令生成时序约束修复报告,报告中包括了需要修复的时序约束信息。 5. 进行时序分析验证 在进行时序分析之后,我们需要进行时序分析验证,以保证时序分析结果的准确性。在 PT 中,我们可以使用 report checks 命令生成时序分析验证报告,报告中包括了时序分析结果的正确性信息。 以上就是 PTSTA 静态时序分析的教程,希望能够对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值