尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

STA静态时序检查笔记整理

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.log2 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.tclset TOP digital_topset timing_save_pin_arrival_and_slack trueset timing_save_pin_arrival_and_required trueset timing_enable_max_capcitance_set_case_analysis trueset auto_wire_load_selection falseset svr_keep_unconnected_nets trueset timing_remove_clock_reconvergence_pessimism trueset timing_early_launth_at_borrowing_latches falseset 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.vcurrent_design digital_toplink2.4 读取spef文件if {$FORMAT spef} {read_parasitics -format spef -keep_capative_coupling /xx/xx/spf/$PVT_CORNER.spef.gzwrite_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.sdcset_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 topset_wire_load_modelif{$STEPpre_layout}{set_ideal_network -no_propagate}elseif {$STEPpost_layout}{set_propagated_clock [all_clocks]}2.6 检查输出检查输出包括了参数设置的输出同时也包括时序检查结果的输出。参数设置的输出是为了核实参数设置的正确性。check_timing -verbose check_timing_pre.rptupdate_timing -fullcheck_timing check_timing_post.rpt#source /xx/xx/scripts/output.tcl用于输出相关参数信息report_bottleneck report_bottleneck.rptreport_analysis_coverage -exclude_untested {constant_disable} -status_details {violated untested} report_analysis_coverage.rptreport_qor report_qor_summary.rptreport_annotated_parasitics -check -internal_nets -pin_top_pin_nets -list_not_annotated -boundary_nets -max_nets 10 report_annotated_parasitics.rptreport_clock report_clock -skew -attribute report_clock_timing -type latencyreport_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_propagationcheck_noise check_noise.rptupdate_noisereport_noise -all_vio -nosplit report_noise.rptreport_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.tclsource -echo -verbose /xx/xx/scripts/report_max_timing.tcl保存session用于快速恢复已有PT运行。save_session ./sessionreport timing是STA的相对关键的一部分只有报告全了才能全面的检查这个设计的时序。在timing报告中主要用到的有report_命令可以在pt_shell中查找相关的命令及其使用方法下面给出部分命令使用的脚本举例report_min_timing.tcl #report hold的violationreport_timing -delay_type min -nworst 1 -derate -capacitance -path_type full_clocked_expanded -net -input -crosstalk_deta -nosplit -transition_time report_timing_hold.min.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_constraints -all report_constraints.min.rptreport_global_timing report_global_timing.min.rptreport_global_slackreport_global_slack.min.rptreport_constraint -all_violations report_drc_violations.min.rptreport_max_timing.tcl #report setup violationreport_timing -delay_type max -nworst 1 -derat -capacitance -path_type full_clocked_expanded -net -input -crosstalk_delta -nospilt -transition_time report_timing_setup.max.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_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.rptreport_constraints -all report_constraints.max.rptreport_global_timing report_global_timing.max.rptreport_global_slackreport_global_slack.max.rptreport_constraint -all_violators report_drc_violations.max.rpt上面的举例不全使用时可根据需要增删。如果为了避免检查项不全可以将所有检查项都检查一遍。3 检查的总体思路STA的检查的参数设置很重要个人的思路大概如下不恰当之处还望指正。芯片的实际工作情况不同的工艺、电压和温度也就是经常提到的PVTprocess、voltage、temperature芯片本身的参数设置首先芯片的端口——时钟端口、输入端口、输出端口、输入输出端口的参数设置时钟端口的参数设置包括了时钟源、时钟频率、时钟周期、占空比、边沿时间、uncertaintyuncertaintyskewjitterdelay、setup时间、hold时间等。输入端口的参数设置包括了输入延时包括max和min、驱动能力的设置可参看该链接为设计指定输入端口驱动强度set_driving_cell、set_drive 和set_input_transition_set driving cell-CSDN博客。当然如果存在通过端口控制的工作模式还需要设置具体检查的工作模式如function、scan等每种模式都需要检查。输出端口的参数设置包括了输出延时包括max和min、负载能力。输入输出端口的参数设置需要向输入端口和输出端口的参数进行设置。其次芯片内部也有参数需要设置——输入信号未经过时序逻辑直接输出、虚拟时钟、时钟信号的同步和异步设置、跨时钟域的处理由快到慢、由慢到快、时钟周期的整数倍和非整数倍、时钟之间存在相移关系、多周期路径、半周期路径、false_path、锁存器的timing_borrow、门控时钟参考链接芯片设计进阶之路——门控时钟 - 知乎的处理。以上的芯片内部参数都是基于假设芯片的每一个位置的性能都相同但实际还是存在制造偏差因此还需考虑芯片片上的变化OCV设置derate参数来增强实际芯片的性能。4 相关链接静态时序分析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 创芯网论坛 (原名电子顶级开发网) -笔记整理到这里大致写成这样后续优化再更新若有侵权告知并删除。
返回列表