2.1 基础检查:建立与保持的判定公式


2.1 基础检查:建立与保持的判定公式

本节摘要:建立检查问"数据赶不赶得上",保持检查问"数据会不会抢跑"。本节给出两个判定式的完整形态,用 0.5ns 周期的数字例子手算建立裕量与保持裕量,并解释两本账为什么在慢角与快角分别结算。

两道门槛的公式,值得像背乘法口诀一样背下来——因为全册每一章(修复决策树、多角矩阵、签核判据)都建立在这两行算术上。本节先给公式,再给完整算例,最后拆开几个容易算错的位置。

一、两个判定式与直觉

把 1.2 的三段构成代进时间轴,建立检查的裕量可以写成一行:

setup slack = (Tclk + skew − Tuncertainty_setup − Tsetup) − (Tcq + Tdata_max)

左边括号是要求时间(required):捕获沿的名义位置 Tclk,加上捕获时钟路径比启动路径多走的偏斜 skew,减去不确定度与捕获触发器的建立时间窗口。右边括号是到达时间(arrival):启动触发器的 CLK 到 Q 延迟 Tcq,加上数据路径上所有单元与互连延迟之和 Tdata。要求减到达,正数放行。

保持检查把比较对象换成同一个捕获沿:

hold slack = (Tcq_min + Tdata_min) − (Thold + Tuncertainty_hold + skew)

数据最快也要在捕获沿之后稳定 Thold 这么久——右边是"最坏情况下的旧数据存续时间",左边减号后面是"新数据被允许最早出现的时刻"。注意保持检查没有 Tclk 项:它比较的是同一个沿,周期再长也帮不上忙。这就是"保持违例不能靠降频救"这句行话的全部数学依据。

接力赛是理解这对公式的合适比喻:建立检查要求交棒必须在下一棒跑完自己赛段冲线前完成——赛段总时长就是 Tclk;保持检查要求交接区内前一棒的棒不能在规定区间之前脱手——这与全程多长无关,只与交接区规则有关。

二、0.5ns 周期完整算例

设定一个 reg2reg 路径:周期 Tclk = 0.5ns(2GHz),慢角下 Tcq = 0.08ns,数据路径(两级组合加互连)Tdata_max = 0.30ns,捕获触发器建立时间 Tsetup = 0.03ns,setup 不确定度 0.03ns,偏斜 skew = +0.02ns(捕获沿晚到 20ps)。代入建立公式:

要求时间 = 0.5 + 0.02 − 0.03 − 0.03 = 0.46 ns 到达时间 = 0.08 + 0.30 = 0.38 ns setup slack = 0.46 − 0.38 = +0.08 ns (达标)

这 0.08ns 的余量意味着什么?把公式倒过来解:该路径允许的最大 Tdata 是 0.46 − 0.08 = 0.38ns。如果硅上实际跑出的 Tdata 是 0.39ns,违例 0.01ns,频率上限约为 (0.38 + 0.03 + 0.03 − 0.02) = 0.42ns 周期,即约 2.38GHz——但注意,全芯片的频率上限由最差路径决定,不是由这条还剩 0.08ns 的路径决定。

同一套结构换到保持账(快角):Tcq_min = 0.05ns,Tdata_min = 0.02ns(短路径,可能就是寄存器到寄存器直连),Thold = 0.02ns,hold 不确定度 0.03ns,同一 skew = +0.02ns(此时它是坏消息):

到达时间 = 0.05 + 0.02 = 0.07 ns 要求时间 = 0.02 + 0.03 + 0.02 = 0.07 ns hold slack = 0.07 − 0.07 = 0.000 ns (零裕量,高危)

零裕量在签核里视同违例处理——任何一点偏差(工艺漂移、串扰、压降)都会把它推成负值。保持违例的典型修法是往数据路径上加延迟单元:加一级 30ps 的 delay buffer,hold slack 变成 +0.03ns,而建立账同时被扣掉 0.03ns,从 +0.08 变 +0.05。这就是两道门槛互相拆台的具体样子,第六章的决策树会系统化处理这类权衡。

图:两条门槛在同一时间轴上的窗口

图:两条门槛在同一时间轴上的窗口

三、算错高发的四个位置

第一处是偏斜符号。skew 定义为捕获延迟减启动延迟,捕获晚到对建立是好消息(正号),对保持是坏消息(出现在减号侧的加项)。很多手算错误源于把两本账的偏斜符号写反。第二处是不确定度的归属:有人在 arrival 侧减不确定度,其实它属于 required 侧的修正;保持账里它同样在要求侧。第三处是取数方向:建立账必须用 max 延迟(慢角库),保持账必须用 min 延迟(快角库),混用库是初学者最常见的整体性错误——现象是建立与保持的违例分布与预期完全相反。第四处是多周期与伪路径的叠加:如果路径上还压着例外约束(第四章),标准公式不再适用,手算之前先确认这条路径是不是被 set_multicycle_path 或 set_false_path 覆盖。

⚠️ 常见坑:报告工具默认按时钟沿对(同沿或相邻沿)推导检查关系,生成时钟分频比写错时,工具可能在错误的沿对之间做检查,slack 数值看起来"离谱地好"或"离谱地坏"。看到不合常理的裕量,先查时钟定义再查公式。

💡 关键直觉:两道门槛竞争同一个时间轴。频率越高,建立越紧、保持相对越松(周期变化不影响保持公式本身);降频可以让建立违例消失,但对保持违例毫无作用。拿到违例清单的第一件事,是把建立与保持分开排序——它们的修法是两套体系。

本节要点回顾

  • 建立公式:slack =(周期 + 偏斜 − 不确定度 − 建立时间)−(CLK 到 Q + 数据路径最大延迟),怕慢,慢角结算。
  • 保持公式:slack =(CLK 到 Q + 数据路径最小延迟)−(保持时间 + 不确定度 + 偏斜),怕快,快角结算,与周期无关。
  • 0.5ns 算例:setup slack +0.08ns 达标;hold slack 恰好为零,需加约 30ps 延迟单元救回。
  • 四个易错位:偏斜符号、不确定度归属、min/max 库混用、例外约束叠加。
  • 两道门槛互相拆台:保持修复会挤占建立预算,收敛工程本质上是在这对矛盾里找平衡。

公式到手,下一节补齐容易被忽略的辅助检查:异步复位什么时候释放才安全、时钟高电平最短能有多窄、门控时钟的使能信号怎么查。它们不决定频率上限,却决定芯片能不能复位进正常状态。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U