作STA要分析的时序路径四种中的一种,可看作是reg2reg的变种。详见STA:时序检查
4. input2output
第四种是发起触发器和捕获触发器都在芯片外部。
发起触发器到捕获触发器路径如下:
参数定义:
● T c l k 2 I N B T_{clk2INB} Tclk2INB:上升沿从时钟CLKM经过触发器UFF0传输到端口INB的延迟。
为端口INB相对于时钟CLKM的输入路径延迟,即 T c l k 2 I N B = T c l k 2 U F F 0 + T C K 2 Q U F F 0 + T U F F 02 I N B T_{clk2INB}=T_{clk2UFF0}+T^{UFF0}_{CK2Q}+T_{UFF02INB} Tclk2INB=Tclk2UFF0+TCK2QUFF0+TUFF02INB,通过下方SDC指定
# 最长路径,用于建立时间检查
set_input_delay -clock CLKM -max 1.5 [get_ports INB]
# 最短路径,用于保持时间检查
set_input_delay -clock CLKM -min 1 [get_ports INB]
● T I N B 2 P O U T T_{INB2POUT} TINB2POUT:数据从设计端口INB,经过一系列组合逻辑元件,最终到达POUT的延迟
取决于综合后端口INB到POUT之间的组合逻辑,组合逻辑延迟通过标准单元库的SDF指定。
● T P O U T 2 U F F 1 T_{POUT2UFF1} TPOUT2UFF1:数据从设计端口POUT输出,经过一系列组合逻辑元件,最终到达UFF1的延迟
● T c l k 2 I N C T_{clk2INC} Tclk2INC:上升沿从时钟CLKM输入通过端口INC输入至设计内部的延迟。
此处INC为时钟定一点,所以该延迟就为源延迟,通过下方SDC指定
set_clock_latency 0.8 -source [get_clocks CLKM]
● T I N C 2 P I N C T_{INC2PINC} TINC2PINC:时钟CLKM在设计内部传输的延迟。
设计内部时钟的网络延迟,通过下方SDC指定
set_clock_latency 0.2 [get_clocks CLKM]
● T P I N C 2 U F F 1 T_{PINC2UFF1} TPINC2UFF1:时钟CLKM通过端口PINC输出至UFF1的延迟。
● T c l k T_{clk} Tclk:时钟CLKM周期,注意该时钟并不是设计内部时钟。该值通过下方SDC指定
create_clock -period 10 -name CLKM [get_ports INC]
● T s e t u p _ u n c e r t a i n T_{setup\_uncertain} Tsetup_uncertain:时钟CLKM建立时间不确定度,即预期时钟沿提前一段时间。
该值通过下方SDC指定
set_clock_uncertainty -setup 0.3 [get_clocks CLKM]
● T h o l d _ u n c e r t a i n T_{hold\_uncertain} Thold_uncertain:时钟CLKM建立时间不确定度,即预期时钟沿延后一段时间。
该值通过下方SDC指定
set_clock_uncertainty -hold 0.4 [get_clocks CLKM]
● T s e t u p U F F 1 T^{UFF1}_{setup} TsetupUFF1:UFF1的建立时间。
● T o u t p u t U F F 1 T^{UFF1}_{output} ToutputUFF1:外部时序约束。POUT到UFF1/D端组合逻辑延迟与PINC到UFF1/CK端组合逻辑延迟的差,再加上UFF1的建立时间,即 T o u t p u t U F F 1 = T P O U T 2 U F F 1 − T P I N C 2 U F F 1 + T s e t u p U F F 1 / − T h o l d U F F 1 T^{UFF1}_{output}=T_{POUT2UFF1}-T_{PINC2UFF1}+T^{UFF1}_{setup}/-T^{UFF1}_{hold} ToutputUFF1=TPOUT2UFF1−TPINC2UFF1+TsetupUFF1/−TholdUFF1
可通过如下SDC指定
# 最长路径,用于建立时间检查
set_output_delay -clock CLKM -max 2 [ get_ports POUT]
# 最短路径,用于保持时间检查
set_output_delay -clock CLKM -min 1.5 [ get_ports POUT]
● T s e t u p _ s l a c k U F F 02 U F F 1 T^{UFF02UFF1}_{setup\_slack} Tsetup_slackUFF02UFF1:路径UFF0-UFF1的建立时间裕度。为待计算量,大于零表示建立时间满足。
● T h o l d U F F 1 T^{UFF1}_{hold} TholdUFF1:UFF1的保持时间。
● T h o l d _ s l a c k U F F 02 U F F 1 T^{UFF02UFF1}_{hold\_slack} Thold_slackUFF02UFF1:路径UFF0-UFF1的保持时间裕度
4.1. 建立时间 T s e t u p T_{setup} Tsetup检查
对捕获触发器UFF1进行STA
● 数据实际到达UFF1/D端的时间(Arrival Time): T c l k 2 I N B + T I N B 2 P O U T + T P O U T 2 U F F 1 T_{clk2INB}+T_{INB2POUT}+T_{POUT2UFF1} Tclk2INB+TINB2POUT+TPOUT2UFF1
reg2reg型中的Arrival Time为 T c l k 2 U F F 0 + T C K 2 Q U F F 0 + T U F F 02 U F F 1 T_{clk2UFF0}+T^{UFF0}_{CK2Q}+T_{UFF02UFF1} Tclk2UFF0+TCK2QUFF0+TUFF02UFF1,与input2reg型中的Arrival Time等价
● UFF1/D端新信号需要到达的时间(Required Time): T c l k − T s e t u p _ u n c e r t a i n + T c l k 2 I N C + T I N C 2 P I N C + T P I N C 2 U F F 1 − T s e t u p U F F 1 T_{clk}-T_{setup\_uncertain}+T_{clk2INC}+T_{INC2PINC}+T_{PINC2UFF1}-T^{UFF1}_{setup} Tclk−Tsetup_uncertain+Tclk2INC+TINC2PINC+TPINC2UFF1−TsetupUFF1
reg2reg型中的Required Time为 T c l k − T s e t u p _ u n c e r t a i n + T c l k 2 U F F 1 − T s e t u p U F F 1 T_{clk}-T_{setup\_uncertain}+T_{clk2UFF1}-T^{UFF1}_{setup} Tclk−Tsetup_uncertain+Tclk2UFF1−TsetupUFF1,与input2reg型中的Required Time等价
所以路径UFF0-UFF1中UFF1的建立时间裕度为:
0 < T s e t u p _ s l a c k U F F 02 U F F 1 = R e q u i r e d T i m e − A r r i v a l T i m e = ( T c l k − T s e t u p _ u n c e r t a i n + T c l k 2 I N C + T I N C 2 P I N C + T P I N C 2 U F F 1 − T s e t u p U F F 1 ) − ( T c l k 2 I N B + T I N B 2 P O U T + T P O U T 2 U F F 1 ) = ( T c l k − T s e t u p _ u n c e r t a i n + T c l k 2 I N C + T I N C 2 P I N C ) − ( T c l k 2 I N B + T I N B 2 P O U T ) − T o u t p u t U F F 1 (4.1) 0<T^{UFF02UFF1}_{setup\_slack}=Required Time-ArrivalTime \\\ =(T_{clk}-T_{setup\_uncertain}+T_{clk2INC}+T_{INC2PINC}+T_{PINC2UFF1}-T^{UFF1}_{setup})-(T_{clk2INB}+T_{INB2POUT}+T_{POUT2UFF1}) \\\ =(T_{clk}-T_{setup\_uncertain}+T_{clk2INC}+T_{INC2PINC})-(T_{clk2INB}+T_{INB2POUT}) -T^{UFF1}_{output} \\\ \tag{4.1} 0<Tsetup_slackUFF02UFF1=RequiredTime−ArrivalTime =(Tclk−Tsetup_uncertain+Tclk2INC+TINC2PINC+TPINC2UFF1−TsetupUFF1)−(Tclk2INB+TINB2POUT+TPOUT2UFF1) =(Tclk−Tsetup_uncertain+Tclk2INC+TINC2PINC)−(Tclk2INB+TINB2POUT)−ToutputUFF1 (4.1)
其中, T s e t u p _ s l a c k U F F 02 U F F 1 T^{UFF02UFF1}_{setup\_slack} Tsetup_slackUFF02UFF1为正说明时序检查通过。
4.2. 保持时间 T h o l d T_{hold} Thold检查
对捕获触发器UFF1进行STA
● UFF1/D端旧数据实际被更新的时间(Arrival Time): T c l k + T h o l d _ u n c e r t a i n + T c l k 2 I N B + T I N B 2 P O U T + T P O U T 2 U F F 1 T_{clk}+T_{hold\_uncertain}+T_{clk2INB}+T_{INB2POUT}+T_{POUT2UFF1} Tclk+Thold_uncertain+Tclk2INB+TINB2POUT+TPOUT2UFF1
reg2reg型中的Arrival Time为 T c l k + T h o l d _ u n c e r t a i n + T c l k 2 U F F 0 + T C K 2 Q U F F 0 + T U F F 02 U F F 1 T_{clk}+T_{hold\_uncertain}+T_{clk2UFF0}+T^{UFF0}_{CK2Q}+T_{UFF02UFF1} Tclk+Thold_uncertain+Tclk2UFF0+TCK2QUFF0+TUFF02UFF1,与input2reg型中的Arrival Time等价
UFF1/D端旧数据实际被更新的时间 就等价于 新数据实际到达UFF1/D端的时间
● UFF1/D端旧数据应该更新的时间(Required Time): T c l k + T h o l d _ u n c e r t a i n + T c l k 2 I N C + T I N C 2 P I N C + T P I N C 2 U F F 1 + T h o l d U F F 1 T_{clk}+T_{hold\_uncertain}+T_{clk2INC}+T_{INC2PINC}+T_{PINC2UFF1}+T^{UFF1}_{hold} Tclk+Thold_uncertain+Tclk2INC+TINC2PINC+TPINC2UFF1+TholdUFF1
reg2reg型中的Required Time为 T c l k + T h o l d _ u n c e r t a i n + T c l k 2 U F F 1 + T h o l d U F F 1 T_{clk}+T_{hold\_uncertain}+T_{clk2UFF1}+T^{UFF1}_{hold} Tclk+Thold_uncertain+Tclk2UFF1+TholdUFF1,与input2reg型中的Required Time等价
所以路径UFF0-UFF1中UFF1的保持时间裕度为:
0 < T h o l d _ s l a c k U F F 02 U F F 1 = A r r i v a l T i m e − R e q u i r e d T i m e = ( T c l k 2 I N B + T I N B 2 P O U T + T P O U T 2 U F F 1 ) − ( T c l k 2 I N C + T I N C 2 P I N C + T P I N C 2 U F F 1 + T h o l d U F F 1 ) = ( T c l k 2 I N B + T I N B 2 P O U T ) − ( T c l k 2 I N C + T I N C 2 P I N C ) + T o u t p u t U F F 1 (4.2) 0<T^{UFF02UFF1}_{hold\_slack}=ArrivalTime-Required Time \\\ =(T_{clk2INB}+T_{INB2POUT}+T_{POUT2UFF1})-(T_{clk2INC}+T_{INC2PINC}+T_{PINC2UFF1}+T^{UFF1}_{hold}) \\\ =(T_{clk2INB}+T_{INB2POUT})-(T_{clk2INC}+T_{INC2PINC}) +T^{UFF1}_{output} \\\ \tag{4.2} 0<Thold_slackUFF02UFF1=ArrivalTime−RequiredTime =(Tclk2INB+TINB2POUT+TPOUT2UFF1)−(Tclk2INC+TINC2PINC+TPINC2UFF1+TholdUFF1) =(Tclk2INB+TINB2POUT)−(Tclk2INC+TINC2PINC)+ToutputUFF1 (4.2)
其中, T h o l d _ s l a c k U F F 02 U F F 1 T^{UFF02UFF1}_{hold\_slack} Thold_slackUFF02UFF1为正说明时序检查通过。可以看出保持时间裕度与时钟周期无关。