1. 课程来源
2. 什么是STA环境
STA环境通常涉及以下方面:
-
时序库(Library): 包含标准单元(门、触发器等)的时序特性信息,如传播延迟、引脚到达时间等。
-
约束文件(Constraints): 这些文件定义了电路中各个元件的时序要求,如输入到输出的最大传播延迟、时钟频率等。
-
时序分析工具(STA Tool): 这些工具能够基于时序库和约束文件,对电路进行时序分析,以估计信号传播的延迟,识别潜在的时序问题,并生成时序报告。
-
时序报告(Timing Reports): 这些报告提供了关于电路中各个路径的时序信息,包括路径延迟、时序违规等。工程师可以根据这些报告来调整设计,以满足时序要求。
![](https://i-blog.csdnimg.cn/blog_migrate/144054d9b77c3207a20168fd840032e9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/15782db630a5ebff7f8ff19d9041d8f9.png)
3. 定义时钟
时钟属性:时钟源点;时钟周期;占空比;边沿翻转时间;clock uncertainty;clock latency
- create_clock -name SYSCLK -period 20 -waveform {0 5} [get_ports SCLK]
- 时钟命名:-name SYSCLK(名字可自定义,随机取);
- 时钟周期:-period 20 (时钟周期为20);
- 边沿翻转时间:-waveform {0,5}(0:上升沿;5:下降沿);
- 时钟来源:[get_ports SCLK]
上面定义的时钟过于理想化,实际系统中还要考虑时钟误差:时钟偏斜,时钟抖动等。通过定义时钟误差来让整个时钟变得更加严苛,缩短有效时钟周期,用更严格的时钟条件来检查建立时间和保间。通过这些比较严格、悲观的设计可以使得整个系统变得比较稳健。
下面展开介绍clock uncertainty
- set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]
- 让setup检查边沿再往前推一点
- set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG]
- 让hold检查边沿再往后推一点
虚拟时钟也可以指定uncertainty
clock uncertainty包括:时钟偏移(clock skew)、时钟抖动(clock jitter)
时钟偏移:时钟信号到达相邻两个时许单元的时间差;
时钟抖动:对单个时钟来说,两个时钟周期之间的偏差。
clock latency包括:network latency 和 source latency
4. 生成时钟
通过maser clock 分频生成的时钟通常定义为generated clock,定义成生成时钟之后处理时序问题与原生时钟有什么区别?下面展开讲解。
- master clock:CLKP -> generated clock: CLKPDIV2
- create_clock -name CLKP 10 [get_pins UPLL0/CLKOUT]
- create_generated_clock -name CLKPDIV2 -source UPLL0/CLKOUT -divide_by 2 [get_pins UFF0/Q]
将分频得到的时钟定义成生成时钟(generated clock),那么系统在做时序分析时会把master clock 和 generated clock当做同步时钟来处理,做STA分析。如果把分频得到的时钟定义成新的时钟,而不是生成时钟(generated clock),那么分频得到的时钟与master 时钟就失去了联系,系统在做时序分析时会认为这两个时钟之间没有关系,当做异步时钟处理,不做STA分析,那么要是在这段路径传输出现问题就会导致错误。因此,在定义时钟时一定要弄清楚时钟之间的关系。
这种情况建议定义成新时钟
5. 输入路径和输出路径约束
针对以下这三种时序路径:clock pin -> output port;input port -> 寄存器D端;input port -> output port 。
- set_input_delay -clock CLKA -max [expr Tclk2q + Tc1] [get_ports INP1]
- 下图时序路径为:input port -> 寄存器D端
针对建立时间和保持时间分别设置不同的约束
- set_output_delay -clock CLKQ -max [expr Tc2 + Tsetup] [get_ports OUTB]
- 下图是针对时序路径:clock pin -> output port
针对建立时间和保持时间分别设置不同的约束
终点(endpoint)是哪个时钟那么就是哪个时钟的path groups,这样来判断是哪个时钟域的
通过以上的这些约束基本上可以满足所有时序路径的时序分析,但是针对IO端口的外部约束还有额外要求。input和output
6. 设计规则检查
7. 虚拟时钟
在对input delay和output delay做STA时,定义虚拟时钟可以很好的约束这两条路径。
8. Refining the Timing Analysis
让整个工具分析的空间更小,节省运行时间的四个约束
在做DFT时需要插入扫描链时钟,那么在系统工作时这个时钟时不工作的,因此在STA时不需要对扫描链时钟进行时序检查。
- set_case_analysis
- set_disable_timing
- set_false_path
- 跨时钟域;
- 有些时序路径永远不会出现
- set_multicycle_path
- 组合逻辑延时过大,需要好几个周期才能实现,因此就没有不要每个周期来检查建立时间和保持时间,告诉工具过几个周期再来检查。