本节摘要:锁存器在电平有效期间对数据透明,数据迟到可以"借"下一段路径的时间,这就是时间借用(time borrowing)。借来的时间要连本带息偿还——它直接挤压下一级的建立预算。本节给出借用上限的计算与完整的数字例子,并说明锁存器为什么在保持检查上反而更苛刻。
别以为锁存器只是"半个触发器"。触发器在沿上采样,沿前有建立要求、沿后有保持要求,窗口是刚性的;锁存器在电平有效的整个期间都是透明的——数据只要在关门前进来就行,来晚了一点,它就开着门多等一会儿。这个看似宽容的特性,被高性能设计发展成一门正经技术:时间借用。它也是脉冲锁存式处理器能跑出极限频率的秘密之一。
考虑一个高电平有效的锁存器,时钟周期 0.5ns,高电平持续 0.25ns(从 0.25ns 到 0.5ns 关门,按负沿锁存讨论时窗口位置随极性变化,这里取最常见的布置:锁存器在周期后半段透明)。数据在本应被采样的时刻还没到——迟到了 0.1ns。若是触发器,这就是 0.1ns 的建立违例,没有商量。若是透明期的锁存器,门还开着:数据在 0.1ns 后照样进去,路径"借用"了下一级 0.1ns 的时间,下一级的可用预算随之减少 0.1ns。
借用的上限是明确的:数据最晚必须在锁存器关门之前稳定,也就是借用时间不能超过透明期宽度减去锁存器自身的建立时间。沿用 0.5ns 周期的例子:透明期 0.25ns,锁存器建立时间 0.03ns,则最大可借 0.22ns——听起来很多,但每借 1ps,下一级的建立预算就少 1ps。借用不是免费额度,是透支。

时间借用把相邻两级的建立检查变成了一个链条。设锁存器 L1 与下一级触发器 F2 之间的路径延迟为 D12,F2 的建立预算原本是(周期减不确定度减建立时间);L1 借用 B 之后,这条路径的起点推迟了 B,预算相应变为原值减 B。工具报告里这个借用值会显式打出来(time borrowed 一栏),多级锁存链的借用还会沿链传递——L1 向 L0 借,L2 又向 L1 借,链条末端的触发器承受全部累积。签核时必须确认:链条上任何一级的累计借用加自身路径延迟,都不超过自己的关门时间。
锁存器的保持检查同样存在,而且更微妙。锁存器有两组保持要求:透明期开始沿附近的保持(防止旧数据还没稳住就被新数据穿透)与关门窗附近的竞争。加上"穿透"(transparent shoot-through)现象——透明期内输入变化直接传到输出,前后级路径在透明期连成一体,延迟分析会把多级串成一条超长路径——这些使锁存器路径的签核工作量明显高于触发器路径。工具对锁存器路径做的是窗口式检查:在透明期起点与终点各算一遍建立,取更紧的那个。
借用上限最容易被单级思维误判,用两级链算一遍就清楚。设周期 0.5ns,三个存储点 L0(锁存)、L1(锁存)、F2(触发器),锁存器透明期都是 0.25ns、建立要求 0.03ns。第一段路径 L0 到 L1 延迟 0.40ns,超过名义周期 0.5ns 前的窗口吗?先算 L1 的透明窗:0.25ns 到 0.5ns 开门,数据 0.40ns 到达,在窗内,正常锁存且没用上"晚关门"的余地——借用为零。真正的借用发生在数据晚于标称采样点时:若第一段延迟 0.55ns,数据在 0.55ns 才到 L1,超过了标称沿 0.5ns,锁存器靠透明期兜住——借用 0.05ns,L1 的关门线在 0.75ns(下一拍透明期结束)。现在第二段 L1 到 F2:F2 的建立检查以 L1 实际关门沿为起点,可用时间从名义的 0.5ns 变成 0.75ns 减去下一级要求——但要扣除借用:第二段数据的起点是 0.55ns,留给它的时间是 0.75 − 0.55 = 0.20ns 再减建立与不确定度。若第二段路径延迟 0.18ns,F2 侧裕量只剩约 0.02ns——第一级的 0.05ns 借用几乎吃光第二级全部余量。两级链条尚且如此,三级以上的锁存链在签核里必须按累计借用整链校验,工具的 time borrowed 一栏逐级相加就是干这件事的。
时间借用的真实收益来自工艺与频率的夹缝:当关键路径的延迟抖动分布比较宽时,触发器设计必须让最坏路径达标,而锁存器设计允许单拍内互相调剂,把分布的尾部"摊平"。流水线级数越深、路径延迟方差越大的设计,收益越明显。代价也实在:扫描测试插入更麻烦(锁存器要换成扫描锁存器),时序签核的窗口检查更费工具,调试时波形里的"穿透"容易误导人。因此工业界的主流做法是:数据通路用触发器保证可控性,在极少数极限路径上用锁存器(或脉冲触发器——它把透明期压缩成一个窄脉冲,兼具两者的性格)做定向突破。读到这里你会发现一个统一的视角:锁存器没有推翻两道门槛,它只是把建立门槛从"沿前"扩宽成了"关门前",门槛的性质没变,只是位置可以商量了。
问:借用上限是不是越大越好?不是——上限是"能借",不是"该借"。借满上限的路径意味着下一级零余量,签核 policy 通常限制实际借用不得超过透明期的一半,给波动留余地。问:触发器有没有类似的宽容度?有,但小得多——触发器的建立窗口在沿前就关闭了,迟到数据没有任何商量;这也是脉冲触发器出现的理由:把锁存器的透明期压成一个几百皮秒的窄脉冲,保留一点点借用的柔性的同时消除穿透。问:扫描测试怎么处理锁存器?换扫描锁存器或为透明期设计专门的移位方式,测试逻辑复杂度上升,这正是"锁存器省下的时间,一半还给 DFT"的出处。
两道门槛至此讲完,还差最后一公里:把公式、报告与真实数字对接。下一节逐行解剖一份完整的违例报告——问题链第四站"违例怎么报",从那里你将学会对任何一个数字说出它的出处。