一、STA介绍

1.1

二、STA Flow & STA ENV

三、STA Tool & STA Scripts

四、STA Variable & STA Command & STA Setting

4.1 STA Variable

4.2 STA Command

4.2.1 PT

4.2.1.1 report_timing

4.2.1.1.1 查某path的延时

pt_shell> report_timing -delay_type max  -from [ get_pins { pericore/mp200/iic_0/iic/main/clksel/sclout_pre_reg/Q }] -fall_through [get_pins { pericore/portiotop/iobuf_port6/iobuf0/ENO }] -to [get_ports {P60}] -significant_digits 3 -capacitance -transition_time -nets -input_pins -nosplit -derate -voltage -path_type full_clock_expanded

4.2.1.1.2 查某path存在timing vio的情况

(1)

pt_shell> report_timing -start_end_pair -from [ get_pins { cspf/mc200/cibc/cib_memif_ro*_r_reg_*_/CLK }] -to [get_pins  cspf/mc200/mod/modectl_usertop/modectl_pgcrc_modectl_pgcrcsft_pgcrc_reg_pgcl_reg_*_/DATA ] -path_type  summary -nosplit

4.2.1.1.3

pt_shell>   report_timing -delay_type $MAX_MIN -input_pins -nosplit -transition_time -capacitance -crosstalk_delta -derate \
    -max_paths 25000 -nworst 1 -pba_mode $CD_REP_PBAMODE

4.2.1.1.4

pt_shell>       report_timing -delay_type $MAX_MIN -include_hierarchical_pin -path_type full_clock_expanded \
      -input_pins -nosplit -transition_time -capacitance -crosstalk_delta \
      -group **clock_gating_default** -slack_lesser_than inf -max_paths 100 -nworst 1 -derate -pba_mode $CD_REP_PBAMODE

4.2.1.1.5

pt_shell>  report_timing -delay_type $MAX_MIN -include_hierarchical_pin -path_type full_clock_expanded \
      -input_pins -nosplit -transition_time -capacitance -crosstalk_delta \
      -group **async_default** -slack_lesser_than inf -max_paths 100 -nworst 1 -derate -pba_mode $CD_REP_PBAMODE

4.2.1.1.6

pt_shell>     report_timing -delay_type $MAX_MIN \
      -input_pins -nosplit -transition_time -capacitance -crosstalk_delta \
      -group **default** -slack_lesser_than inf -max_paths 100 -nworst 1 -derate -pba_mode $CD_REP_PBAMODE

4.2.1.1.7

pt_shell>    report_timing -delay_type $MAX_MIN -input_pins -nosplit -transition_time -capacitance -crosstalk_delta -derate \
    -max_paths 25000 -nworst 1 -pba_mode $CD_REP_PBAMODE

4.2.1.2 get_attribute

4.2.1.2.1 查某cell的ref

pt_shell> get_attribute [get_cells pericore/portiotop/iobuf_port6/iobuf0] ref_name
P4B00LK0D

4.2.1.2.2 查驱动某FF的clk

(1)

pt_shell> get_attribute [get_pins pericore/mp200/iic_0/iic/main/clksel/sclout_pre_reg/CLK] clocks
{"FCLK"}

(2)

pt_shell> get_attribute [get_pins -of [get_cells -of pericore/mp200/iic_0/iic/main/clksel/sclout_pre_reg/DATA] -filter "lib_pin_name =~ CLK*"] clocks
{"FCLK"}

4.2.1.2.3 查某cell的是否是FF

(1)

pt_shell> get_attribute [get_cells pericore/mp200/iic_0/iic/main/clksel/sclout_pre_reg] is_sequential
true

4.2.1.2.4 查某clk的周期

(1)

pt_shell> get_attribute [get_clocks FCLK] period
29.200001

4.2.1.2.5

(1)

pt_shell> get_attribute $CHK_RPT startpoint_clock_latency

(2)

pt_shell> get_attribute $CHK_RPT endpoint_clock_latency

(3)

pt_shell> get_attribute $CHK_RPT common_path_pessimism

4.2.1.2.6 查找某clk的master clk

(1)

pt_shell> get_attribute [get_clocks ${clk_name}] is_generated

pt_shell> get_attribute [get_attribute [get_clocks ${clk_name}] master_clock] full_name

4.2.1.2.7

(1)

pt_shell> get_attribute ${path_name} startpoint_clock

pt_shell> get_attribute ${path_name} endpoint_clock

pt_shell> get_attribute ${path_name} startpoint_clock_open_edge_value

pt_shell> get_attribute ${path_name} endpoint_clock_close_edge_value

pt_shell> get_attribute [get_clocks ${clk_name}] sources

pt_shell> get_attribute [get_clocks ${clk_name}] full_name

pt_shell> get_attribute [get_attribute [get_clocks ${clk_name}] sources] object_class

pt_shell> get_attribute [get_cells ${cell_name}] full_name

pt_shell> get_attribute [get_cells ${cell_name}] ref_name

4.2.1.2.8  查某pin的full name

(1)

dc_shell-topo> get_attribute -quiet [get_pins cspf/bpm/rv_stpcnt/C11/Z] full_name
cspf/bpm/rv_stpcnt/C11/Z

4.2.1.2.x 相关命令

report_attribute

4.2.1.3 get_cells

4.2.1.3.1

(1)

get_cells * -hierarchical -filter "full_name =~ *iobuf0*"

(2)

pt_shell> get_cells -h * -f "@ref_name=~TM7DFF*"

4.2.1.3.2 查clk line上是否存在*DLY*类型的cell

(1)

pt_shell> get_cells [get_clock_network_objects -type cell -include_clock_gating_network * ] -filter "ref_name =~ *DLY*"

4.2.1.3.3 筛选特定ref(TM*7*)、特定inst(INST_NAME)的cell

(1)

filter_collection [get_cells * -hier -filter "ref_name =~ TM*7*"] \

"full_name=~${INST_NAME}/*"

4.2.1.4 get_pins

4.2.1.4.1 查某cell的驱动clk pin

(1)

pt_shell> get_pins -hierarchical -filter "full_name =~ pericore/mp200/iic_0/iic/main/clksel/sclout_pre_reg/* and is_clock_pin == true and defined(clocks)"
{"pericore/mp200/iic_0/iic/main/clksel/sclout_pre_reg/CLK"}

4.2.1.4.2 查连接某pin的net连接的pin

pt_shell> get_pins -leaf -of [get_nets -of [get_pins pericore/mp200/iic_0/iic/main/clksel/U5/B0] -seg]
{"pericore/mp200/iic_0/iic/main/clksel/g1039/YB", "pericore/mp200/iic_0/iic/main/clksel/U5/B0"}

4.2.1.5 get_nets

4.2.1.6 set_annotated_delay

4.2.1.7 remove_annotated_delay

4.2.1.7.1

(1)

remove_annotated_delay  -all

4.2.1.8 set_case_analysis

4.2.1.9 remove_case_analysis

4.2.1.9.1 去掉所有的case设定

(1)

remove_case_analysis -all

4.2.1.10 reset_path

4.2.1.11 remove_clock

4.2.1.12 set_load

4.2.1.13 all_fanin

4.2.1.14 all_fanout

4.2.1.15 all_fanout

4.2.1.16 filter

4.2.1.16.1 查某pin驱动的某cell是否存在

pt_shell> filter [all_fanout -from [get_pins pericore/mp200/iic_0/iic/main/clksel/U5/B0] -flat -end] "full_name =~  pericore/mp200/iic_0/iic/main/ioreg/spd0_reg/* and full_name !~ pericore/mp200/iic_0/iic/main/ioreg/stt0r_reg/*"
{"pericore/mp200/iic_0/iic/main/ioreg/spd0_reg/DATA"}

4.2.1.17 get_object_name

4.2.1.17.1 把集合变为list

(1)

pt_shell> get_object_name [all_fanout -from [get_pins pericore/mp200/iic_0/iic/main/clksel/U5/B0] -flat -end]

4.2.1.18 append_to_collection

4.2.1.18.1

(1)append_to_collection -unique TCLK_FF_out [get_pins -quiet -of [get_cells -of $CLK_PIN] -filter "direction == out and lib_pin_name != GCLK and lib_pin_name != SO"]

(2)append_to_collection -unique SCL_TCLK_FF_in $SCL_FF_DATA

4.2.1.19 size_cell

4.2.1.19.1 变更cell的驱动

(1)

pt_shell> size_cell pericore/mp200/iic_0/iic/main/clksel/g1401 TM7AND2FZAX20
Information: Invalidating logical update. (PTE-139)
Information: Sized 'pericore/mp200/iic_0/iic/main/clksel/g1401' with 'MF4TM7_Pss_V1p38_Tm40_CCS/TM7AND2FZAX20'. (NED-045)
1

4.2.1.20 remove_buf

4.2.1.20.1 删除buf

(1)pt_shell> remove_buf cspf/mc200/ocd/main/uart/uart_wetx2/I_ECO00_SP_OCDZ3
Information: Removed buffer 'cspf/mc200/ocd/main/uart/uart_wetx2/I_ECO00_SP_OCDZ3'. (NED-047)
1

4.2.1.21 insert_buffer

4.2.1.21.1 在某pin上插buf

(1)

pt_shell> insert_buffer -new_cell_names I_ECO00_SP_OCDZ3 -new_net_names N_ECO00_SP_OCDZ3 [get_pins cspf/mc200/ocd/main/uart/uart_wetx2/U3/B1 ] TM7DLY2CLX20
Warning: Library cell 'MF4TM7_Pss_V1p38_Tm40_CCS/TM7DLY2CLX20' has dont_use attribute. (NED-057)
Information: Invalidating logical update. (PTE-139)
Information: Inserted 'I_ECO00_SP_OCDZ3' at 'cspf/mc200/ocd/main/uart/uart_wetx2/U3/B1' with 'MF4TM7_Pss_V1p38_Tm40_CCS/TM7DLY2CLX20'. (NED-046)
{"cspf/mc200/ocd/main/uart/uart_wetx2/I_ECO00_SP_OCDZ3"}

4.2.1.21.2 在某pin上插inv(inv总是成对插入)

(1)

pt_shell> insert_buffer [get_pins  cspf/mc200/csc/cg/hioscctl/fmain_sel/vc_fmain_mux/uxmux20/mux2_0/D1] TM7INVCLX40 -inverter_pair 
Warning: Library cell 'MF4TM7_Pss_V1p38_T140_CCS/TM7INVCLX40' has dont_use attribute. (NED-057)
Information: Invalidating logical update. (PTE-139)
Information: Invalidating logical update. (PTE-139)
Information: Inserted 'U1' and 'U2' at 'cspf/mc200/csc/cg/hioscctl/fmain_sel/vc_fmain_mux/uxmux20/mux2_0/D1' with 'MF4TM7_Pss_V1p38_T140_CCS/TM7INVCLX40'. (NED-046)
{"cspf/mc200/csc/cg/hioscctl/fmain_sel/vc_fmain_mux/uxmux20/U1", "cspf/mc200/csc/cg/hioscctl/fmain_sel/vc_fmain_mux/uxmux20/U2"}

4.2.1.22 estimate_eco

4.2.1.22.1 查某instance的rise/fall条件下的延时(带*号的为本cell的延时)

(1)

pt_shell> estimate_eco $instance_name

4.2.1.23 remove_cell

4.2.1.23.1 删除cell

(1)

remove_cell  pericore/mp200/iic_0/sdadly/uxdlyfil0/I_ECO1_IIC_2

4.2.1.24 remove_net

4.2.1.24.1 删除net

(1)

remove_net [get_nets pericore/mp200/iic_0/sdadly/uxdlyfil0/N_ECO1_IIC_2]

4.2.1.25 connect_net

4.2.1.25.1 连接net和pin

(1)

connect_net pericore/mp200/iic_0/sdadly/uxdlyfil0/placeOptN_FE_OFN18028_n [get_pins pericore/mp200/iic_0/sdadly/uxdlyfil0/tbdly50n/NFIN]

4.2.1.26 get_lib_cells

4.2.1.26.1 查某类型的ref

(1)

pt_shell> get_lib_cells */TM7INVCLX*

4.2.1.27 get_lib_cells

4.2.1.28 set_timing_derate

4.2.1.28.1 设置clock line cell early/late

(1)

set_timing_derate -clock   -cell_delay -early  $value

set_timing_derate -clock   -cell_delay -late  $value

4.2.1.28.2 设置data line cell early/late

(1)

set_timing_derate -data    -cell_delay -early $value
set_timing_derate -data    -cell_delay -late  $value

4.2.1.28.3 设置static net early/late

(1)

set_timing_derate -static  -net_delay  -early $value
set_timing_derate -static  -net_delay  -late  $value

4.2.1.28.4 设置dynamic net early/late

(1)

set_timing_derate -dynamic -net_delay  -early $value
set_timing_derate -dynamic -net_delay  -late  $value

4.2.1.28.5 相关command

4.2.1.28.5.1 reset_timing_derate

4.2.1.28.5.1.1 resets all derating

(1)

pt_shell> reset_timing_derate

4.2.1.29 check_timing

4.2.1.29.1 报loop

(1)

pt_shell> check_timing -verbose -override_defaults loops

4.2.1.29.2

pt_shell> check_timing -verbose

4.2.1.29.3

pt_shell> check_timing -verbose -override_defaults clock_crossing

4.2.1.29.4

pt_shell> check_timing -verbose -override_defaults signal_level

4.2.1.30 redirect

Redirects the output of a command to a file.

4.2.1.30.1 rep

(1)

redirect -compress $dir/${rep_name}.list.rpt.gz {

list_designs

}

4.2.1.31 list_designs

4.2.1.31.1

(1)

pt_shell> list_designs

pt_shell> list_designs -only_used

4.2.1.32 list_libs

4.2.1.32.1

(1)

pt_shell> list_libs

pt_shell> list_libs -only_used

4.2.1.33 get_libs

4.2.1.33.1

(1)

pt_shell> get_libs *

pt_shell> report_lib $lib_name

4.2.1.34 report_annotated_parasitics (spef)

4.2.1.34.1

(1)

pt_shell> report_annotated_parasitics -check

pt_shell> report_annotated_parasitics -boundary_nets -internal_nets -pin_to_pin_nets -max_nets 1000000 -list_not_annotated

4.2.1.35 report_aocvm

4.2.1.35.1

(1)

pt_shell> report_aocvm

pt_shell> report_aocvm -coefficient

pt_shell> report_aocvm -list_not_annotated

pt_shell> report_aocvm [get_timing_paths -delay_type $MAX_MIN -pba_mode exhaustive -path_type full_clock_expanded]

4.2.1.36 report_case_analysis

4.2.1.36.1

(1)

pt_shell> report_case_analysis -nosplit

4.2.1.37 report_case_analysis

4.2.1.37.1

(1)

pt_shell> report_case_analysis -nosplit

4.2.1.38 report_clock

4.2.1.38.1

(1)

pt_shell> report_clock -nosplit

pt_shell> report_clock -skew -nosplit

4.2.1.39 report_clock

4.2.1.39.1

(1)

pt_shell> report_clock -nosplit

pt_shell> report_clock -skew -nosplit

4.2.1.40 report_disable_timing

4.2.1.40.1

(1)

pt_shell> report_disable_timing -nosplit

4.2.1.41 report_port

4.2.1.41.1

(1)

pt_shell> report_port -verbose -input_delay -output_delay -drive -wire_load -nosplit

pt_shell> report_port -nosplit -input_delay [all_inputs]

pt_shell> report_port -nosplit -output_delay [all_outputs]

pt_shell> report_port -nosplit -drive [all_inputs]

pt_shell> report_port -nosplit -wire_load [all_outputs]

4.2.1.42 report_clock_gating_check

4.2.1.42.1

(1)

pt_shell> report_clock_gating_check [get_cells -hier -filter "is_integrated_clock_gating_cell==false"] -nosp

4.2.1.43 report_exception

4.2.1.43.1

(1)

pt_shell> report_exception -nosplit

pt_shell> report_exception -nosplit -ignored

4.2.1.44 report_exception

4.2.1.44.1

(1)

pt_shell> report_exception -nosplit

pt_shell> report_exception -nosplit -ignored

4.2.1.45 report_exception

4.2.1.45.1

(1)

pt_shell> report_exception -nosplit

pt_shell> report_exception -nosplit -ignored

4.2.1.46 write_sdc

4.2.1.46.1

(1)

pt_shell> write_sdc -nosplit -compress gzip ./chk/${TOP}.${MODE}.sdc

4.2.1.47 get_timing_paths

4.2.1.47.1

(1)

pt_shell> get_timing_paths -delay min -max_paths [expr int(${CD_AOCV_SMPL_NUM})] -nworst 1 \
    -slack_lesser_than ${CD_AOCV_SMPL_VAL} -path full_clock_expanded -group *

4.2.1.48 report_global_timing

4.2.1.48.1

(1)

pt_shell> report_global_timing -delay_type $MAX_MIN -pba_mode $CD_REP_PBAMODE

pt_shell> report_global_timing -delay_type $MAX_MIN -include { non_violated } -separate_all_groups -pba_mode $CD_REP_PBAMODE

4.2.1.49 report_constraints

4.2.1.49.1

(1)

pt_shell> report_constraints -all_violators -verbose -max_delay -recovery -clock_gating_setup -nosplit -pba_mode $CD_REP_PBAMODE

pt_shell> report_constraints -all_violators -verbose -min_delay -removal -clock_gating_hold -nosplit -pba_mode $CD_REP_PBAMODE

pt_shell> report_constraint -max_fanout -all_violators -nosplit

4.2.1.50 report_min_period

4.2.1.50.1

(1)

pt_shell> report_min_period -all_violators -nosp -path_type full_clock_expanded

4.2.1.51 report_min_pulse_width

4.2.1.51.1

(1)

pt_shell> report_min_pulse_width -nosp -all_violators -path_type full_clock_expanded -input_pins -capacitance -transition_time

4.2.1.52 report_noise_parameters

4.2.1.52.1

(1)

pt_shell> report_noise_parameters

4.2.1.53 report_noise

4.2.1.53.1

(1)

pt_shell> report_noise -nosplit -above -low -slack_type height -all_violators

pt_shell> report_noise -nosplit -below -high -slack_type height -all_violators

4.2.1.54 report_si_double_switching

4.2.1.54.1

(1)

pt_shell> report_si_double_switching -nosplit -rise -fall

4.2.1.55 report_clock_timing

4.2.1.55.1

(1)

pt_shell> report_clock_timing -type latency -clock $CHK_CLK_NAME -setup -capture -nworst 2000000 -verbose -derate -crosstalk_delta -nosplit

pt_shell> report_clock_timing -type latency -clock $CHK_CLK_NAME -setup -capture -nworst 2000000 -nosplit

4.2.1.55 printvar

4.2.1.55.1

(1)

pt_shell> printvar

pt_shell> redirect -compress ./log/printvar.rpt.gz {
   printvar
 }

4.2.1.55 write_script

4.2.1.55.1

(1)

pt_shell> write_script -nosplit -output $dir/$rep_name.rep

4.2.1.56 get_timing_paths

4.2.1.56.1

(1)

pt_shell> write_script -nosplit -output $dir/$rep_name.rep

4.2.1.57 report_delay_calculation

4.2.1.57.1

(1)

pt_shell> report_delay_calculation -crosstalk -from pin -to pin

4.2.1.58 set_propagated_clock

4.2.1.58.1

(1)

pt_shell> set_propagated_clock [all_clocks]

4.2.1.59 update_timing

4.2.1.59.1

(1)

pt_shell> update_timing -full

4.2.1.60 update_noise

4.2.1.60.1

(1)

pt_shell> update_noise -full

4.2.1.61 set_annotated_delay

4.2.1.61.1

(1)

pt_shell> set_annotated_delay -max ${delay_value} -cell -from \[get_pins $START_PIN\] -to \[get_pins $END_PIN\] -increment

4.2.1.61.2 相关COMMAND

(1)

pt_shell> report_annotated_parasitics -check

(2)

pt_shell> report_annotated_parasitics -boundary_nets -internal_nets -pin_to_pin_nets -max_nets 1000000 -list_not_annotated

4.2.1.61.3 学习链接

掌握了这技巧,时序分析题再也不用求人了~ - 知乎 (zhihu.com)

4.2.1.62 set_annotated_check

4.2.1.62.1

(1)

pt_shell> set_annotated_delay -max ${delay_value} -cell -from \[get_pins $START_PIN\] -to \[get_pins $END_PIN\] -increment

4.2.2 TPS

4.2.2.1 ecoDeleteRepeater

4.2.2.1.1 删除buf

(1)

ecoDeleteRepeater -inst pericore/mp200/iic_0/iic/main/extcnt/I_ECO00_SP_IICA0_sl_3_8

4.2.2.2 ecoAddRepeater

4.2.2.2.1 插buf

(1)

ecoAddRepeater -name I_ECO01_SP_OCDZ2 -new_net_name N_ECO01_SP_OCDZ2 -term cspf/mc200/ocd/main/uart/uart_wetx2/U3/B1 -cell TM7DLY2CLX20

4.2.2.3 ecoChangeCell

4.2.2.3.1 变更cell驱动

(1)

ecoChangeCell -inst pericore/mp200/iic_0/sdadly/uxdlyfil0/I_ECO00_SP_IICA0_sl_1_13 -cell TM7BUFX10

4.3 STA Setting

4.3.1 Environment

4.3.1.1 Tool Version

4.3.1.2 setting of STA-env

4.3.1.3 SDF Condition

4.3.1.4 METASTABLE Check

4.3.2 GLOBAL SETTING

4.3.2.1 Library

4.3.2.2 OCV setting

4.3.2.2.1 设置clock line cell的derate value

set_timing_derate -clock   -cell_delay -early  $value
set_timing_derate -clock   -cell_delay -late   $value

4.3.2.2.2 设置data line cell的derate value

set_timing_derate -data    -cell_delay -early $value
set_timing_derate -data    -cell_delay -late  $value

4.3.2.2.3 设置static net的derate value

set_timing_derate -static  -net_delay  -early $value
set_timing_derate -static  -net_delay  -late  $value

4.3.2.2.4 设置dynamic net的derate value(考虑了串扰)

set_timing_derate -dynamic -net_delay  -early $value
set_timing_derate -dynamic -net_delay  -late  $value

注1:不同corner下,derate value不相同。

4.3.2.3 AOCVM coefficient setting

4.3.2.4 Variables of PT-env

4.3.2.5 xtalk_pessimism_reduction (Apply or Not)

4.3.2.6 xtalk_pessimism_reduction (Reduce parameter)

4.3.2.7 CLOCK UNCERTAINTY

4.3.2.7.1 设定jitter(只在normal下设定)

set_clock_uncertainty -setup ${SETUP_MARGIN} [all_clocks]
 set_clock_uncertainty -hold  ${HOLD_MARGIN}  [all_clocks]

4.3.2.7.2 设定jitter(只在normal下设定) 

set_clock_jitter -duty_cycle ${jitter_value} -clock [get_clocks ${clock_name}]

4.3.2.8 SDC

4.3.2.8.1 Constraint reference

4.3.2.8.2 Clock information

4.3.2.8.3 Constant pin

4.3.2.8.4 Timing Constraints ( clock domain crossing )

4.3.2.8.5 Timing Constraints ( Pin TO PIN )

4.3.2.8.6 clock gating (Non CGC)

4.3.2.8.7 Port info

4.3.2.8.8 SDCset_max_delay,set_min_delay)

4.3.2.8.9 disable_timing

4.3.2.8.10 Check SDC by Tool

4.3.2.8.11 SDC management

4.3.2.9 corner设定

五、STA Input & STA Output

5.1 STA Input

5.1.1 specification

5.1.2 Library

5.1.3 netlist

5.1.4 SDF/SPEF

5.1.5 SDC ( Timing Constraint)

5.1.X 瑞萨input file

5.1.X.1 STA式样书

5.1.X.2 Spec/impl

5.1.X.3 项目变更点

5.1.X.4 流用资料

5.1.X.4.1 流用验证项目一览表

5.1.X.4.2 流用CIESTA

5.1.X.4.3 流用Env

5.1.X.5 IO 说明

5.1.X.6 corner说明

5.1.X.7 电气特性

5.1.X.8 IP list

5.2 STA Output

六、STA Check

6.1 Timing Check

6.2 SDC Check

6.3 METASTABLE Check (S2F)

6.3.1 Description

检查以下内容

1) SPEC Inst vs CIESTA Inst是否一致 , 如不一致,Ciesta做修改。

2)所有的对象FF都是*ZMAX*的种类 。

3)FF对应的ZMAX种类,所对应的Spec都一致 。

6.3.2 Method

6.3.3 Attention

6.4 inverter chain

6.4.1 Description

检查path上连续插入的inv数量是否超过了设定要求.(If you have inverter chain , the accuracy of delay calculation will getting worse.)

6.4.2 Method

6.4.3 Attention

6.4.3.1  连续插入inv的可能原因

(1) レイアウトでFantou分離対策要.

6.5 Loop circuit

6.5.1 Description

6.5.2 Method

redirect -compress ./chk/loop.rpt.gz {
  check_timing -verbose -override_defaults loops
}

6.5.3 Attention

(1)

不论电路复杂简单,所有意图之内的Combinational loop 请用set_disable_timing 打断,所有意图之外的Combinational loop 要在RTL阶段修掉。

(2)

Combinational loop 是常规设计必须要规避的电路结构,如果不得不有,若交给工具,因为每个工具的算法不同,得到的结果会有差异,所以最好用命令设掉。Combinational loop 除对综合,形式验证,布局布线,静态时序分析有影响之外,对DFT 同样有影响。

(3)

startpoint 和endpoint是同一个DFF的情况,不算是loop,也就是没有问题。
组合逻辑出去回到组合逻辑输入的,才是有问题的loop。

(4)产生Combinational loop一般情况下是RTL的问题,个别情况下也有SDC的问题。

6.6 Generated_clock with Clock as data

6.6.1 Description

检查clk信号传输到FF/DATA。

6.6.2 Method

6.6.3 Attention

6.7 Signal voltage level

6.7.1 Description

6.7.2 Method

(1)

pt_shell> check_timing -verbose -override_defaults signal_level

6.7.3 Attention

6.8 Clock cell

6.8.1 Description

检查clock的clk line上是否插入了*DLY*类cell,因为该类cell延时较大可能会影响到clk的timing,一般不允许在clk中插入该类cell。如果发现插入了该类cell则要给出理由。

6.8.2 Method

使用以下命令检查clk line中是否插入了*DLY*类cell(个别mode不需要检查)。

pt_shell> get_cells [get_clock_network_objects –type cell –include_clock_gating_network * ] –filter “ref_name =~ *DLY*”

6.8.3 Attention

(1)在以下情况下可以允许插入*DLY*类cell:

1) 设计中故意插入,并设置了dont touch,可以通过dont touch设定查询。

2)该类cell驱动的FF/clk不是需要检查timing path(设置了false path)。

3)该类cell所在的path不是clk line。

6.9 Slew setting

6.9.1 Description

6.9.2 Method

(1)

pt_shell> report_port -verbose -input_delay -output_delay -drive -wire_load -nosplit

(2)

pt_shell> report_port -nosplit -input_delay [all_inputs]

(3)

pt_shell> report_port -nosplit -output_delay [all_outputs]

(4)

pt_shell> report_port -nosplit -drive [all_inputs]

(5)

pt_shell> report_port -nosplit -wire_load [all_outputs]

6.9.3 Attention

6.10 SDF generate command option

6.10.1 Description

6.10.2 Method

pt_shell> write_sdf -version 3.0 -no_edge -include {SETUPHOLD RECREM} \
       -no_edge_merging {timing_checks} -context none \
       -exclude {checkpins} -compress gzip ${dir}/${rep_name}.sdf
     pt_shell> write_sdf -version 3.0 -no_edge -include {SETUPHOLD RECREM} \
       -no_edge_merging {timing_checks} -context verilog \
       -no_negative_values {cell_delays net_delays} -no_internal_pins \
       -exclude {checkpins} -compress gzip ${dir}/${rep_name}.sdf

6.10.3 Attention

(x)学习链接

论 STA | 可以想到的抽SDF 相关的一切 - 腾讯云开发者社区-腾讯云 (tencent.com)

6.11 SPEF generate command option

七、STA Result & STA Debug

7.1 STA Result

7.1.1 back annotation (SPEF/SDF reading)

7.1.2 max transition

7.1.2.1 Description

7.1.2.2 Method

(1)

pt_shell> set_max_transition  ${value} [get_pins -of [get_cells -h *] -f "full_name !~ ${pin_name}"]

(2)

pt_shell> set_max_transition  ${value} [get_pins [get_clock_network_objects -type pin] -f "full_name !~ ${pin_name}"]

(3)

pt_shell> set_max_transition  ${value} [get_pins -of [get_cells -h *] -f "is_clock_pin==true"]

(4)

pt_shell> report_constraints -all_violators -nosplit -max_transition

7.1.2.3 Attention

7.1.3 max capacitance

7.1.3.1 Description

7.1.3.2 Method

(1)

pt_shell> set_max_capacitance  ${value} [get_pins -of [get_cells -h *] -f "full_name !~ ${pin_name}"]

(2)

pt_shell> set_max_capacitance  ${value} [get_pins [get_clock_network_objects -type pin] -f "full_name !~ ${pin_name}"]

(3)

pt_shell> report_constraints -all_violators -nosplit -max_capacitance

7.1.3.3 Attention

7.1.4 High Fanout Check

7.1.4.1 Description

7.1.4.2 Method

(1)

pt_shell> set_max_fanout 2.0 [ge_ports "IN*"]

(2)

pt_shell> set_max_fanout 5.0 [current_design]

(3)

pt_shell> report_constraint -max_fanout -all_violators

7.1.4.3 Attention

7.1.5 glitch noise

7.1.5.1 Description

7.1.5.2 Method

(3)

pt_shell> report_noise_parameters

(4)

pt_shell> report_noise -nosplit -above -low -slack_type height -all_violators

(5)

pt_shell> report_noise -nosplit -below -high -slack_type height -all_violators

7.1.5.3 Attention

7.1.6 double switching

7.1.6.1 Description

7.1.6.2 Method

(3)

pt_shell> report_si_double_switching -nosplit -rise -fall

(4)

set_app_var si_enable_analysis   {true}

set_app_var si_xtalk_double_switching_mode   {full_design}

7.1.6.3 Attention

(1) 学习链接

(112条消息) PT: SI引起的double switch_拾陆楼的博客-CSDN博客

PrimeTimeSI相关运用及概念 - IT技术网-学习WEB前端开发等IT技术的网络平台 (173it.cn)

7.1.7 Timing result

7.1.7.1 Internal timing results

7.1.7.1.1 Description

normal需要检查以下的timging结果.

(1) Setup 

(2) Hold  

(3) Recovery 

(4) Removal  

(5) Gating-setup 

(6) Gating-hold 

(7) AOCVM hold

(8) Metas-FF setup margin

(9) Big-skew hold margin 

7.1.7.1.2 Method

(1)

pt_shell> report_timing -delay_type ${type_name} -input_pins -nosplit -transition_time -capacitance -crosstalk_delta -derate \
    -max_paths 25000 -nworst 1 -pba_mode ${pba_mode_name}

(2)

pt_shell> report_constraints -all_violators -verbose -max_delay -recovery -clock_gating_setup -nosplit -pba_mode ${pba_mode_name}

(3)

pt_shell> report_constraints -all_violators -verbose -min_delay -removal -clock_gating_hold -nosplit -pba_mode ${pba_mode_name}

(4)

pt_shell> report_timing -delay_type ${type_name} -include_hierarchical_pin -path_type full_clock_expanded \
      -input_pins -nosplit -transition_time -capacitance -crosstalk_delta \
      -group **clock_gating_default** -slack_lesser_than inf -max_paths 100 -nworst 1 -derate -pba_mode ${pba_mode_name}

(5)

pt_shell> report_timing -delay_type ${type_name} -include_hierarchical_pin -path_type full_clock_expanded \
      -input_pins -nosplit -transition_time -capacitance -crosstalk_delta \
      -group **async_default** -slack_lesser_than inf -max_paths 100 -nworst 1 -derate -pba_mode ${pba_mode_name}

(6)

pt_shell> report_timing -delay_type ${type_name} \
      -input_pins -nosplit -transition_time -capacitance -crosstalk_delta \
      -group **default** -slack_lesser_than inf -max_paths 100 -nworst 1 -derate -pba_mode ${pba_mode_name}

7.1.7.1.3 Attention

7.1.7.2 min_pulse_width

7.1.7.2.1 Description

全称为最小脉冲宽度检查。经常用在时序器件或者memory上面。用于检查通过某pin(例如FF的clk)的时钟脉冲宽度(高电平)是否满足要求。

(1)  影响时钟脉冲宽度的因素:

1) 一般情况下,由于cell本身有变异,rise和fall delay不相同,这样可能会造成时钟信号脉冲宽度减小;

2) 由于net上的noise影响;

(2)  修复min pulse width的violation:

1) 使用rise和fall delay相同的buf;

2) clk line上插inv:

3) 修正noise;

7.1.7.2.2 Method

(1)

pt_shell> set_min_pulse_width 2.0 [get_clocks CK1]

(2)

pt_shell> set_min_pulse_width -low 2.5 U1/Z

(3)

pt_shell> report_min_pulse_width -nosp -all_violators -path_type full_clock_expanded -input_pins -capacitance -transition_time

(4)

pt_shell> report_min_pulse_width -path_type full_clock_expanded [get_pin ff2/CP]

(5)

pt_shell> report_const -nosp -all_vio

(6)

pt_shell> report_global_timing -include {inter_clock} -format wide -significant_digits 3 -delay ${value}

(7)

pt_shell> report_min_pulse_width -nosp -all_vio -path full_clock_exp -input -net -tran -cap

(8)

pt_shell> report_constraint -nosp -all_vio -min_period

7.1.7.2.3 Attention

(1) 学习链接

1) 论STA | min pulse width - 腾讯云开发者社区-腾讯云 (tencent.com)

7.1.7.3 min_pulse_width(LowSpeed追加)

7.1.7.4 min_period

7.1.7.4.1 Description

min period全称为最小周期检查。为什么要有这个检查呢? 我们在实际设计中经常会碰到这种情况,通常在时序器件上,尤其是memory,如果我们的memory,它最高只能工作到800Mhz频率,但是我们却希望它能工作到1Ghz的频率,这时就会出现min period的violation。

min period的要求一般定义在时序库文件lib的clock pin上,如下图所示:

pin(CLK){

direction: input ;

capacitance: 1.2;

min period: 1.25

}

上面描述中的min period: 1.25代表着到达CLK pin的所有clock需要至少1.25ns周期,如果不满足该条件的话,工具会显示violation.

7.1.7.4.2 Method

(1)

set_timing_derate  -min_period

(2)

(3)

pt_shell> report_min_period

(4)

pt_shell> report_min_period -path_type full_clock -derate ${FF}/CLK

7.1.7.4.3 Attention

7.1.7.5 Session

7.1.7.6 AC-Timing

7.1.7.7 KOBETSU-Timing

7.1.7.8 log

7.2 STA Debug

7.2.1 STA Debug Method

7.2.1.1 某path报不出(检查某FF的clk 是否存在于timing path中)

7.2.1.1 report_timing报path,结果是该path为No constrained paths.

pt_shell> report_timing -th [get_pins $FF_name/CLK] -nosplit

7.2.1.2 结果是该path为No constrained paths.

7.2.1.3 设置timing_report_unconstrained_paths为true

pt_shell> set timing_report_unconstrained_paths true
true

7.2.1.4 报path exception,找出该path为No constrained paths的原因

pt_shell> report_timing -th [get_pins $FF_name/CLK] -nosplit -exceptions all

7.2.1.5 原因一般有以下:

(1)该path中某point在别处被设置了false path。

(2) path中某point设了case,

(3) path中某point设了disable

(4) FF没有clock

7.2.2 查出经过某point的所有存在timing vio的path,并作出对应的SDC

7.2.2.1 报出所有timing vio path

pt_shell> report_timing -start_end_pair -from [ get_pins ${dir}/*_reg_*_/CLK }] -to [get_pins  ${dir}/reg_*_/DATA ] -path_type  summary -nosplit

7.2.2.2 根据结果作成SDC(set_max_delay/set_min_delay)

如果path中有FF,则path中不要包括clk line,path要从FF/Q端开始,以免影响到clk line。

7.2.2.3 注意事项

一般此类path的都是point中带有*号的,可以报出许多path,报timing的时候只报最差的,除最差的之外,其他path可能也有timing vio。

此类SDC要在第一次PR前交给PR,此类设置是根据流用制品出现的延时较大的path,在新制品中提前设置好。随着项目的推进可以依据具体情况添加设置,例如项目中发现某path无法通过ECO修正,可以设置max delay 。

此类设置首先要在流用制品文件中查找。认真确认所要添加的SDC,如果此时漏添加可能会导致后期有path的延时很大且难以debug。

7.2.3 Timing ECO Flow

7.2.3.1 ECO flow

(1) 找到存在timing vio的path;

(2) check互相影响的path;

(2) 确定ECO位置;

(3) 制作ECO CMD;

(4) 起session,检查ECO后的结果;

(5) run对应的全部corner;

(6) 检查ECO CMD是否全部正确执行;

(7) 全部run,检查结果;

7.2.3 Fix Timing Method

7.2.4.1 架构阶段

7.2.4.1.1 缓和Spec value

7.2.4.2 RTL 阶段

7.2.4.3 Synthesis 阶段

7.2.4.3.1  对crital path设置group_path

7.2.4.3.1.1 Description

某些path的timing vio在STA\PR阶段难以fix,此时可以将这些path在综合阶段设置统一的group_path,然后设置margin,在综合阶段就开始对这些path进行优化以满足timing.

7.2.4.3.1.2 Example

(1) Example1

Step1:

current_scenario ${scenario_name}

注:此scenario为存在timing vio的scenario.

Step2:

group_path -name ${group_name} -from [get_cells * -hierarchical -filter  "full_name =~  ${dir_name}/*reg* && is_hierarchical == false"] -to [get_cells * -hierarchical -filter  "full_name =~ ${dir_name}/*reg* && is_hierarchical == false"]

Step3:

set_path_margin ${margin_value} -from [get_cells * -hierarchical -filter  "full_name =~ ${dir_name}/*reg* && is_hierarchical == false"] -to [get_cells * -hierarchical -filter  "full_name =~ ${dir_name}/*reg* && is_hierarchical == false"]

Step4:

all_scenarios
set_active_scenarios -all

7.2.4.3.1.3 Attention

7.2.4.4 STA 阶段

7.2.4.4.1  insert buf

7.2.4.4.2 size cell

7.2.4.4.3 insert inv

7.2.3.4 变更OCV mode

7.2.4.5 PR 阶段

7.2.4.5.1 insert dummy cell

增加load

7.2.4.5.2 PR时设置SDC

八、Question

8.1 原理 Type

8.1.1 std cell、IO buf的电压受什么控制?

8.2 Env Type

8.2.1 Library Type

8.2.1.1 lib中cell的面积单位怎么查询?面积单位是什么?

答:看cell 里面的 area attribute, 默认是 um^2 。

8.2.2 mode & OCV Type

8.2.2.1 为什么不同mode下跑的corner不同?

8.2.2.2 什么时候采用OCV,什么时候采用no_OCV?

一些检查项目(如duty模式)不需要再OCV模式下。

8.3 Command Type

8.3.1 set_clock_latency/set_multicycle_path在什么时候设定, set_clock_latency的值如何选取?

8.4 SDC Type

8.4.1 chip级的sdc和IP级的sdc分别怎样设定?

8.4.2 set_clock_jitter的使用?

8.5 Check Type

8.5.1 Inverter Chain number为何不能超过20?

8.5.2 min pulse width的violation为什么在scan mode下不检查?

8.6 Timing Type

8.6.1 Timing path的计算原理?

8.6.2 hold vio在什么阶段修复?

8.6.3 如何辨别真假path?

8.6.4 如何辨别真假path?

九、Others

9.1 STA 文件类型

9.1.1 Input File

9.1.1.1 SPEF

9.1.2 SDF

9.1.2.1 通信协议

9.1.2.2 通信协议

9.2 MCMM

9.2.1 scenario

9.2.2 Multi Mode

9.2.3 Multi Corner

一颗健壮的IC芯片应该具有能屈能伸的品质,他需要适应于他所在应用范围内变化的温度、电压,他需要承受制造工艺的偏差,这就需要在设计实现过程中考虑这些变化的温度、电压和工艺偏差。

在STA中,用library PVT、RC corner跟OCV来模拟这些不可控的随机因素。在每个工艺结点,通过大量的建模跟实测,针对每个具体的工艺,foundary厂都会提供一张推荐的timingsignoff表格, 建议需要signoff的corner及各个corner需要设置的ocv跟margin。这些corner能保证大部分芯片可以承受温度、电压跟工艺偏差,Timing sign-off corner=libraryPVT+ RC corner + OCV

9.2.3.1 PVT

PVT也称为Operating condition,是STA一个基本且重要的概念,在library的表头会有operating condition的定义,如下图,其中『ss0p81vm40c』是这个operating condition的名字,通常这个名字是有意义的,它会标示出该lib对应的电压跟温度,如0p81对应于voltage:0.81,m40c对应于temperature:-40度。

在做STA分析时,operating condition通常通过lib读入,如果多个library中的operating condition不同,通常用第一个读入的library中定义的operating condition。也可以用命令设置/定义operating condition,不同的工具有不同的实现方式,如:set\_operating\_condition。在debug环境时可以report\_design来check当前所用的operating condition。

9.2.3.1.1 P-process

IC制造工艺本身的不完美,使得制造偏差不可避免,在library中会用一个百分比来表示工艺偏差,如process:1表示没偏差。在沉积或参杂过程中,杂质浓度密度、氧化层厚度、扩散深度都可能发生偏差,从而导致管子的电阻跟阈值电压发生偏差;光刻过程中由于分辨率的偏差会导致管子的宽长比产生偏差。而这些偏差,都会导致管子性能的差异。

9.2.3.1.2 V-voltage

管子的延时取决于饱和电流,而饱和电流取决于供电电压。且不论多电压域芯片,就单电压芯片而言,电池的供电电压本身就在一个范围内变化,再加上片外或片上voltage regulator的误差、再加上IR,一个芯片上的每个管子都可能工作在不同电压下,从而性能也有所差别。

9.2.3.1.3 T-temperature

在日常操作中,IC芯片必须适应温度不恒定的环境,当芯片运行时,由于开关功耗、短路功耗和漏电功耗会使芯片内部的温度发生变化。温度波动对性能的影响通常被认为是线性的,但在深亚微米温度对性能的影响是非线性的。对于一个管子,当温度升高,空穴/电子的移动速度会变慢,使延时增加,而同时温度的升高也会使管子的阈值电压降低,较低的阈值电压意味着更高的电流,因此管子的延时减小。而通常温度升高对空穴/电子移动速度的影响会大于对阈值电压的影响,所以温度升高管子的延时呈增加趋势。但是并不是温度越低管子的延时就越小,晶体管有温度翻转效应,当温度低到某个值之后,随着温度的降低,管子的延时会增加,至于温度翻转点跟具体的工艺相关。(引用:巴山夜雨涨秋池,邀君共学PVT:STA之PVT - 极术社区 - 连接开发者与智能计算生态 (aijishu.com))

9.2.3.1.4 Example

9.2.3.2 RC corner

这里的RC指gate跟network的寄生参数,寄生参数抽取工具根据电路的物理信息,抽取出电路的电阻电容值,再以寄生参数文件输入给STA工具,常见的寄生参数文件格式为SPEF。(引用:抽刀断水水更流,RC Corner不再愁:STA之RC Corner - 极术社区 - 连接开发者与智能计算生态 (aijishu.com))

集成电路中是多层走线的,专业术语叫metal layer,不同工艺有不同层metal layer,任何两层metal layer间由介电材料隔离,『走线』通过过孔(VIA)连接。Width跟Spacing是衡量绕线的两条最重要的物理设计规则,它们随着工艺的进步逐步减小。 介电材料、绕线材料、线间距、线宽及线的厚度这些物理特性决定了network的RC值。

9.2.3.2.1 Network电容组成

(1) 耦合电容:Coupling  capacitance=e*T/S

(2) 表面电容:Surface capcitance=e*W/H

(3) 边缘电容:Fringe capcitance

9.2.3.2.2 决定容值的因素

(1) 介电常数:e

(2) 线宽:W

(3) 线厚:T

(4) 线间距:S

(5) 介电材料的厚度:H

随着工艺进步,W, S, T 逐代递减,表面电容跟随减小,耦合电容随之增加,耦合电容在总电容中占比增加,当线厚 T 一定时为了减少耦合电容要么增加线间距要么减小介电常数。通常为了减小噪声敏感信号线(如clock net)上的耦合电容,在物理实现时会人为增加对应信号的线宽及线间距,俗称NDR。要减小介电常数需要从材料入手,从 .18开始引入low K介电材料。

9.2.3.2.3 Network电阻

R=r/W*T, r为电阻率,除了跟线宽 W 和线厚 T 相关之外,还跟温度相关,随着温度的上升而增大。

由上面的分析可知,Network的单位电容和单位电阻是不可能同时最大或同时最小的。有了这些铺垫,来看一下不同工艺结点是如何定义RC corner的。

90nm 之前,Cell delay占主导,Network电容主要是对地电容,STA只需要两个RC corner即可:

  • Cbest(Cmin): 电容最小电阻最大
  • Cworst(Cmax):电容最大电阻最小

90nm 之后,netdelay的比重越来越大,而且network的耦合电容不可忽略,所以又增加了两个RC corner:

  • RCbest(XTALK corner): 耦合电容最大,(对地电容*电阻)最小
  • RCworst(Delay corner): 耦合电容最小,(对地电容*电阻)最大

9.2.3.3 OCV

set_operating_conditions -analysis_type on_chip_variation

9.3 BUS 协议与时序

9.3.1 I2C

9.3.2 I3C

9.3.2.1 通信协议

9.3.2.2 时序要求

9.3.2.3 电气特性

9.3.2.4 时序debug

9.3.2.* 注意事项

(1)I3C的clock period必须是internal clock period的整数倍吗?在slave/master时,SCL 的period是否相同?

(2)I3C的clock可以超过电气特性里设定的max value吗?

(3)在不同mode下,I3C的clock period是不同的吗?

9.3.3 USB FS

9.3.4 CAN FD

9.3.5 SPI

9.3.6 SCI

9.3.7 SSI

9.3.8 QSPI

9.3.9 LPUART

9.4 SI(signal integrity)理论

Noise/xtalk/SI/Glitch 理论

9.4.1 SI简介

9.4.1.1 基本概念

9.4.1.1.1 噪声(noise)

噪声是指影响芯片正常运行的不良或无意的现象。在纳米技术中,噪声会影响功能或器件的时序。

9.4.1.1.2 串扰(crosstalk)噪声

串扰噪声是指两个或多个信号之间无意识的耦合。串扰噪声是由芯片上相邻信号之
间的电容耦合引起的,这会导致一个网络的高低电平切换,从而对耦合信号产生意外影响。受影响的信号称为受害者(victim),而产生影响的信号称为攻击者(aggressor)。请注意,两个耦合的网络可能会相互影响,并且通常一个网络可能既是受害者又是攻击者。相关的噪声和串扰分析技术,即毛刺分析和串扰分析,可用于静态时序分析中。

广泛地讲,串扰会带来两种类型的噪声效应:毛刺(glitch)是指由于相邻攻击者电平切换的耦合而在稳定受害者信号上产生的噪声;以及由于受害者电平切换与攻击者电平切换的耦合而导致的时序变化(串扰增量延迟)。接下去的两小节将介绍这两种类型的串扰噪声。

9.4.1.1.3 毛刺(glitch)

毛刺(glitch)是指由于相邻攻击者电平切换的耦合而在稳定受害者信号上产生的噪声;

9.4.1.1.4 xtalk

由于受害者电平切换与攻击者电平切换的耦合而导致的时序变化(串扰增量延迟),

9.4.1.1.5 noise和xtalk之间区别

noise是指静态信号(恒0或恒1)被干扰而引起的毛刺;
xtalk指两个变化相反的信号相互干扰叠加引起的延时,对于setup来讲,考虑变化相反的影响,对于hold来讲,考虑变化相同的影响。

9.4.1.1.6 压摆率

slew rate 就是电压转换速率(Slew Rate),简称压摆率。其定义是在1微秒时间里电压升高的幅度,就是方波来测量时就是电压由波谷升到波峰所需时间,单位通常有V/s,V/ms和V/μs三种。

9.4.1.1.7 噪声容限

输入信号上叠加的噪声电压只要不超过允许值,就不会影响电路的正常逻辑功能,这个允许值称为噪声容限(抗干扰能力)。噪声容限有两种类型:低电平噪声容限和高电平噪声容限。

噪声容限越大,抗干扰能力越强。

VNH高电平噪音容量
VNL低电平噪音容量
VOH输出高电平(min:允许的最小值)
VOL输出低电平(max:允许的最大值)
VIH输入高电平(min:允许的最小值)
VIL输入低电平(max:允许的最大值)

9.4.2 Crosstalk  Analysis

9.4.2.1 串扰毛刺分析

9.4.2.2 串扰延迟分析

9.4.3 Env设定

9.4.4 SI Result Check & Debug

9.4.3.1 SI Variable Setting

set_app_var si_enable_analysis                                           
  set_app_var si_xtalk_delay_analysis_mode                                 
  set_app_var si_xtalk_double_switching_mode                               
  set_app_var si_filter_accum_aggr_noise_peak_ratio                        
  set_app_var si_noise_update_status_level                                 
  set_app_var si_noise_composite_aggr_mode                                
  set_app_var si_xtalk_composite_aggr_mode                                 
  set_app_var si_xtalk_composite_aggr_quantile_high_pct                    
  set_app_var si_noise_immunity_default_height_ratio                       
  set_app_var si_filter_per_aggr_noise_peak_ratio                         
  set_app_var si_xtalk_composite_aggr_noise_peak_ratio                    
  set_app_var si_ccs_aggressor_alignment_mode                             
  set_app_var si_analysis_logical_correlation_mode                        
  set_app_var si_ccs_use_gate_level_simulation                          
  set_app_var si_noise_slack_skip_disabled_arcs                           
  set_app_var si_xtalk_exit_on_max_iteration_count

9.4.3.2 SI Result Check

(1)

report_noise_parameters

(2)

report_noise -nosplit -above -low -slack_type height -all_violators

(3)

report_noise -nosplit -below -high -slack_type height -all_violators

(4)

report_si_double_switching -nosplit -rise -fall

(5)

report_delay_calculation -crosstalk -from ${pin_name} -to ${pin_name}

9.4.3.3 SI Result Debug

9.4.5

9.5 Memory 原理与时序

9.5.1 Code Flash

9.5.2 Data Flash

9.5.3 SRAM (parity)

9.5.4 SRAM ECC

9.6 SDC

9.6.1 Clock Defination

9.6.1.1 create_clock

9.6.1.1.1 Description

9.6.1.1.2 Method

9.6.1.1.3 Attention

9.6.1.2 create_generated_clock

9.6.1.2.1 Description

9.6.1.2.2 Method

9.6.1.2.3 Attention

9.6.1.3 set_clock_sense

9.6.1.3.1 Description

9.6.1.3.2 Method

9.6.1.3.3 Attention

(x) 学习链接

clock sense和analysis mode (bbsmax.com)

9.6.1.4 set_clock_uncertainty

9.6.1.4.1 Description

9.6.1.4.2 Method

(1)

9.6.1.4.3 Attention

9.6.2 Port Defination

9.6.3 Exception

9.6.3.1 set_false_path

9.6.3.1.1 Description

set_false_path 是用来设置 timing path,表示不用 check 这些 path 的 timing,但是依然会去计算这些 path 上的delay。

set_false_path 只对数据路径有效,不可用在clk line上。

9.6.3.1.2 Method

(1) set_false_path -from [get_pins $pin_name]  -to [get_pins $pin_name]

9.6.3.1.3 Attention

9.6.3.2 set_multicycle_path

9.6.3.2.1 Description

9.6.3.2.2 Method

9.6.3.2.3 Attention

9.6.3.3 set_clock_gating_check

9.6.3.3.1 Description

9.6.3.3.2 Method

9.6.3.3.3 Attention

9.6.3.4 set_case_analysis

9.6.3.4.1 Description

9.6.3.4.2 Method

9.6.3.4.3 Attention

9.6.3.5 set_disable_timing

9.6.3.5.1 Description

set_disable_timing 是用来设置 timing arc,表示打断这条时序弧,不去计算这段时序弧的 delay,并且所有经过这段时序弧的 path 都会被打断(要慎用)。

9.6.3.5.2 Method

(1)set_disable_timing [get_cells $cell_name] -from $cell_pinA -to $cell_pinB

(2) set_disable_timing \
  -from SETB -to RESETB \
  [filter_collection [get_cells * -hier -filter "ref_name =~ TM*7*"] \
    "full_name=~${INST_NAME}/*"]

9.6.3.5.3 Attention

9.6.3.6 set_load

9.6.3.6.1 Description

9.6.3.6.2 Method

(1)

set_load 0 -allow_negative_cap -subtract_pin_load [get_nets -h *]

9.6.3.6.3 Attention

9.6.3.7 set_disable_clock_gating_check

9.6.3.7.1 Description

命令:set_disable_clock_gating_check/remove_disable_clock_gating_check;

作用:对指定的cell/pin/lib_cell/lib_pin设置是否进行clock gating的时序检查;

9.6.3.7.2 Method

(1)

set_disable_clock_gating_check [get_pins {pin_name}]

9.6.3.7.3 Attention

(1)对于工具插入或者手动插入的ICG std cell,该命令无论是否设置到这个ICG cell来禁止工具对其En端的clock gating的时序检查,工具都会进行检查;

(2)对于非ICG的std cell,例如与门,或门以及手动搭建的latch+与门的结构,可以通过该命令来禁止或者启动时钟的gate端的时序检查;(一般时钟的静态切换才会用到or或者and作为clock gate cell)

(3) 使用write_sdc命令时,set_disable_clock_gating_check/remove_disable_clock_gating_check不会被成功写入sdc文件,可使用write_script替换write_sdc命令;同样的,在后端工具读取sdc文件时,如果含有set_disable_clock_gating_check/remove_disable_clock_gating_check时不建议使用read_sdc命令,建议使用source命令;

(x) 学习链接

IMPL24. set_disable_clock_gating_check(write_sdc Vs. write_script)命令解析 - 知乎 (zhihu.com)

9.6.3.8 set_annotated_transition

9.6.3.8.1 Description

命令:;

作用:Sets the transition time annotated on specified pins in the current design.

9.6.3.8.2 Method

(1)

set_annotated_transition 0.01 [ get_pins -of [get_cell * -h -f "is_hierarchical == false"] -f "direction == out" ]

(2)

set_annotated_delay -cell -load_delay cell 0.3 -from [get_pins -of [get_cell $leaf_cell] -f "direction==in"] -to [get_pins $pin_name]

9.6.3.8.3 Attention

9.6.4 Top level sdc gen flow

9.6.4.1 input file

9.6.4.1.1 IP sdc

9.6.4.2 gen flow

9.6.4.3 output file

9.6.4.4 result check

9.6.5 特殊约束

9.6.5.1 异步时钟的约束

9.6.5.2 异步path的约束

9.6.5.2.1 异步path常见的SDC Command

9.6.5.2.1.1 set_max_delay

9.6.5.2.1.1.1 Description

9.6.5.2.1.1.2 Example

9.6.5.2.1.1.3 Attend

(1)设置max delay的start point 为Launch CK或Launch DFF/CK时,工具分析方式一致,都会计算Launch CK的latency.

(2)设置max delay的endpoint 为Capture CK或Capture DFF/D时,工具分析方式一致,都会计算Capture CK的latency, uncertainly和Capture DFF的setup time. 甚至会分析CRPR的悲观影响。

(3)设置max delay的from point和end point为非timing path的start point,endpoint时,为timing path中间的point,则会覆盖完整timing path这个路径的检查,认为不存在这个完整的timing path,只分析max约束的不完整的timing path。

9.6.5.2.1.1.4 学习链接

IMPL13.异步路径上的Max Delay分析 - 知乎 (zhihu.com)

9.6.5.2.2 异步fifo Gray Code的约束

9.6.5.2.2.1

9.6.5.2.2.2

9.6.5.2.2.3

9.7 时序分析中的一些基本概念

9.7.1 时钟相关

时钟的时序特性首要分为颤动(Jitter)、偏移(Skew)、占空比失真(Duty Cycle DistorTIon)3点。关于低速规划,根本不必考虑这些特征;关于高速规划,因为时钟自身的原因形成的时序问题很遍及,因此有必要重视。

9.7.1.1 时钟颤动 (clock jitter)

常见的颤动参数有3种:

9.7.1.1.1 周期颤动(Period Jitter)

测量实时波形中每个时钟和数据的周期的宽度。这是最早最直接的一种测量抖动的方式。这一指标说明了时钟信号每个周期的变化。

9.7.1.1.2 周期差颤动(cycle-to-cycle Jitter)

测量任意两个相邻时钟或数据的周期宽度的变动有多大,通过对周期抖动应用一阶差分运算,可以得到周期间抖动。这个指标在分析锁相环性质的时候具有明显的意义。

9.7.1.1.3 时间间隔误差(timer interval error,TIE)

测量时钟或数据的每个活动边沿与其理想位置有多大偏差,它使用参考时钟或时钟恢复提供理想的边沿。TIE在通信系统中特别重要,因为它说明了周期抖动在各个时期的累计效应。

9.7.1.2 时钟偏斜 (clock skew)

9.7.1.3 占空比失真DCD (Duty Cycle DistorTIon)

占空比失真抖动是当时钟信号占空比不是50%时,由于过零点的位置不同所带来的测量抖动。其产生的原因有两种,其一,信号上升沿的摆率和下降沿的摆率不同,其二,由于判决阈值偏高或偏低。DCD通常具有和DDJ类似的两个分立脉冲形式的直方图,并且两个峰的高度相同。

9.7.1.4 信号扇入/扇出 (fan-in/fan-out)

数字IC-ME-STA相关推荐

  1. 数字IC设计学习笔记_静态时序分析STA_ STA基本概念

    数字IC设计学习笔记 STA基本概念 1. STA基本概念 2. 时序弧概念 Timing Arc 3. 建立时间和保持时间概念 4. 时序路径概念Timing Path 5. 时钟域概念clock ...

  2. verilog hdl数字集成电路设计原理与应用_数字IC设计经典书籍推荐

    数字IC设计流程很复杂,从前端到后端,也有很多职位.在这里整理了个数字IC各个环节的经典必读书籍.市面上的书籍种类纷繁复杂,这里每种只推荐两本左右,如果需要,建议知识类的书籍还是购买正版,尊重作者,也 ...

  3. 艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)

    关注并标星大同学吧 每天1次,打卡学习 积累1个新知识,增1分职场底气 作者称谓:Tao涛 个人介绍:摸爬滚打多年的数字后端工程师 微信公众号:数字后端IC芯片设计 半导体知识分享第29期 技能升级, ...

  4. 数字IC设计流程总结

    IC设计是一个很复杂漫长的过程,笔者以下图进行总结,其中后端总结的很模糊,后续了解学习后再进行补充.笔者会根据自己的理解,一步步的分享自己理解的设计流程.其中难免有问题错误,望同学老师指出,感谢!哔哩 ...

  5. 数字IC后端需要学习什么?需要具备哪些技能?

    数字后端处于数字IC设计流程的后端,属于数字IC设计类岗位的一种.在IC设计中,后端设计的人数占比算是比较多的,并且随着芯片行业的不断发展,后端工程师的人才需求未来会越来越多. 数字后端的目的 **数 ...

  6. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  7. 数字IC设计学习笔记_Formality 形式验证

    数字IC设计学习笔记 Formality 形式验证 1. 基本特点 2. Reference Design 和Implementation Design 3. container 4. 读入共享技术库 ...

  8. 数字IC设计的第一步——Synopsys EDA Tools的安装

    目录 简述 安装环境和文件 1. 环境 2. 文件 安装包链接 1. 环境 2. 文件 安装前踩坑 安装步骤 1. 安装前的准备工作 2. 用Synopsys Installer安装 3. 在wind ...

  9. 建议收藏:不能不刷的100道数字IC笔/面试题!

    一.IC设计流程及相应EDA开发工具 前端设计(逻辑设计) 1.规格制定 根据客户需求(具体的功能和性能要求)制定芯片规格Spec 2.详细设计 设计方案,具体实现架构,模块划分 3.HDL编码 将实 ...

  10. 数字IC设计工程师笔试面试经典100题

    1:什么是同步逻辑和异步逻辑? 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系.同步时序逻辑电路的特点:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来 ...

最新文章

  1. 免费学习AI公开课:打卡、冲击排行榜,还有福利领取
  2. jQuery中的closest()和parents()的差别
  3. 【Storage】Ubuntu LVM 安装配置
  4. linux top 命令信息解释
  5. 算法 - 输出一个字符串的全排列(C++)
  6. yolov5训练_YoloV5模型训练实战教程:Kaggle全球小麦检测竞赛
  7. Android记录一个setTextColor常见的一个bug
  8. boost::hana::flatten用法的测试程序
  9. SAP Cloud for Customer的inscreen_dataflow处理方式
  10. 模板库 | 销售管理类报表,邀您提反馈
  11. 《Python Cookbook 3rd》笔记(3.7):无穷大与 NaN
  12. 一篇夯实一个知识点系列--python实现十大排序算法
  13. python构建简单神经网络_Python构建一个简单的神经网络,Pytorch,搭建
  14. C#绘图工具之Move
  15. 12c集群日志位置_关于Oracle 12c的集群监控(CHM)
  16. 语法高亮_Qt官方示例语法高亮器
  17. python绘图技巧(高清图)
  18. Eigen教程3----矩阵、向量以及标量的运算,转置、共轭以及伴随矩阵
  19. iOS——UINavigationController简单实用以及内存警告处理过程
  20. 环保大数据在环境污染防治管理中的应用

热门文章

  1. cocos-creator游戏源码
  2. 从1家店到200家,从单店月入3k到30w,只是选择了天猫店群
  3. 惠普Envy x2笔记本U盘安装win10系统图文教程
  4. 2022-2027年中国海岛纤维行业市场深度分析及投资战略规划报告
  5. 信息安全实验-古典密码算法
  6. EL表达式 分割字符串
  7. 笔记本不用U盘怎么重装系统Win7
  8. Airtest IDE打不开浏览器
  9. Android之文字描边
  10. Rocky 9.1操作系统实现zabbix6.0的安装部署实战