STA概念之Propagation delay、slew、skew和latency

本文从STA概念出发,介绍了Propagation delay、slew、skew和latency。Propagation delay是两个边沿间的延迟;slew指信号电平翻转速度;skew是多个时钟信号间的时间差;clock latency是时钟源到终点的总时间,还介绍了相关命令及不确定性计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这部分内容容易混淆,为了方便记忆和理解,故从STA概念浅析之Propagation delay、slew、skew和latency - 知乎 (zhihu.com)摘录如下内容:

Propagation Delay(传播延迟)

考虑下图中反相器输入输出引脚上的波形

Propagation Delay表示为:

Output fall delay (Tf)
Output rise delay (Tr)

如果当做理想波形分析,则Propagation Delay就是两个边沿之间的延迟。

Slew

在静态时序分析中,使用transition time来测量波形上升或下降的快慢(slew rate),也就是信号在两个电平之间转换所花费的时间。transition time是slew rate的倒数。

transition time的阈值设置也可以是20%~80%或者10%~90%。

Slew指信号电平翻转的速度,即从1变0或从0变1的翻转速度,即是指信号的翻转率,通常slew=constant/(transition time)。

transition time是指信号从高电平转化到低电平或者低电平转化到高电平所花费的时间。Transition time的长短和输入信号input transition以及output的load有关。上升和下降transition时间都是timing arc的特性,输入信号和输出信号都有上升和下降的transition时间。STA工具是通过slew的阈值来计算输入的transition时间

Skew(偏移)

Skew是两个或多个时钟信号之间的时间差。 例如,如果时钟树有500个端点(endpoints),并且Skew为50ps,则表示最长时钟路径和最短时钟路径之间的时间差为50ps。

时钟树的起点(beginning point)通常是时钟定义点。 时钟树的终点(end points)通常是同步元件,例如触发器的时钟端。

Clock latency(时钟延迟)是从时钟源到终点的总时间。 Clock skew是时钟树到达不同终点的时间差。

理想的时钟树(ideal clock tree)假设时钟源具有无限驱动(infinite drive)能力,也就是说,时钟可以无延迟地驱动无限多的单元。 另外,假定时钟树中存在的任何单元也具有零延迟。

在逻辑综合阶段, STA通常以理想的时钟路径执行,分析的重点放在数据路径上。

在理想的时钟树中,默认clock skew为0ps。

时钟树的clock latency可以显式地使用set_clock_latency命令指定。

set_clock_latency2.2 [get_clocks BZCLK]
# Both rise and fall latency is 2.2ns.
# Use options -rise and -fall if different.

时钟树的clock skew也可以通过set_clock_uncertainty命令指定。

set_clock_uncertainty 0.250 -setup [get_clocks BZCLK]
set_clock_uncertainty 0.100 -hold [get_clocks BZCLK]

set_clock_uncertainty指定一个窗口(window),时钟沿可能出现在该窗口内任何一个位置。

时钟边沿时序的uncertainty包含多个因素,例如时钟周期jitter和用于STA额外的margins。

实际上,没有理想的时钟,也就是说,所有的时钟都具有jitter。

在时钟树综合之前指定clock uncertainty时,应包括jitter、skew和margins。

clock uncertainty = jitter + skew + margins

在时钟树综合之后指定clock uncertainty时,不包括skew,只包括jitter,因为此时时钟树有实际的走线,可以计算出实际的skew。

可以为setup检查和hold检查指定不同的clock uncertainty。

hold检查不需要将jitter包括在uncertainty中,因此hold检查的uncertainty较小。原因是hold 是同沿check ,所以不存在clock jitter。

在实际项目中,还需要增加额外的margin,做更加悲观保守的STA分析。例如对于150ps的uncertainty,可以再增加50ps的margin。

set_clock_latency2.0 [get_clocks USBCLK]
set_clock_uncertainty 0.2 [get_clocks USBCLK]
# The 200ps may be composed of 50ps clock jitter,
# 100ps clock skew and 50ps additional pessimism.

所以在综合时,需要设置的set_clock_uncertainty为jitter + skew + margin

Reference:

Static Timing Analysis for Nanometer Designs A Practical Approach

<think>嗯,用户问的是关于时钟树综合中latencyskew如何平衡的问题。首先,我需要回顾一下之前的对话历史,确保这次回答能连贯一致。之前用户问过CTS中如何通过约束来平衡skew,现在他们可能想更深入理解latencyskew之间的关系以及如何权衡两者。 首先,latency指的是时钟信号从源端到终端的传播时间总,而skew是不同终端之间的时钟到达时间差异。用户可能在实际设计中遇到了如何调整两者以达到最佳性能的问题。他们可能想知道在优化时,如何不牺牲太多latency的情况下减少skew,或者反过来。 接下来,我需要考虑用户的身份。可能是数字设计工程师,或者是正在学习物理设计的学生。如果是工程师,他们可能需要实用的方法,比如约束设置、工具命令、设计策略等。而学生可能需要更基础的概念解释平衡策略的理论。 用户的需求可能包括了解latencyskew的基本概念、它们的相互影响,以及实际设计中如何平衡两者的具体方法。深层需求可能是如何在面积、功耗时序之间找到平衡点,因为优化latencyskew可能会影响其他设计指标。 需要确保回答结构清晰,分点说明,结合之前的回答中的约束方法,比如最大/最小延迟、目标延迟、过渡时间等,以及如何通过这些约束来平衡两者。同时,可能需要举例说明不同应用场景下的权衡策略,比如高性能设计更关注skew,低功耗设计接受一定skew以降低latency。 还要注意使用用户提到的格式要求,比如行内公式用$...$,独立公式用$$...$$,并且用中文回答。需要检查是否有遗漏的约束类型,或者是否有更优的组织方式让信息更易懂。 最后,可能需要补充实际设计流程中的操作步骤,比如在SDC中设置约束,CTS阶段的工具优化,以及签核验证的方法,帮助用户将理论应用到实践中。同时,强调两者平衡的动态性折中性,避免用户误以为可以完全消除其中一方。</think>在时钟树综合(CTS)中,**Latency(延迟)****Skew(偏差)**的平衡是核心挑战之一。以下是两者的定义、矛盾关系及平衡策略: --- ### **1. 基本概念** | **指标** | **定义** | **公式** | **影响** | |----------------|--------------------------------------------------------------------------|-----------------------------------|-----------------------------------| | **Latency** | 时钟信号从根节点(Clock Source)到叶子节点(Flip-Flop)的总传播时间 | $$ t_{\text{latency}} = \sum_{i=1}^n t_{\text{buffer}_i} + t_{\text{wire}_i} $$ | 功耗↑、时序收敛难度↑ | | **Skew** | 不同叶子节点之间的最大时钟到达时间差 | $$ \text{Skew} = \max(t_{\text{arrival},i}) - \min(t_{\text{arrival},j}) $$ | 时序违例(Setup/Hold)、功能错误 | --- ### **2. LatencySkew的冲突** - **矛盾本质**: 为了降低Skew,通常需要插入更多缓冲器(Buffer)或调整走线长度,但这会增加Latency;反之,若过度压缩Latency(如减少缓冲层级),可能导致分支延迟差异扩大,Skew恶化。 **示例**: - **低Latency设计**:直接驱动长走线 → 驱动能力不足 → 不同分支的延迟差异(Skew)增大。 - **低Skew设计**:插入大量缓冲器平衡路径 → 总Latency增加 → 动态功耗上升。 --- ### **3. 平衡策略** #### **(1) 分层优化法** - **步骤**: 1. **全局平衡**:优先通过 **对称结构(H-tree/X-tree)** **负载匹配** 减少Skew。 ```tcl set_clock_tree_options -structure symmetric # 强制对称结构 ``` 2. **局部优化**:在关键路径上允许适度Latency增加,以补偿Skew。 ```tcl set_clock_tree_exceptions -float_pin_allowance 0.1ns # 局部路径容忍额外延迟 ``` #### **(2) 约束协同设置** - **联合定义LatencySkew边界**: ```tcl # 限制总Latency不超过时钟周期的60%(假设周期为2ns) set_clock_tree_options -max_delay 1.2ns -min_delay 0.8ns # 目标Skew不超过50ps set_clock_tree_options -target_skew 0.05ns ``` - **动态权衡**:工具(如Cadence Innovus)会根据约束优先级自动优化: - **高频率设计**:优先满足Skew约束,牺牲Latency。 - **低功耗设计**:允许一定Skew,优先压缩Latency。 #### **(3) 缓冲器与驱动优化** - **缓冲器插入策略**: - **平衡驱动强度**:在负载较大的分支插入高驱动缓冲器,减少延迟差异。 ```tcl set_buffer_type -type CLKBUF_HS -for_clock # 指定高驱动缓冲器类型 ``` - **缓冲器级数匹配**:确保对称路径的缓冲器级数相同,避免级数差异导致Skew。 ```tcl set_clock_tree_options -balance_levels true # 强制缓冲层级匹配 ``` #### **(4) 物理设计辅助** - **金属层与走线匹配**: - 对称路径使用相同金属层(如均用M5)、相同宽度/间距,减少RC差异。 ```tcl set_clock_route_rules -layer {M5} -width 0.1 -spacing 0.2 ``` - 对长走线插入中继器(Repeater),平衡不同分支的传播速度。 #### **(5) 统计分析** - **蒙特卡洛仿真**:考虑工艺波动(PVT),评估LatencySkew的鲁棒性。 **公式**: $$ \text{Skew}_{\text{worst-case}} = \text{Skew}_{\text{nominal}} + 3\sigma $$ **实现**:在STA中设置OCV(On-Chip Variation)模式,覆盖极端情况。 --- ### **4. 实际场景下的权衡** | **场景** | **优化优先级** | **典型策略** | **风险控制** | |---------------------|----------------------|-----------------------------------------------|----------------------------------| | **高性能芯片** | Skew最小化 | 对称结构 + 大量缓冲器 | 功耗↑、面积↑ | | **低功耗设计** | Latency最小化 | 减少缓冲层级 + 非对称优化 | Skew容忍度需放宽(如±10%) | | **多时钟域设计** | 域内Skew优先 | 分组优化(Group Path) + 跨域隔离 | 跨域时序需额外约束 | | **含门控时钟设计** | 门控单元延迟匹配 | 插入平衡缓冲器 + 门控时序检查 | 避免门控使能信号传播延迟差异 | --- ### **5. 签核验证** - **检查项**: 1. **全局Latency**:确保总延迟满足时钟周期要求(通常 $$ t_{\text{latency}} \leq 0.6T_{\text{clock}} $$)。 2. **局部Skew**:同一时钟域内Skew不超过目标值(如 $$ \text{Skew} \leq 50\text{ps} $$)。 3. **过渡时间**:信号斜率(Slew)需稳定,避免因驱动不足导致隐性延迟差异。 - **工具命令**: ```tcl report_clock_timing -type latency # 报告总延迟 report_clock_timing -type skew # 报告Skew分布 check_clock_tree # 检查CTS规则违反 ``` --- ### **总结** 平衡LatencySkew的本质是 **动态折衷**: - **黄金法则**:在满足时序收敛的前提下,优先控制Skew;若功耗/面积敏感,可适当放宽Skew约束。 - **关键指标**:Skew/Latency比值(通常要求 $$ \text{Skew} \leq 10\% \times t_{\text{latency}} $$)。 - **最终目标**:实现 **可预测的时钟网络**(Predictable Clock Network),确保芯片功能正确性与性能稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值