静态时序分析(STA) —— 时序检查

  • Post author:
  • Post category:其他




目录


1、建立时间检查


1、触发器之间路径


2、输入到触发器的路径


3、触发器到输出的路径


4、输入到输出的路径


2、保持时间检查


1、触发器之间的路径


2、输入端到触发器的路径


3、触发器到输出端的路径


4、输入到输出路径


3、多周期路径


4、半周期路径


5、去除时间检查


6、恢复时间检查


7、伪路径


参考说明



上篇一起学习了STA环境的建立,本篇就接着上篇,开始学习时序验证的核心知识,真正开始时序的验证……


1、建立时间检查

满足以下的数学关系,以满足建立时间检查的要求:(逻辑连接图见第一张图)

{\color{Blue}T_{launch}+T_{ck2q}+T_{dp} }<{\color{Magenta} T_{capture}+T_{cycle}-T_{setup}}

其中,Tlaunch 、Tcapture、Tcycle、Tsetup、Tck2q 是固定的,只有 Tdp 可以通过优化设计进行改动的。

时序报告分析查看:

1、触发器之间路径

逻辑和时序如下:

时序报告:

裕量大于等于零,表明满足时序要求。

2、输入到触发器的路径

逻辑及时序如下:

时序报告:

3、触发器到输出的路径

逻辑和时序图:

时序报告:

4、输入到输出的路径

逻辑和路径:

时序报告:

2、保持时间检查

保持时间检查满足如下关系:

{\color{Blue}T_{launch}+T_{ck2q}+T_{dp} }>{\color{Magenta} T_{capture}+T_{hold}}

其中,Tlaunch 、Tcapture、Tsetup、Tck2q 是固定的,只有 Tdp 可以通过优化设计进行改动的。

1、触发器之间的路径

时序报告:

2、输入端到触发器的路径

逻辑和时序:

检查报告:

3、触发器到输出端的路径

逻辑和时序:

时序报告:

实际时钟情景:

4、输入到输出路径

此处的连接图与建立时间的输入到输出路径相同。

保持时间裕量 = 需要的到达时间 – 实际的到达时间。

3、多周期路径

数据传输跨越多个时钟周期。

时序报告:

为了进行正常的时序分析,需要进行多周期约束:

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个时钟周期。

4、半周期路径

捕获沿和发起沿不同性质时:

时序报告:(建立和保持时间检查)

5、去除时间检查

去除时间指的是:异步控制信号释放时刻和时钟边沿的时间间隔。保证其有效作用。

6、恢复时间检查

恢复时间指的是:异步控制信号释放时刻和下一个时钟边沿的时间间隔。保证其有效撤离。

7、伪路径

伪路径,若声明,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]

参考说明

【1】B站 邸老师学习视频。

【2】Static Timing Analysis for Nanometer Designs A Practical Approach . J. Bhasker • Rakesh Chadha