一 建立时间检查(Set up Timing Check)
建立时间检查满足:
其中,Tlaunch 、Tcapture、Tcycle、Tsetup、Tck2q 是固定的,只有 Tdp 可以通过优化设计进行改动的。set up time slack(>=0)=require time-arrival time
clock uncertainty可以提高电路的健壮性,时序会更加严苛
1.reg2reg之间路径
时序报告
2.pin2reg的路径
逻辑和时序图
时序报告
3.reg2pin之间路径
时序报告
4.pin2pin之间路径
时序报告
二 保持时间检查 (hold Check)
保持时间检查满足如下关系:
hold slack=arrival time(实际) -required time(理论)
1.reg2reg之间路径
时序路径
2.pin2reg之间路径
时序分析
3.reg2pin之间路径
4.pin2pin之间路径
三 多周期路径约束
数据传输跨越多个时钟周期
时序报告:
create_clock -name CLKM -period 10 [get_ports CLKM]
#以下是 建立时间 的多周期约束
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
# 以下是保持时间的多周期约束
set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
总结:多周期约束时,建立时间延迟N个时钟周期,保持时间需要延迟N-1个时钟周期。
四 半周期路径约束
五 伪路径约束
伪路径声明后STA就不再分析。设置伪路径,可以提高分析工具的效率。
一般来说,跨时钟域信号涉及的路径都不用STA,所以跨时钟域的路径都需要设置伪路径。
注意伪路径约束时 from to 是单向路径。
示例:
set_false_path -from [get_clocks SCAN_CLK] -to [get_clocks CORE_CLK]
# Any path starting from the SCAN_CLK domain to the
# CORE_CLK domain is a false path.
set_false_path -through [get_pins UMUX0/S]
# Any path going through this pin is false.
set_false_path -through [get_pins SAD_CORE/RSTN]]
# The false path specifications can also be specified to,
# through, or from a module pin instance.
set_false_path -to [get_ports TEST_REG*]
# All paths that end in port named TEST_REG* are false paths.
set_false_path -through UINV/Z -through UAND0/Z
# Any path that goes through both of these pins
# in this order is false.
注意:
少用 -through 选项,尽量直接抓取时钟。
#建议:
set_false_path -from [get_clocks clockA] -to [get_clocks clockB]
#不建议,比较慢
set_false_path -from [get_pins {regA_*}/CP] -to [get_pins {regB_*}/D]