十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

静态时序分析中建立与保持时间余量的计算原理与工程实践

静态时序分析中建立与保持时间余量的计算原理与工程实践 1. 从“余量”说起为什么静态时序分析离不开它在数字芯片设计的后端流程里静态时序分析Static Timing Analysis, STA是确保芯片能在指定频率下稳定工作的“守门员”。我们常听到工程师说“这个路径的建立时间余量Setup Slack是正的但保持时间余量Hold Slack快没了得修一下。” 这里的“余量”Slack就是衡量时序是否达标、设计是否还有优化空间的核心指标。它不是一个抽象的概念而是一个可以精确计算出来的数值直接决定了你的芯片是能跑在1GHz还是只能跑到800MHz甚至决定了芯片能否正常工作。很多人刚开始接触STA时会被各种时序路径、时钟定义、时序约束搞得晕头转向而“余量计算”往往是理清这一切的头绪。你可以把一条时序路径想象成一场必须在特定时间窗口内完成的接力赛。建立时间检查就像是要求接力棒必须在裁判吹响“结束哨”时钟有效沿之前的一小段时间建立时间内稳稳地交到下一棒手中。保持时间检查则要求在裁判吹响“开始哨”同一个时钟有效沿之后的一小段时间保持时间内接力棒不能提前被下一棒抢走。余量就是实际交接时间与这个严格时间窗口要求之间的差值。如果是正数说明你提前或按时完成了交接有余地如果是负数那就意味着违规芯片在这个频率下会失效。计算建立余量和保持余量是STA工程师的每日基本功。但这项基本功里藏着不少门道公式虽然固定但公式里每一个参数的来源、在不同场景下的处理方式、以及计算结果的解读都直接关系到设计的成败。今天我们就抛开教科书上简化的例子深入聊一聊在实际工程项目中如何正确地计算、理解和运用这两个至关重要的“余量”。2. 建立时间余量与时钟周期的赛跑建立时间检查是保证数据在时钟有效沿到来之前已经稳定在触发器数据输入端的检查。它的计算逻辑是“要求到达时间”与“实际到达时间”的赛跑。2.1 核心计算公式与参数拆解建立时间余量的通用计算公式如下建立时间余量 数据要求到达时间 - 数据实际到达时间或者更具体地展开为Setup Slack T_clk_period T_clk_arrival_capture - T_clk_arrival_launch - T_clk_uncertainty_setup - T_data_delay - T_setup看起来有点复杂我们把它拆解成几个关键部分来理解T_clk_period时钟周期。这是最根本的约束决定了电路必须跑多快。例如目标频率是1GHz周期就是1ns。T_clk_arrival_capture捕获时钟路径的延迟。时钟从源端如PLL输出或端口到达捕获触发器Capture Flip-Flop时钟引脚的时间。T_clk_arrival_launch发射时钟路径的延迟。时钟从源端到达发射触发器Launch Flip-Flop时钟引脚的时间。T_clk_uncertainty_setup建立时间检查的时钟不确定性。这是一个“悲观”的预留量包含了时钟抖动、时钟偏斜的悲观部分等。它会缩短有效的时间窗口。T_data_delay数据路径延迟。数据从发射触发器的Q端经过中间的组合逻辑、连线到达捕获触发器D端的总时间。T_setup捕获触发器的建立时间。这是一个触发器固有的物理参数在库文件中定义。注意公式中的加减号是关键。T_clk_arrival_capture是加因为它代表了捕获沿的“位置”T_clk_arrival_launch是减因为它代表了发射沿的“位置”。T_clk_uncertainty_setup和T_data_delay、T_setup都是减因为它们都是消耗时间的因素。2.2 一个典型场景的计算实例假设我们有一个简单的寄存器到寄存器路径目标时钟周期为2ns频率500MHz。时钟源到发射触发器的延迟为0.3ns到捕获触发器的延迟为0.5ns这里产生了0.2ns的时钟偏斜。建立时间不确定性设为0.1ns。数据路径延迟经计算为1.2ns触发器的建立时间库值为0.05ns。我们来一步步计算数据要求到达时间捕获时钟沿到达的时间减去不确定性再减去触发器的建立时间。捕获时钟沿在时间轴上的位置 发射时钟沿 时钟周期 捕获路径延迟修正这里需要小心。更稳妥的方法是分别计算发射沿和捕获沿的绝对时间。发射沿绝对时间 T_clk_arrival_launch 0.3ns (假设时间0点时钟从源端发出)捕获沿绝对时间 一个周期后 捕获路径延迟 2.0ns 0.5ns 2.5ns数据要求到达时间 捕获沿绝对时间 -T_clk_uncertainty_setup-T_setup 2.5ns - 0.1ns - 0.05ns 2.35ns数据实际到达时间发射沿绝对时间 数据路径延迟 0.3ns 1.2ns 1.5ns建立时间余量 数据要求到达时间 - 数据实际到达时间 2.35ns - 1.5ns 0.85ns这个正0.85ns的余量意味着在这个频率下该路径有0.85ns的“安全边际”。即使数据路径延迟因为工艺、电压、温度的变化而有所增加或者时钟抖动比预估的稍大只要恶化程度不超过0.85ns路径依然能满足建立时间要求。2.3 多周期路径与半周期路径的处理实际设计中并非所有路径都默认为单周期。这是新手容易踩坑的地方。多周期路径某些逻辑计算需要多个时钟周期才能完成比如某些计数器或复杂算法单元。此时在约束中会使用set_multicycle_path命令。这个命令的本质是修改了公式中的“要求到达时间”。例如设置为2个周期那么数据要求到达时间就会从原来的“下一个时钟沿”推迟到“下下个时钟沿”相当于在公式里给T_clk_period加了倍。计算余量时必须确认该路径是否应用了多周期约束否则会得到完全错误的、过于乐观或悲观的余量。半周期路径当发射触发器和捕获触发器使用相反沿一个上升沿发射一个下降沿捕获时可用的时间窗口只有半个周期。此时公式中的T_clk_period需要替换为半个周期T_clk_period/2。工具通常能自动识别这种跨时钟沿的路径但工程师需要理解其计算基础。实操心得在查看STA报告时第一眼不是看余量数值而是看这条路径的起点和终点时钟以及是否有特殊的时序例外Exception标签。忽略多周期路径约束是导致时序验证结果与实际硅片行为不符的常见原因之一。3. 保持时间余量同一时钟沿下的“防抢夺”检查保持时间检查是保证数据在时钟有效沿到来之后的一小段时间内保持稳定防止被新数据覆盖。它与时钟周期无关是同一个时钟沿下的检查。3.1 核心计算公式与参数拆解保持时间余量的通用计算公式如下保持时间余量 数据实际到达时间 - 数据要求到达时间注意这里与建立时间余量的公式顺序是反的。展开来看Hold Slack T_clk_arrival_launch T_data_delay - T_clk_arrival_capture - T_clk_uncertainty_hold - T_holdT_clk_arrival_launch发射时钟路径延迟同建立时间检查。T_data_delay数据路径延迟同建立时间检查。T_clk_arrival_capture捕获时钟路径延迟同建立时间检查。关键点来了在保持时间检查中这个“捕获沿”和建立时间检查中的“捕获沿”是同一个物理时钟沿吗对于标准的寄存器到寄存器路径是的。建立时间看的是当前发射沿的数据能否在下一个捕获沿之前准备好保持时间看的是当前发射沿的数据会不会在同一个发射沿对应的那个捕获沿到来之后太快被改变。因此在计算保持时间余量时T_clk_arrival_capture指的是同一个时钟边沿到达捕获触发器的时间。T_clk_uncertainty_hold保持时间检查的时钟不确定性。通常与建立时间不确定性取值不同它主要考虑时钟偏斜的悲观部分对保持时间不利的那部分偏斜。T_hold捕获触发器的保持时间一个物理库参数。3.2 计算实例与时钟偏斜的影响沿用上一个例子的部分参数发射时钟延迟0.3ns捕获时钟延迟0.5ns数据路径延迟1.2ns。设保持时间不确定性为0.05ns触发器保持时间库值为0.02ns。数据实际到达时间在捕获沿看来T_clk_arrival_launch T_data_delay 0.3ns 1.2ns 1.5ns。这个时间点数据已经到达捕获触发器的D端。数据要求到达时间数据最早不能在什么时候到达它必须晚于捕获沿加上一些余量。捕获沿绝对时间同一个沿 T_clk_arrival_capture 0.5ns数据要求到达时间 捕获沿绝对时间 T_clk_uncertainty_holdT_hold 0.5ns 0.05ns 0.02ns 0.57ns保持时间余量 数据实际到达时间 - 数据要求到达时间 1.5ns - 0.57ns 0.93ns这个正余量意味着数据实际在0.57ns之后才被允许改变而它直到1.5ns才真正改变来自前一个数据因此完全满足保持时间要求有0.93ns的富裕。这里凸显了时钟偏斜Clock Skew对建立和保持时间的相反影响对建立时间如果捕获路径延迟大于发射路径延迟正偏斜T_clk_arrival_capture变大这会使数据要求到达时间变晚对建立时间有利。对保持时间同样是正偏斜捕获延迟大T_clk_arrival_capture变大这使得数据要求到达时间不能早于的时间点也变晚对保持时间不利。因为要求数据保持稳定的时间区间被推后了而数据实际到达时间由发射延迟和数据延迟决定相对提前了余量可能变小甚至变负。3.3 保持时间违例的修复思路建立时间违例通常通过降低数据路径延迟优化逻辑、插入流水线、提升驱动强度或放松时钟频率来解决。而保持时间违例的修复思路则不同因为它的矛盾在于数据“到得太快”。插入延迟单元在数据路径上故意添加缓冲器Buffer增加T_data_delay。这是最直接的方法但会增加面积和功耗。调整时钟树通过调整时钟路径的延迟改变时钟偏斜。例如增加捕获触发器的时钟路径延迟让时钟更晚到可以缓解保持时间违例因为要求数据保持稳定的时间点被推后了。但这需要精细的时钟树综合控制。使用具有更大保持时间的触发器某些特殊单元库可能提供选项但这不常见。检查时钟不确定性设置过度的保持时间不确定性T_clk_uncertainty_hold设置会导致不必要的悲观估计适当调整可能解决虚假的违例。踩坑记录在一次40nm项目的签核阶段我们发现一个关键模块在低温低压SSG corner下出现大量保持时间违例而在常温常压TT下却完全干净。排查后发现问题出在数据路径上的一个与门AND。在SSG corner下该单元的延迟显著减小导致数据路径延迟T_data_delay比预估的短了很多从而引发了保持时间问题。修复方法是在这些敏感路径上插入专用的延迟单元Delay Cell其延迟特性在不同工艺角下相对稳定而不是用普通缓冲器。这提醒我们保持时间检查必须覆盖所有工艺角特别是对延迟变化敏感的高速路径。4. 时序模型、环境与工具计算解读理解了手工计算原理后我们还需要知道EDA工具是如何在复杂的网表、寄生参数和时序模型下完成亿万级路径计算的。4.1 单元延迟与连线延迟计算的基础公式中的T_data_delay并非一个固定值它由两部分组成单元延迟每个标准单元门电路、触发器的延迟通过查找表模型计算。输入是输入信号转换时间Transition Time和输出负载Load Capacitance输出是延迟值和输出转换时间。工具会根据实际工作的电压、温度、工艺角Corner去查对应的库文件。连线延迟金属连线的延迟由提取出的寄生电阻电容RC网络计算得到。在纳米工艺下连线延迟常常超过单元延迟成为主导因素。工具会使用Elmore延迟模型或更精确的模型进行计算。在计算余量时工具会沿着路径将所有这些单元延迟和连线延迟累加起来得到总的T_data_delay。对于建立时间检查它使用最大延迟模型Max Delay通常对应慢工艺角、低电压、高温对于保持时间检查它使用最小延迟模型Min Delay通常对应快工艺角、高电压、低温。4.2 片上变化与降额因子在先进工艺下工艺波动、电压噪声和温度梯度使得芯片上不同位置的晶体管性能不再一致。这就是片上变化On-Chip Variation, OCV。为了应对OCVSTA中会引入降额因子Derating Factor。原理工具不会简单地对所有路径使用统一的延迟值。它会为发射路径和捕获路径的延迟分别乘以一个大于或小于1的系数进行悲观化处理。对建立时间的影响悲观情况下工具可能增加数据路径延迟发射侧同时减少时钟路径延迟捕获侧从而使建立时间余量计算更保守。对保持时间的影响悲观情况下工具可能减少数据路径延迟发射侧同时增加时钟路径延迟捕获侧从而使保持时间余量计算更保守。高级应用公共路径悲观性移除是OCV分析中的一个高级概念。它识别出发射和捕获时钟路径中共享的部分并认为这部分路径的延迟变化在两次测量中是相关的从而移除这部分不必要的悲观估计使分析更接近实际情况。4.3 如何阅读STA工具的报告以Synopsys PrimeTime的报告为例一条典型的时序路径报告会包含以下几个关键部分我们需要学会从中提取计算参数Startpoint: reg_A (rising edge-triggered flip-flop) Endpoint: reg_B (rising edge-triggered flip-flop) Path Group: CLK Path Type: max (setup) // 或 min (hold) Point Incr Path ---------------------------------------------------------- clock CLK (rise edge) 0.000 0.000 clock source latency 0.100 0.100 reg_A/CK (FD1) 0.200 0.300 r reg_A/Q (FD1) 0.050 0.350 r U1/Z (AND2) 0.150 0.500 r net (wire load model) 0.080 0.580 r reg_B/D (FD1) 0.000 0.580 r data arrival time 0.580 clock CLK (rise edge) 2.000 2.000 clock source latency 0.100 2.100 clock network delay (propagated) 0.450 2.550 reg_B/CK (FD1) 0.000 2.550 r library setup time -0.050 2.500 data required time 2.500 ---------------------------------------------------------- data required time 2.500 data arrival time -0.580 ---------------------------------------------------------- slack (MET) 1.920数据实际到达时间报告最下方data arrival time这里是0.580ns。数据要求到达时间报告中的data required time这里是2.500ns。余量最下方的slack这里是1.920ns。它等于 2.500 - 0.580 1.920ns。路径分解上半部分详细列出了从发射时钟沿开始经过时钟路径、触发器CK-Q延迟、组合逻辑单元延迟、连线延迟直到捕获触发器D端的每一步累积延迟Path列。这是分析关键路径、定位瓶颈的宝贵信息。实操心得当看到违例负的Slack时不要只看最终数字。要仔细阅读路径报告看Incr增量延迟最大的几项是什么。是某一段特别长的连线还是一个驱动能力很弱的门驱动了很大的负载或者是时钟网络延迟异常大这能帮你快速定位优化方向。例如如果是一个单元的Incr特别大可能是输入转换时间太差或输出负载太重解决方案可能是插入缓冲器、调整单元尺寸或优化前级驱动。5. 先进节点与低功耗设计带来的挑战随着工艺进入7nm、5nm甚至更先进节点以及低功耗设计的普及余量计算变得更加复杂。5.1 多电压域与电源门控在现代SoC中不同模块可能工作在不同的电压下或者可以被单独断电电源门控。这引入了新的时序检查场景电平转换器检查当信号从高电压域传到低电压域或反之需要经过电平转换器。STA工具需要检查电平转换器本身的延迟并确保信号在电压转换后满足接收端的时序要求。电源门控的唤醒与关断序列对电源门控模块需要检查“唤醒”过程中电源稳定到时钟有效、以及数据路径稳定的时间。同时还要检查“关断”过程中在电源关闭前触发器状态是否已正确保存到保持寄存器或内存中。这些检查通常由特殊的约束和库模型支持。5.2 动态电压频率缩放与自适应偏斜DVFS技术允许芯片在不同性能和功耗需求下动态调整电压和频率。这对STA意味着多角多模分析需要对每一个电压-频率组合点Operating Point分别进行时序签核。一个在高压高频下满足时序的设计可能在低压低频下出现保持时间违例因为延迟变化非线性。自适应时钟偏斜有些设计会采用可调延迟线来动态微调时钟到达不同区域的时间以优化时序或降低功耗。STA需要能对这种动态行为进行建模或验证。5.3 电磁迁移与老化效应在先进工艺下电流密度增大电磁迁移效应会导致金属连线电阻随时间缓慢增加。晶体管老化如偏置温度不稳定性也会导致阈值电压漂移使器件变慢。这些效应是时变的。签核考量为了确保芯片在寿命周期内如10年都能正常工作需要在签核阶段引入额外的时序余量称为老化降额或寿命降额。这相当于在传统的OCV基础上再增加一层悲观因素。计算最终设计余量时必须将这些因素考虑在内这意味着你看到的“芯片级余量”会比“模块级余量”更紧。个人体会在28nm及以上的项目中我们可能更关注功能、频率和面积。但在16nm/7nm项目中功耗、可靠性和寿命成为了与性能同等重要的指标。时序余量不再只是一个简单的正负数字它变成了一个多维度的设计空间探索工具。我们需要在性能频率、功耗电压、面积成本和可靠性老化余量之间做出艰难的权衡。有时候为了满足严格的寿命末期的时序要求我们不得不牺牲一些峰值性能或者增加额外的面积来插入更稳健的电路。理解余量计算的每一个细节正是为了在这些权衡中做出最明智的决策。
返回列表