目录
- 1. CMOS逻辑门
- 2. 波形
- 3. 时钟
- 3.1. 指定时钟`create_clock`
- 时钟延迟`set_clock_latency `
- 时钟不确定度`set_clock_uncertainty `
- 跨时钟域`set_false_path`
- 3.2. 衍生时钟
- 3.3. 虚拟时钟
- 4. 时序路径
- 2.1. 输入路径
- 2.2. 输出路径
- 2.3. 点对点约束
本文介绍在执行静态时序分析(Static Timing Analysis, STA)前需要配置的环境,其实就是作SDC约束
1. CMOS逻辑门
CMOS逻辑门使用NMOS和PMOS晶体管搭建而成。如下图给出了CMOS非门的示例。
什么是MOS晶体管?MOS晶体管工作原理和VI特性详解
CMOS非门有两种稳定状态,具体取决于输入的电平状态。
当输入A为低电平(Vss或逻辑0)时,NMOS晶体管截止、PMOS晶体管导通,输出Z电平被上拉至逻辑为1的Vdd。
当输入A为高电平(Vdd或逻辑1)时,NMOS晶体管导通,而PMOS晶体管截止,输出Z电平被下拉至逻辑为0的Vss。
上述特性可以扩展到任何CMOS逻辑门。
在CMOS逻辑门中,输出节点通过上拉结构(由PMOS晶体管构成)连接至Vdd,并通过下拉结构(由NMOS晶体管构成)连接至Vss,来构成输出的高电平和低电平。同时上拉和下拉结构是互补的,如果上拉结构开启,则下拉结构将关闭,反之相反。以此保证输出电平只有高电平和低电平两种情况,无一例外。
基于此,可将各种CMOS逻辑门级联起来以实现更复杂的逻辑功能。
而这些CMOS逻辑门可以组合成各种基本逻辑块或称标准单元,例如与或非门、异或门、触发器等等。这些标准单元是预先设计好的,可供设计人员搭积木式的组合拼凑,实现各种功能。
2. 波形
CMOS单元电平随时间变化构成了波形,波形如下图所示,
而在STA中则需要根据电平变化来判断上升沿、下降沿和电压转换速率。由于上图中实际波形存在的弧形,我们用阈值来定义上升沿或下降沿的起始终止点。
例如
#下降沿的阈值点,即下降沿的终止点和起始点
slew_lower_threshold_pct_fall:30.0
slew_upper_threshold_pct_fall:70.0
#上升沿的阈值点,即下降沿的起始点和终止点
slew_lower_threshold_pct_rise:30.0
slew_upper_threshold_pct_rise:70.0
即从Vdd的70%-30%为下降沿,Vdd的30%-70%为上升沿。
因此有转换时间的定义
● 过渡时间(transition time): 阈值电压的起始点到终止点所需的时间。压摆率(Slew rate)则
是过渡时间的倒数。
当然在实际仿真和分析中,经常直接使用如下图的理想波形进行时序分析,将电平转换时间近似成零。
3. 时钟
时钟是时序电路的驱动源
3.1. 指定时钟create_clock
● 时钟树: 时序电路中从时钟源到各触发器CK端时钟路径构成的结构。
数字芯片中,触发器CK端的时钟有可能是锁相环PLL锁定出的时钟,也有可能是从外部直接输入的时钟(例如SPI的SCK),都可约束。
配置的SDC如下
# 名称: SYSCLK
# 周期: 20ns
# 占空比: 20ns内上升沿时刻为0ns,下降沿时刻为5ns
# 端口: SCLK
create_clock -name SYSCLK -period 20 -waveform {0 5} [get_ports SCLK]
时钟延迟set_clock_latency
分为网络延迟和源延迟。
● 网络延迟(network latency): 表示芯片内部时钟定义到第一级触发器CK端的时钟延迟,即input2reg。
● 源延迟(source latency): 表示芯片外部时钟源(比如晶振时钟、数据随路时钟)到时钟定义的时钟延迟,如下图所示。
理论上这些时钟延迟都为0,可以在STA时使用set_clock_latency
指令指定所有终点的时钟延迟
一般指定网络延迟即可,SDC如下
# 时钟CLK_CONFIG的上升沿和下降沿时钟延迟均为0.8ns
set_clock_latency 0.8 [get_clocks CLK_CONFIG]
# 时钟MAIN_CLK的上升沿时钟延迟为1.8ns
set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]
# 所有时钟定义的下降沿时钟延迟为2.1ns
set_clock_latency 2.1 -fall [all_clocks]
# 时钟SYS_CLK的上升沿和下降沿源时钟延迟均为1.9ns
set_clock_latency 1.9 -source [get_clocks SYS_CLK]
时钟不确定度set_clock_uncertainty
从PLL出来的时钟信号周期存在一定程度的抖动。
当然理想情况下抖动为0,可以在STA时使用set_clock_uncertainty
指令设定一个时间窗口,该窗口内任何时候都有可能产生时钟沿,这样的时间窗口就可以表示抖动量。
如下图
● 时钟偏斜(clock skew): 时钟信号从时钟源PLL到达不同终点的时间差。时钟延迟和时钟抖动导致了时钟偏斜。
跨时钟域set_false_path
● 时钟域(clock domain): 同一个时钟驱动的一组触发器就为同一个时钟域。
● 跨时钟域: 即一个时钟域的触发器Q端到另一个时钟域的D端存在数据路径。
由于两个时钟关系不确定,必然会导致信号传输不满足setup time和holdup time,因此作STA时可以使用set_false_path
设置伪路径不去分析这样的路径
跨时钟域行为会导致亚稳态问题产生,所以一般需要通过同步器、异步FIFO等方式作同步。
3.2. 衍生时钟
3.3. 虚拟时钟
4. 时序路径
● 时序路径: 信号从发起触发器(Launch Flip-Flop)D端起始,到捕获触发器(Capture Flip-Flop)D端结束构成的路径
注意“发起”和“触发”不是绝对的,一定是相对于某一条时序路径才能决定触发器到底是发起数据还是捕获数据
对于数字电路来说,需要STA分析的时序路径包括
- input2reg:从电路输入端到第一级触发器D端,组合逻辑,如下图路径1
- reg2reg:电路中发起触发器D端到捕获触发器D端,时序逻辑,如下图路径2
- reg2output:电路中触发器D端到输出端,组合逻辑,如下图路径3
- input2output:从电路输入端到电路输出端,组合逻辑,如下图路径4
时序检查就是针对以上几个时序路径的,显然最具代表性的时序路径就是第2条触发器到触发器路径
● 最大/小时序路径: 指整个电路中信号延迟最大/小的时序路径。