-
2021-08-24 16:21:19
推荐西南交通大学邸志雄老师的网络公开课 《数字集成电路静态时序分析基础》
链接:https://www.bilibili.com/video/BV1if4y1p7Dq静态时序分析的经典书籍:《Static Timing Analysis for
Nanometer Designs》 J. Bhasker • Rakesh Chadha,下面链接为经过热心网友翻译的
链接:https://www.zhihu.com/people/zhao-jun-jun-19/posts?page=2更多相关内容 -
STA静态时序分析总结与归纳
2021-07-29 22:02:13静态时序分析STA对于同步时序电路必不可少,通过静态时序分析,一方面可以增加系统稳定性减少亚稳态的发生,另一方面可以最大限度的提升系统工作频率。因此,对静态时序相关概念的理解,以及掌握静态时序分析的方法...文章目录
什么是静态时序分析?
首先,静态时序分析分析是基于同步电路设计模型的。静态时序分析STA对于同步时序电路必不可少,通过静态时序分析,一方面可以增加系统稳定性减少亚稳态的发生,另一方面可以最大限度的提升系统工作频率。因此,对静态时序相关概念的理解,以及掌握静态时序分析的方法具有重要意义:相关参数
静态时序的分析,涉及到了众多基础概念;在进行静态时序分析之前,应该先理清基础概念
1.建立时间和保持时间的分析
一般来讲,触发器会在有效时钟沿来临时对数据进行采样并产生一个相应的输出,但是由于实际器件的工艺和制造等问题存在,将会无法瞬间完成数据的采集和输出。因此,在这一过程中,需要将数据在时钟沿前后一段时间内均保持稳定,即建立时间和保持时间。
建立时间:就是时钟有效沿到来之前数据必须保持稳态的最小时间Tsu.
保持时间:时钟有效沿到来之后数据必须保持稳态的最小时间Th.如下图所示:
2.发射沿和锁存沿
发射沿(Launch Edge):时序分析起点,第一级寄存器数据变化的时钟边沿,也是静态时序分析的起点。
锁存沿(Latch Edge):时序分析终点,数据锁存的时钟边沿,是静态时序分析的终点。
可见下图描述便于理解3.数据输出延时(Tco)
数据输出延时指的是当时钟触发(一般可认为是第一个寄存器的时钟沿触发时刻)开始到有效数据输出**(第一个寄存器的Q端数据开始输出(有可能变化,也有可能不变化))**的器件内部所有延时的总和。见图
4.数据到达时间(数据路径,Data Arrival Time)
输入数据在有效时钟沿后到达目的寄存器所需要的时间,可大致划分为:时钟沿到达第一级寄存器所需时间(Tclk1),寄存器内部延迟时间(Tco),数据输出后传输到第二级寄存器所需时间(Tdata).
其中Tdata可细分为:
组合逻辑延时Tcomb_logic:数据经过组合逻辑部分所需的时间;
线网延时Tnet:数据在线上传输所需的时间,一般较小可以忽略;
如图描述
同时可用下图配合理解
该处使用的url网络请求的数据。
5.时钟到达时间(时间路径,Clock Arrival Time)
时钟到达时间就是指时钟从latch edge到达目的寄存器(destination register)输入端所用的时间。
5.时钟偏斜(Tskew)
指同一个时钟沿(clk)和分别到达两个寄存器所需的时间之间的差值(Tclk1和Tclk2的差值).
公式为:Tskew=Tclk2-Tclk1.6.数据需求时间(Data Require Time)
细分为 (Setup-Data Require Time)
( Hold-Data Require Time )Setup-Data Require Time
由5可知,Clock Arrival Time = Latch +Tclk2.
因此 Data Required Time = Latch+Tclk2-Tsu (忽略建立不定态)。Hold-Data Require Time
由5可知,Clock Arrival Time = Latch +Tclk2. 因此 Data Required Time = Latch+Tclk2+Tsu (忽略保持不定态)。
7.建立裕量(Setup Slack)
首先给出示意图:
公式推导:
为了避免亚稳态(以后会专门写一篇关于亚稳态的文章)的发生,我们需要让数据在第二级寄存器有效沿之前达到稳态,具体是在哪个时刻之前呢,就是上面最开始讲的建立时间Tsu。
通过上面的介绍以及配合本图可知:Setup Slack = (Latch Edge + Tclk2 - Tsu)-( Launch Edge + Tclk1 +Tco +Tdata)
(建立数据所需时间)Setup-Data Required Time = Latch Edge + Tclk2 - Tsu
(数据到达时间) Data Arrival Time = Lauch Edge + Tclk1 + Tco + Tdata
因此 Setup Slack
= Setup-Data Required Time - Data Arrival Time=(Latch Edge - Launch Edge)+(Tclk2-Tclk1)-(Tsu+Tco+Tdata)
= Tperiod +(Tclk2-Tclk1)-(Tsu + Tco+Tdata)
对应图上绿色画线部分。
这个最终结果说明了源寄存器与目的寄存器之间延迟 Tdata不能太长的原因,延迟越长,slack越小。
当建立裕量为正时,满足时序要求,否则不满足。8.保持裕量(Hold Slack)
保持裕量分析方法:
直接先给出公式:
Hold Slack = Data Arrival Time - (Hold-Data Required Time)
同样的可推导:
Data Arrival Time = Launch Edge + Tclk1 + Tco + Tdata
Hold-Data Required Time = Latch Edge + Tclk2Hold Slack = Launch Edge + Tclk1 + Tco + Tdata -(Latch Edge + Tclk2)
=-Tperiod +(Tclk1-Tclk2)+Tco+Tdata
从结果可以看出,当源寄存器与目的寄存器之间延迟Tdata太短的话,则保持裕量会很短,因此Hold Slack 越小。
本文中源寄存器由第一级寄存器代替,目的寄存器由第二级寄存器代替。
参考博客: -
STA静态时序分析入门
2014-05-04 14:16:09适合新手入门 深亚微米ASIC设计中的静态时序分析 -
STA静态时序分析——学习笔记
2020-08-30 16:42:22STA静态时序分析——学习笔记静态时序分析简介及基本知识PT流程以及分步骤讲解2.1 设计STA环境2.2 指定STA库文件2.3 读取Netlist文件2.4 读取SPEF文件2.5 设置约束文件2.6 输出报告并保存数据文件PT基础使用PT其他...STA静态时序分析——学习笔记
静态时序分析简介及基本知识
静态时序分析(STA)是通过工具对同步电路中所有存在的时序路径进行分析,检查是否存在时序违例。是标准的timing sign-off(时序签字)的工具。PT和综合的过程和命令都是十分相似的;
!!与综合过程中对时序检查的区别:PT使用的是更加精准的时序模型,并且使用PT做STA会扫描所有的corner,而综合一般只做一两个corner静态时序分析具有以下功能
- STA可分析电路最高时钟频率;
- STA可检查设计在所有corner下均能时序收敛(综合通常只跑个别corner,但跑STA资源小速度快,可以遍历各种corner);
- 分析时钟的偏移,不平衡等各种因素对电路时序的影响
补充知识:PVT:Process、Voltage、tempreture
- Process:由于fab制造过程的工艺掺杂不均匀,分为ff, ss, tt等(电子、空穴掺杂不均匀);
- Voltage:芯片工作电压,由于电源的不稳定,以及后端的IR-drop(压降)等因素导致。(可分为0.9 * VDD, 1.1 * VDD);
- tempreture:芯片工作时的温度,一般分为-40,-10, 70 ,125几个温度;
常用的工具
- Synopsys: Prime Time(用的更多)
- Cadence: Tempus
时序单元的相关约束
- Setup time建立时间Tsetup:数据在时钟沿之前必须有效的时间;
- Hold time保持时间Thold:数据在时钟沿之后必须稳定的时间;
- recover time恢复时间:低电平复位信号或者高电平清零信号在时钟有效沿之前保持有效的最小时间长度;
- removal time移除时间:低电平复位信号或者高电平清零信号在时钟有效沿之后保持有效的最小时间长度;
- 最小脉冲宽度:脉冲波形从开始到结束之间的最小时间间隔;
时序路径:
时序路径(timing path)指设计中数据信号传播过程中所经过的逻辑路径。每一条时序路径都存在与之对应的一个始发点和一个终止点。始发点:组合逻辑输入端、时序单元输入端;
终止点:组合逻辑输出端、时序单元输入端;这样就有4种时序路径的组合:
1、输入端到触发器;
2、触发器到触发器;
3、触发器到输出端;
4、出入端到输出端;(需要虚拟时钟??)
PT的输入输出文件:
输入文件(【】表示非必须):- 后端的网表和【SPEF文件】(连线的寄生电容电阻)(网表是综合后的网表,SPEF是后端PR的)
- 标准单元的库文件
- 【其他库文件。如IO库,IP库等等】
- 时序约束文件
输出文件:
- 带延时的SDF文件(主要!!!,做后仿使用)
- 各种报告以及保留结果的session文件;
- Timing eco文件(有时序违例时重复迭代此步(给后端进一步优化版图,修完后会重新给一个SDF文件和session文件)直到时序违例消除,)
PT流程以及分步骤讲解
过程可寻求帮助:- man pt_command
- pt_command -help
- help * command *
2.1 设计STA环境
- 设置环境变量,如顶层的名字
- 创建目录结构,RPT,OUT等文件夹
- 指定临时文件存放目录等
- 设置一些自定义命令等
2.2 指定STA库文件
- 设置search_path,link_library
- search_path设定好后,综合工具只会从该指定的路径去寻找各种库文件
- link_library:包含target_library??,在此基础上再加上IO库文件,IP库文件等
- 不需要target_library(因为不需要做compile)??
2.3 读取Netlist文件
- 读入所有Netlist后,指定顶层模块并link
- 一般只有一个网表文件
- 使用 read_verilog netlist.v读入网表
2.4 读取SPEF文件
- SPEF是由专门的Start RC工具从后端版图中提取的参数文件(标准的工具算的寄生电容、寄生电阻更精确)ICC也可以提取,但是不是专门的工具。
- SPEF主要包括连线的寄生电容和寄生电阻
2.5 设置约束文件
-
set_propagated_clock [all_clocks]设计成propagate后是一个实际的延时(实际的线网延时),这步是必不可少的。(没设置的话clock默认是理想的具有无穷大的驱动能力,时序就不准确)
-
时钟的创建,需要知道在哪一个端口创建时钟,以及时钟的频率,相位等。还要知道时钟之间的相互关系
-
设置内部transition约束,输入输出的延时控制,输入输出的驱动能力/负载;
-
设置时钟的不确定性。设置的值可以比DC时的小,因为skew和latency已经确定了。主要是预防jitter以及预留一些余量;
设置约束文件——OCV(on chip variation)
早期的工艺没有OCV,直接BC_WC(Bset_coner,Worst_coner)分别检查hol/setup时序;进入深压微米后,芯片内部不同位置的PVT情况不同,更差情况是同一条时序路径上launch path和capture path的PVT不同
假设date path(Launch path)处在WC,clock path(capture path)处在BC,有少量的偏差。通过引入OCV用derate来模拟实际的这种情况,并保留一定的余量,按一定的系数放大或者缩小,来模拟OCV的情况。比如Launtch的正常的延时是A,系数是0.95,则现在的延时是0.95A,Capture path正常的延时是B,系数是1.03则现在的延时是1.03B
- 一般有专门CAD team的人确定这个sign-off标准
- 计算setup时,launch path * late(>1), capture path * early(<1)
- 计算hold时,launch path * early, capture path * late 扫到所有corner并且保证不会有时序违例
设置约束文件——AOCV(更高级的OCV,之前是对整个芯片使用统一的derate,不是特别可靠)
- 对于更新的工艺,如12nm,7nm,5nm,需要AOCV
- fab会提供一个derate的查找表
- 通过逻辑的物理级数以及物理距离对不同的逻辑单元给予不同的derate数值。更 加贴近实际情况。不至于过分悲观,也不至于过分乐观
2.6 输出报告并保存数据文件
- 用check_timing检查设计中是否有路径没有被约束
- 用report_clock检查时钟是否设置正确
- 用report_qor查看整体综合后的summary结果
- 用report_timing查看具体的setup/hold时序信息
- 用write_sdf写出综合后的sdf文件
- 用save_session保存当前数据文件
- 设置propagate 2.设置derate模拟OCV的过程
PT基础使用
两种启动PT方式
- pt_shell:命令行方式,最常用
- primetime: 图形化界面方式
PT打开时会自动运行当前目录下的.synopsys_pt.setup文件。一些统一的参数配置等可以写在这个文件里。
脚本分步骤运行以及source一次性运行
pt_shell -f top_pt.tcl -output_log_file top_pt.log
可以用history查看之前使用过的命令或者上下箭头PT其他使用
-
一般由专门研究工艺的CAD team设计一个合理的timing sign-off标准。对不同的PVT分别设置什么derate。过分悲观会增大面积,过分乐观可能导致实际芯片时序有问题。
-
针对不同的Library会分别启动PT逐个把所有corner都处理一遍,并保存对应的session。一个PT处理一个corner,多运行几次PT。
-
每次PT设置不同的derate。只有每次PT的timing都通过了整个timing才能算通过。
-
用pt_shell -multi_senario可以同时导入所有的session。并用fix_eco_drc以及fix_eco_timing修复timing,并给出timing ECO文件。
-
后端会根据ECO文件进行进一步修复
-
迭代直到时序收敛
PT实操
初始目录结构:
## file :top_pt_ff.tcl set SCRIPT_FILE script set CORNER saed90nm_max_hth ############################################################### ###### 设置STA环境 ###### ############################################################### source -echo ./$SCRIPT_FILE/set_env.tcl source -echo ./$SCRIPT_FILE/file_create.tcl ############################################################### ###### 指定STA库文件 ###### ############################################################### set search_path [list \ ./ \ ../ \ /home/XXX/fab/synopsys90nm_lib/stdcel/db/ss1p08v125c \ ] #set target_library [list ${CORNER}.db] set link_library [list "*" ${CORNER}.db] set_app_var report_default_significant_digits 4 ############################################################### ###### 读取Netlist ###### ############################################################### puts "### read design started" read_verilog $NETLIST current_design $WORKING_DESIGN link_design -verbose puts "### read design done" set_operating_conditions -analysis_type on_chip_var -library [get_libs ${CORNER}*] ############################################################### ###### 读取SPEF ###### ############################################################### ############# read spef ################ set parasitics_log_file $REPORT_PATH/parasitics_command.log set_app_var si_enable_analysis true set_app_var si_filter_per_aggr_noise_peak_ratio 0.01 set_app_var si_xtalk_delay_analysis_mode all_path_edges if ($EXIST_SPEF) { read_parasitic -keep_capacitive_coupling $SPEF_FILE -verbose complete_net_parasitics report_annotated_parasitics -check -constant_arcs -list_not_annotated -max_nets 100000 } ############################################################### ###### 设置约束文件 ###### ############################################################### source -echo ./${SCRIPT_FILE}/read_constraints.tcl update_timing -full set_timing_derate -early [expr 1 - 0.05] set_timing_derate -late [expr 1 + 0.03] # write sdf write_sdf -context verilog -significant 4 $OUT_PATH/${WORKING_DESIGN}.sdf.setuphold_recrem -version 3.0 -include {SETUPHOLD RECREM} write_sdf -context verilog -significant 4 $OUT_PATH/${WORKING_DESIGN}.sdf -version 3.0 ######################### save session ################### if {$SAVE_SESSION == 1} { save_session $DATA_OUT/$CORNER/session set f [open "restore_session_${CORNER}.csh" w] puts $f "\ #!/bin/csh pt_shell -sgq normal:1c:4m -x \"restore_session $OUT_PATH/session\" " close $f exec chmod +x "restore_session_${CORNER}.csh" } ############################################### ############################################################### ###### 输出报告 ###### ############################################################### source -echo ./${SCRIPT_FILE}/report.tcl # get fanout number #sizeof_collection [get_pins -leaf -of [get_nets x_stdblk_rtl/inst_sif/ADDR1[1] ] -filter "direction==in" ]
set_env.tcl:
### file :set_env.tcl set WORKING_DESIGN plus_pipe set SOURCE_FILE source_file set NETLIST ./${SOURCE_FILE}/${WORKING_DESIGN}.v set SPEF_FILE ./${SOURCE_FILE}/${WORKING_DESIGN}.spef set file_version cp_test set RPT_DIR RPT set OUT_DIR OUT ### 设置的控制变量 set SAVE_SESSION 1 set REPORT_GEN 1 set EXIST_SPEF 0 set RPT_OUT [format "%s%s" $RPT_DIR/ $file_version] set DATA_OUT [format "%s%s" $OUT_DIR/ $file_version] set REPORT_PATH [format "%s%s" $RPT_OUT/ $CORNER] set OUT_PATH [format "%s%s" $DATA_OUT/ $CORNER]
file_create.tcl :创建目录结构
### file : file_create.tcl if {[file exist $RPT_DIR]} { echo "File $RPT_DIR already exist" } else { exec mkdir $RPT_DIR echo "Creating $RPT_DIR !!!" } if {[file exist $RPT_DIR/$file_version]} { echo "File $file_version already exist" #exec rm $RPT_DIR/$file_version -r #exec mkdir $RPT_DIR/$file_version #echo "Re-create $file_version files" } else { exec mkdir $RPT_DIR/$file_version echo "Creating $file_version in $RPT_DIR !!!" } if {[file exist $RPT_DIR/$file_version/$CORNER]} { echo "File $file_version/$CORNER already exist" exec rm $RPT_DIR/$file_version/$CORNER -r exec mkdir $RPT_DIR/$file_version/$CORNER echo "Re-create $file_version files" } else { exec mkdir $RPT_DIR/$file_version/$CORNER echo "Creating $file_version/$CORNER in $RPT_DIR !!!" } if {[file exist $OUT_DIR]} { echo "File $OUT_DIR already exist" } else { exec mkdir $OUT_DIR echo "Creating $OUT_DIR !!!" } if {[file exist $OUT_DIR/$file_version]} { echo "File $file_version already exist" # exec rm $OUT_DIR/$file_version -r # exec mkdir $OUT_DIR/$file_version # echo "Re-create $file_version files" } else { exec mkdir $OUT_DIR/$file_version echo "Creating $file_version in $OUT_DIR !!!" } if {[file exist $OUT_DIR/$file_version/$CORNER]} { echo "File $file_version/$CORNER already exist" exec rm $OUT_DIR/$file_version/$CORNER -r exec mkdir $OUT_DIR/$file_version/$CORNER echo "Re-create $file_version files" } else { exec mkdir $OUT_DIR/$file_version/$CORNER echo "Creating $file_version/$CORNER in $OUT_DIR !!!" }
执行以上内容得到新的目录结构
OUT:存放输出文件
RPT:存放报告
read_constrains.tcl:set timing_disable_clock_gating_checks true set timing_enable_multiple_clocks_per_reg true set enable_recovery_removal_arcs true set timing_report_unconstrained_paths 1 create_clock -name CLK_IN -p 10 [get_ports CLK_IN] -waveform {0 5} set_max_transition 1.0 [current_design] set_max_transition -clock_path 0.90 [all_clocks] set_clock_transition 0.9 [all_clocks] set_input_transition 0.89 [all_inputs] set_driving_cell -lib_cell NBUFFX2 -pin Z -no_design_rule [all_inputs] set_load [load_of ${lib_slow}/NBUFFX2/INP] [all_outputs] #set_load 0.02 [all_outputs] #set_load 0.006484 [all_outputs] set_input_delay 3 -clock CLK_IN [all_inputs] set_input_delay -max 5 -clock CLK_IN {PLUS_A PLUS_B} set_input_delay -min 2 -clock CLK_IN {PLUS_A PLUS_B} set_output_delay 1 -clock CLK_IN {COUT SUM_OUT} #set_multicycle_path -setup 2 -from A -to B #set_multicycle_path -hold 1 -from A -to B # false path set_false_path -from [get_ports RST]
report.tcl
puts "### reporting started" if {$REPORT_GEN == 1} { update_timing -full redirect -tee -compress -file $REPORT_PATH/all_clock.rpt.gz {report_clock -skew} #check multiple clocks pe$REPORT_PATH redirect -tee -compress -file $REPORT_PATH/check_timing_multiclock.rpt.gz {check_timing -over {data_check_multiple_clock}} #check no clocks redirect -tee -compress -file $REPORT_PATH/check_timing_no_clock.rpt.gz {check_timing -over {no_clock} -verbose} #check ideal clocks redirect -tee -compress -file $REPORT_PATH/check_timing_ideal_clocks.rpt.gz {check_timing -over {ideal_clocks} -verbose} #check input delay redirect -tee -compress -file $REPORT_PATH/check_timing_input_delay.rpt.gz {check_timing -over {no_input_delay partial_input_delay} -verbose} #check no driving cell redirect -tee -compress -file $REPORT_PATH/check_timing_no_driving_cell.rpt.gz {check_timing -over {no_driving_cell} -verbose} #check loops redirect -tee -compress -file $REPORT_PATH/check_timing_loops.rpt.gz {check_timing -over {loops} -verbose} #check unconstrained endpoints (clock-domain crossing may be included). redirect -tee -compress -file $REPORT_PATH/check_timing_unconstrained_endpoints.rpt.gz {check_timing -over {unconstrained_endpoints} -verbose} #check disbled timing arcs redirect -tee -compress -file $REPORT_PATH/disable_timing.rpt.gz {report_disable_timing -nosplit} #constraints violations redirect -tee -compress -file $REPORT_PATH/violators_short_all.rpt.gz {report_constraint -all_violators -nosplit} #setup timing redirect -tee -compress -file $REPORT_PATH/violators_short_setup.rpt.gz {report_constraint -all_violators -max_delay -nosplit -recovery} #hold timing redirect -tee -compress -file $REPORT_PATH/violators_short_hold.rpt.gz {report_constraint -all_violators -min_delay -nosplit -removal} #report_timing alias report_timing_summary report_timing -path summary -nosplit -slack_lesser_than 0.0 -max_paths 1000 redirect -tee -compress -file $REPORT_PATH/violators_summary_setup.rpt.gz {report_timing_summary -delay max} redirect -tee -compress -file $REPORT_PATH/violators_summary_hold.rpt.gz {report_timing_summary -delay min} #transition redirect -tee -compress -file $REPORT_PATH/violators_short_trans.rpt.gz {report_constraint -all_violators -max_transition -min_transition -nosplit} #qor puts "##### reporting qor #####" redirect -tee -compress -file $REPORT_PATH/qor.rpt.gz {report_qor} }
输出文件和报告
-
静态时序分析学习书籍 纯英文
2018-12-07 16:00:06静态时序分析纳米设计实用教程 各种dc约束 以及常见电路时序分析 -
STA 静态时序分析
2021-06-09 15:19:53STA静态时序分析与电路的输入激励无关,它通过遍历所有的时序路径,寻找出最大的组合逻辑延迟和最小的组合逻辑延迟,通过得到的逻辑延迟验证电路的建立时间和保持时间是否满足,其中建立时间是通过最大的组合逻辑...时钟抖动(jitter):时钟抖动是相对于理想时钟沿实际时钟存在不随时间积累的,时而超前,时而滞后的偏移称为时钟抖动,时钟在两个时钟周期之间存在的差值,这个误差是发生在时钟产生器的内部的,一般会和物理结构有关,布局布线对其没有影响;
JITTER = T2 -T1
时钟的抖动可以分为随机抖动(random jitter,简称rj)和固有抖动(deterministic jitter),随机抖动的来源为热噪声、shot noise和flick noise,与电子器件和半导体器件的电子和空穴特性有关,比如ecl工艺的pll比ttl和cmos工艺的pll有更小的随机抖动;固定抖动的来源为:开关电源噪声、串扰、电磁干扰等等,与电路的设计有关,可以通过优化设计来改善,比如选择合适的电源滤波方案、合理的pcb布局和布线。
时钟偏斜(skew):时钟偏斜是指时钟在到达两个触发器时时间差值,既包含了时钟驱动器多个时钟输出值的差值,也包含了由于PCB走线导致的时钟偏移;当skew足够大时候就会引起电路逻辑的变化,在ASIC的后仿中反标了布局布线后PT分析吐出的SDF文件,用来进行加入时序后的时序仿真,而在后仿里面加入了时序情况就要考虑skew的情况,看一下由于布局布线引起的skew会不会影响电路逻辑,对于后仿Skew的反标以及后仿的分析会在后面再总结一下。
先总结一下STA(静态时序分析)的基本常识;
STA静态时序分析与电路的输入激励无关,它通过遍历所有的时序路径,寻找出最大的组合逻辑延迟和最小的组合逻辑延迟,通过得到的逻辑延迟验证电路的建立时间和保持时间是否满足,其中建立时间是通过最大的组合逻辑延迟得到,保持时间是通过最小的组合逻辑得到;
首先解释一下保持时间和建立时间的基本关系,在不考虑时钟抖动和时钟偏斜的情况下的建立时间和保持时间的关系式如下:
T > =t(c-q) + t(logic) + t(su)
其中T是时钟周期,t(c-q)是第一个触发器的输入端到达D触发器输出端的最大传播延时,t(logic)是第一个触发器Q段输出后到达第二个触发器D端前经历的组合逻辑延迟,t(su)是第二个触发器的建立时间;
t(hold) <= t(c-q, cd) + t(logic, cd)
保持时间应该小于寄存器污染延时和组合逻辑延时之和;(后缀cd一般代表最小的意思),最大延时和污染延时相对应,一个最大,一个最小;
由此不难看出对于建立时间而言,中间的组合逻辑延迟越小越好,而对于保持时间而言,中间的组合逻辑延迟越大越好;
而建立时间裕量和保持时间裕量就如下所示:(两者都应该大于0)
Tsu_slack=T -t(c-q) - t(logic) - t(su)
Th_slcak = t(c-q, cd) + t(logic, cd) - t(hold)
DC综合时会针对设置的SDC文件对综合时序进行一次检查,出现的slack为负的都是不满足标准的需要修改rtl或者修改sdc约束,SDC撰写以及出现的时序问题以及修改策略后面会特地写一版;
如果在考虑到时钟抖动和时钟偏斜后的的保持时间和建立时间的关系式如下所示:
考虑时钟偏斜:
T +δ> =t(c-q) + t(logic) + t(su)
t(hold) + δ< = t(c-q, cd) + t(logic, cd)
时钟偏斜分为时钟到达两个触发器的早晚,早晚到达相位不同引起的时序问题是截然相反的,假设clk2比clk1晚到一个δ相位,δ
为正数时可知建立时间更容易满足时间更充裕了。
对于保持时间,相位晚到了一个δ相位,相当于保持时间向后延长了,如果数据变换的太快就有可能导致一个数据还没稳定,下一个数据就已经到来,保持时间更不容易满足来看;
相反如果时钟到达clk1的相位比到达clk2的相位晚到了一个相位δ
则上面两个式子中的δ为负数,可知电路倾向于发生setup time violation,而对于保持时间则始终满足,也就是说hold time满足的条件下,电路上始终没有竞争现象的出现。
而对于clock jitter,因为其多样性的变化,对于电路的性能,始终是负面的影响。
-
(108)FPGA面试题-介绍STA静态时序分析及其作用
2022-02-20 23:46:261.1 FPGA面试题-介绍STA静态时序分析及其作用 1.1.1 本节目录 1)本节目录; 2)本节引言; 3)FPGA简介; 4)FPGA面试题-介绍STA静态时序分析及其作用; 5)结束语。 1.1.2 本节引言 “不积跬步,无以至... -
静态时序分析(STA)
2021-06-24 22:12:13静态时序分析(Static Timing Analysis, 以下统一简称STA)是验证数字集成电路时序是否合格的一种方法,其中需要进行大量的数字计算,需要依靠工具进行,但是我们必须了解其中的原理。在综合工具(DC / Genus 等),... -
STA静态时序分析
2021-05-16 10:12:312、STA环境: PrimeTime (1)定义时钟: 建立时钟:create_clock 时钟不确定性:set_clock_uncertainty 时钟偏差skew和抖动jitter: 时钟网络延时latency: 生成时钟:generated clock ... -
深入理解STA(静态时序分析)
2018-10-07 19:46:55任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析。静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法,... -
静态时序分析(sta)/动态时序分析(dta)
2022-03-22 18:11:45据个人理解区分静态时序分析和动态时序分析,是在于在分析电路时序时有没有输入激励。STA分析就是通过时序库文件给出的各条时序路径的延迟,来确认在每个FF上是否满足建立/保持时间。而DTA就需要给设计灌入激励在... -
TCL与STA静态时序分析----邸志雄课程
2021-06-08 14:54:46filelist.tcl–代码filelist读入生成模块 find_clk.tcl–时钟约束生成子模块 二、STA静态时序分析 1. PrimeTime 1.1 PT命令行模式 1.2 图形模式 2. 静态时序分析时序弧 又分为连线延迟和单元延迟 2.1 单元延迟–Cell... -
FPGA静态时序分析简单解读
2020-08-04 19:55:14任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析。静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法,... -
FPGA时序分析之关键路径(Critical Path)【华为静态时序分析资料】【数字IC笔试面试】...【STA静态时序分析】
2021-04-11 13:54:35(1)华为:静态时序分析与逻辑设计 (2)王敏志:FPGA设计实战演练(高级技巧篇) 【FPGA探索者】公众号内回复【关键路径】获取两个资料。 关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径(这里我... -
什么是STA静态时序分析,有什么作用?【FPGA/数字IC笔试面试】【2022届校招笔试】【形式验证】【DFT】...
2021-05-25 16:43:33STA静态时序分析(Static Timing Analysis) STA功能 (1) 静态时序分析是一种验证数字集成电路时序是否合格的验证方法; (2) 静态时序分析的前提是同步逻辑设计(重要!),不能分析异步电路; (3) 静态时序... -
静态时序分析经典.pdf
2019-09-26 16:28:23时序分析的精典,适合新人学习。讲得很好,适合用来打基础。。。。。。。。。。。。。。。。。。。。。。。。。。。欢迎大家一起学习 -
STA静态时序分析/Formality形式化验证
2018-04-25 14:09:17其次,电路的时序是否满足,通过STA(静态时序分析)得到。两种验证手段相辅相成,确保验证工作高效、可靠地完成。时序分析的主要作用是查看FPGA内部逻辑和布线的延时,确保其是否满足设计者的... -
FPGA/数字IC秋招笔试面试001——什么是STA静态时序分析,有什么作用?(2022届)
2021-03-05 14:02:04STA静态时序分析(Static Timing Analysis) (1) 静态时序分析是一种验证数字集成电路时序是否合格的验证方法; (2) 静态时序分析的前提是同步逻辑设计(重要!),不能分析异步电路; (3) 静态时序分析工具... -
静态时序分析(STA)—— 基本概念
2022-03-28 21:49:221、时序弧 1.1、单元延时 1、电平转换延时 2、逻辑门延时 2、建立、保持时间 2.1、建立时间 2.2、保持时间 3、时序路径 4、时钟域(CD) 5、操作条件 参考说明 前面几篇讲述了 Tcl 语言相关的学习内容... -
FPGA STA(静态时序分析)
2021-01-21 04:35:16FPGA STA(静态时序分析) 今天给大侠带来FPGA STA(静态时序分析),话不多说,上货。 一、概述 1.1 概述 在快速系统中FPGA时序约束不止包含内部时钟约束,还应包含完整的IO时序约束和时序例外约束才能实现PCB... -
静态时序分析(STA) —— 时序检查
2022-04-04 21:04:11目录 1、建立时间检查 1、触发器之间路径 2、输入到触发器的路径 ...上篇一起学习了STA环境的建立,本篇就接着上篇,开始学习时序验证的核心知识,真正开始时序的验证…… 1、建立时间检查 满... -
STA(静态时序分析)总结
2021-08-23 16:27:52STA(Static Timing Analysis,即静态时序分析)在实际FPGA设计过程中的重要性是不言而喻的,其作用是: 1、帮助分析和验证一个FPGA设计的时序是否符合要求; 2、指导fitter(布线综合器)布局布线出符合要求的... -
关于静态时序分析的若干题目——STA
2020-09-06 21:53:51文章目录 一、选择题 二、问答题 一、选择题 解析:建立时间裕量Tsetup,slack 保持时间裕量Thold,slack 由STA的时序要求可知:Tsetup,slack+Tsetup=Tclk+Tskew-Tco-Tcomp 由STA的时序要求... -
静态时序分析(STA)
2020-05-22 17:18:28静态时序分析(static timing analysis,STA)会检测所有可能的路径来查找设计中是否存在时序违规(timing violation)。但STA只会去分析合适的时序,而不去管逻辑操作的正确性。 其实每一个设计的目的都相同,使用... -
【第七章 配置STA环境 下】静态时序分析圣经翻译计划
2020-12-30 14:23:00STA中两个常用的设计规则是最大过渡时间-max_transition和最大电容-max_capacitance。这些规则将会检查设计中的所有端口和引脚是否满足过渡时间和电容的规定约束。这些规则可以使用以下命令指定: set_max_... -
【第七章 配置STA环境 中】静态时序分析圣经翻译计划
2020-12-18 16:14:00这里需要注意的一点是,STA无法检查不受约束的路径上的任何时序,因此需要约束所有路径以进行时序分析。在后面的章节中会介绍一些示例,其中一些示例可能并不关心某些逻辑,因而这些输入路径可能可以不用约束。例如... -
静态时序分析STA学习资料.rar
2020-04-21 16:15:03包含“静态时序分析(Static_Timing_Analysis)基础及应用.pdf“、“静态时序分析STA.pdf”、“系统设计中时钟、时序相关问题.pdf” -
STA(静态时序分析)
2021-07-25 14:45:39Clock jitter在STA分析中表示为clock uncertainty. 相关题目 1.题目︰ 已知两级寄存器中含有组合逻辑 组合逻辑延时为T_cdelay 寄存器建立时间为T_setup 保持时间为T_hold 传输延时为T_c2q 寄存器时钟周期为T_clk,...