小延迟缺陷 ATPG 的用户实践经验
小延迟缺陷 ATPG 的用户实践经验
作者: Zahi Abuhamdeh、Vincent D'Alessandro (TranSwitch), Mona Marmash (Synopsys) 会议: SNUG Boston 2008 页数: 20 页
摘要
在已经接受我们需要增强测试方法以包含更高质量全速测试这一事实的前提下,我们尝试按照 Synopsys 文档的指导执行小延迟缺陷(Small Delay Defect,SDD)ATPG。但令我们大为惊讶的是,我们发现 60% 的故障具有负的slack。显然我们的 slack 数据存在问题。本文描述了为确保高质量 slack 数据从而产生高质量小延迟缺陷测试向量所采取的步骤。我们阐述了如何约束 PrimeTime 以最小化具有负 slack 的路径数量,以及如何使用从 PrimeTime 写出的 SDC 文件来约束 TetraMAX 进行 SDD ATPG 生成。
1. 引言
时序相关缺陷的重要性随着设计几何尺寸的持续缩小而日益增加。在较大几何尺寸的设计中,这不是一个问题,因为大多数时序故障会由于较大的几何结构和这些器件上可用的电流流程而被加剧。而在更精细的几何尺寸、追求更高性能的情况下,影响性能的缺陷可能重要到足以影响良率。因此,必须对这些缺陷进行测试。
目前,可用于全速结构测试的方法只有两种:使用功能向量,或使用延迟路径/跳变 ATPG 向量集。功能级全速向量非常难以产生,而且几乎不可能量化覆盖率的质量。对于一个小规模的目标电路,这种方法可能非常有效。然而对于整个芯片来说,这种方法非常不切实际。
第二种方法一直由两个组成部分构成:1)延迟路径(Delay Path)和 2)跳变 ATPG(Transition ATPG)。前者提供了精确到引脚的精度,用于测量分布在最长路径上的极小延迟。这些路径是特定的,将从静态时序分析运行中以逐门方式提取。而第二组向量将针对延迟路径未覆盖的剩余故障,并通过针对所有可测试的跳变延迟来补足 ATPG 向量集。
延迟路径向量作为一种针对芯片最长路径生成目标延迟性能的方法非常稳健。这种方法可能非常有效,但只能提供有限的覆盖率。通常,延迟路径最多覆盖 500 条路径。在一个 1000 万门的器件中,这给跳变 ATPG 留下了大量待覆盖的故障。跳变 ATPG 本身是好的,但其故障检测引擎基于固定型(stuck-at)故障模型,使用最容易控制和观测故障的路径。此外,ATPG 工具(TetraMAX)在生成向量时没有任何可用的时序信息。因此,修复这个问题实际上是不可能的——因为延迟路径使用的是从 PrimeTime 生成的路径描述,而 TetraMAX 并没有使用任何门延迟的真实时序信息。这种方法意味着最长延迟可能永远不会被激励。直到去年 SDD ATPG 功能的发布,这一问题才得以解决。
新的延迟缺陷检测模型 [1][2][3][4][5] 使用时序信息来定位最长路径(即具有最小时序 slack 的路径),并尝试以有意义的方式对如何定位这些延迟故障做出明智的决策——这种方式更有可能反映实际的系统内运行情况。
本文将描述为正确设置延迟路径和 SDD 而生成时序信息的方法。此外,我们还将研究一种可能的 SDD 向量生成方式,以优化我们芯片的结果。
2. 面向全速 SDD 向量生成的静态时序分析
用于 ATPG 生成的设计时序约束与功能约束非常不同。主要问题在于:在 ATPG 期间,所有路径都是可见的,时钟 100% 开启,并且以某种彼此同步的模式运行(在移位期间锁定步调,在捕获时大致在同一时刻触发)。而功能行为可能非常不同——时钟可以以不同的频率运行,彼此之间具有完全随机的关系。
静态时序分析 STA 在对设计运行时将这一点纳入考量。时钟可以被给予充足的空间进行交叉通信,基于所支持的不同时钟频率清除多周期路径。所有这些都是用自定义时钟定义和时序例外命令来设置的——这些命令帮助 STA 工具解释设计的时序意图。这些命令被组织成综合设计约束(SDC)文件。
在全速 ATPG 中,这些假设不再成立。首先,芯片的功能模式可能在单个时钟上包含许多时序频率。然而,在 ATPG 期间,你希望选择最差的那个频率。一个典型的例子是 10/100 以太网 MAC。该模块被设计为在 10MHz 和 100MHz 频率下运行。对于 ATPG 的目的,我们希望选择 100MHz,因为它对模块具有更强的时序约束。
毫不奇怪,最紧的时序约束模式正是用于约束模块或芯片布局的模式。这些约束是对芯片在最高时序性能水平下运行进行条件化的超集。这些正是我们将用来生成 ATPG 报告文件以描述门延迟信息的约束。
2.1 布局 SDC 文件
布局 SDC 文件非常适合从门中挤出时序性能。直到最近,还没有办法利用 SDC 约束的完整描述来生成 ATPG STA 约束。换句话说,ATPG STA 约束必须独立于设计周期中的任何其他环节来生成。
Synopsys 在 2007.12 版本工具中添加的一项新功能允许 TetraMAX 读取一组有限的 SDC,这些 SDC 可以传递时钟定义和时序例外路径。该集合包括以下命令:
- set_disable_timing
- set_case_analysis
- create_clock
- set_multi_cycle_path
- set_false_path
- set_clock_groups
从这些命令中可以清楚地看出,这必须是从 PrimeTime 生成的集合,而非手工编码的 SDC 集合。此外,该集合与 Astro-Rail 或 IC Compiler 用来约束设计的内容密切匹配。
2.2 模块级 SDC 流程
为了测试该流程,我们从一个单层级模块开始。我们使用从 PrimeTime 生成的以收敛时序的布局 SDC,并预期它们是完全时序干净的。图 1 展示了 SDC 合并到 TetraMAX 的流程。
第一步:确认布局中使用的 SDC 确实没有任何时序违例。我们通过将网表和 SPEF 寄生数据加载到 PrimeTime 中来完成此操作。然后,我们将 SDC 应用到此数据库。一旦我们确认没有违例,我们就进入下一步。
第二步:生成反映模块全速 ATPG 捕获时序的 SDC。这是使用 TetraMAX 中的 tmax2pt.tcl 工具来写出跳变向量运行的 SDC。我们需要从这些 SDC 中获取的主要信息是时钟时序信息,以及如何将设计约束为处于扫描模式。
第三步:将两个 SDC 合并为一个。我们希望时钟定义在布局 SDC 和 TetraMAX 生成的 SDC 之间匹配。但我们发现它们并不相同。因此,我们必须使用布局 SDC,并将其约束为在扫描捕获模式下运行。我们使用 set_case_analysis 将 scan_mode 和配置位作为硬约束添加到布局 SDC 中。这在模块级是可行的,因为此层级的设计只有主时钟引脚进入,没有生成时钟。
第四步:为设计写出小延迟缺陷(SDD)slack 时序报告。这一步允许我们创建通过所有门的时序弧,为设计建立时序描述。
在 TetraMAX 中,我们在脚本中添加以下内容:
# 读取 SDC
read_sdc at-speed_constraints.tcl
加载用于 slack 数据生成的工具脚本
source $env(SYNOPSYS)/auxx/syn/tmax/pt2tmax.tcl
写出 TetraMAX SDD 用的 slack 数据
write_timing_slacks slack_data.dat
图 2 展示了一段延迟数据样本。在每个引脚上,它表示 slow_to_rise 和 slow_to_fall 延迟值:
ENET_INTF_SClk_cntrl/MBIST_CTL_COMP/U483/Y 3.323492 3.195507
ENET_INTF_SClk_cntrl/MBIST_CTL_COMP/U415/A0 4.051372 3.540822
ENET_INTF_SClk_cntrl/MBIST_CTL_COMP/U415/A1 3.323938 3.157312
ENET_INTF_SClk_cntrl/MBIST_CTL_COMP/U415/B0 5.113350 4.622848
第五步:将设计、SDC 和 slack 数据报告读入 TetraMAX。这为 TetraMAX 提供了设计的完整时序视图——从每个门的时序延迟数据,到时序约束和配置设置。我们期望这为 TetraMAX 建立一个有效的时序约束设置。
第六步:生成 SDD ATPG 向量。下一节描述了 SDD ATPG 向量生成的过程和考量。
3. 模块级全速 SDD ATPG 向量生成
如前所述,一旦 TetraMAX 拥有芯片的完整时序视图,我们就可以开始为其生成向量。以下分析是在单个模块上运行的。该模块具有以下特征:
| 参数 | 值 |
| 时钟数量 | 2 个:270MHz 和 10MHz |
| 触发器数量 | 15,197(99% 由 270MHz 时钟驱动) |
| 固定型故障测试覆盖率 | 99.56% |
| 压缩模式下的 ATPG 向量数 | 1,616 |
| 向量生成运行时间 | 118 秒 |
当运行 SDD ATPG 时,两个重要的主要变量是 TMGN(Timing Margin,时序余量) 和 Delta。
TMGN 用于创建一个截止值,以决定一条路径何时被纳入考虑。该截止值等同于任何路径对于 SDD ATPG 目标可能具有的最小 slack [6]。
图 3 说明了一个节点如何被选择为延迟故障目标。路径 A 和 B 是慢速路径,具有非常小的 slack 余量,因此最有可能容易受到小延迟缺陷的影响。该工具允许我们对整个路径应用一个截止值,并针对包含在这些目标余量中的那些缺陷。
在图 4 中,变量 max_tmgn 被设置为尝试寻找具有接近完整时钟周期的 slack 余量或具有非常小的时序 slack 余量的故障。
图 5 展示了该模块上 slack 的直方图分布。该分布是通过 TetraMAX 的 report_delay -slack tmgn 100 命令从 SDD ATPG 生成的,slack 余量 max_tmgn 设置为 1.5ns。从图中可以看出,存在一个表征路径的悬崖特征,恰好峰值位于最低 slack 余量处(约 0.4ns),随后在较大的 slack 余量下逐渐减少。这意味着该设计有大量关键路径恰好处于周期边界。
TetraMAX 还会遍历并尝试确定哪些路径可以通过 ATPG 向量检测到。这些故障被标记为 TDET(Timing slack for detection path,检测路径的时序 slack),并以直方图形式给出它们所包含的 slack 余量。图 6 说明了 TDET 在 slack 余量上的分布。
另一个用于描述时序关注区域的变量称为 Delta。此变量表示一条路径允许偏离目标 slack 的总 slack 差值。以前面的例子为例,Delta 的增加可能允许额外的路径被纳入 SDD ATPG 的考量。图 7 说明了路径中额外的 Delta 如何允许替代路径被添加到 SDD 关注路径列表中。
将 Delta 添加到模块的 SDD ATPG 运行中,我们得到了完全相同的 TMGN 故障列表。然而,令人惊讶的是,TDET 列表是不同的。图 8 展示了 slack 余量的图表,其中变量 Delta 设置为 0.5ns。该图还显示了当 Delta 设置为 0 时该模块的 TDET(即图 6 中完全相同的数据)。
当变量 Delta 被设置为一个值时,它允许工具在选择路径时放松余量的紧度。因此,它确实具有较不紧的时序余量。似乎 Delta 余量的使用越少,获得紧时序余量的效果就越好。
下表总结了多次运行以及我们在 DS 和 TDET 故障方面能够获得的结果:
| TMGN | Delta | 运行时间(s) | 向量数 | DS 故障 | TDET 故障 |
| 0.25ns | 0.0ns | 11,640.72 | 11,682 | 17 | 7,963 |
| 0.50ns | 0.0ns | 16,355.92 | 14,762 | 577 | 93,911 |
| 1.00ns | 0.0ns | 21,167.54 | 19,322 | 9,497 | 289,080 |
| 1.50ns | 0.0ns | 22,995.98 | 20,662 | 26,275 | 391,036 |
| 0.25ns | 0.25ns* | 11,115.49 | 11,153 | 45,187 | 676 |
| 0.50ns | 0.5ns | 11,750.98 | 12,164 | 176,112 | 176,112 |
| 1.00ns | 0.5ns | 13,704.80 | 13,807 | 289,569 | 244,414 |
| 1.50ns | 0.5ns | 13,759.17 | 14,003 | 338,253 | 375,179 |
| 默认 | 默认** | 24,863.10 | 22,227 | 73,445 | 481,877 |
> \* delta 不能小于 tmgn > \** tmgn=infinity / delta=0
表 1:SDD ATPG 结果对比(不同 TMGN/Delta 组合)
表 1 显示,随着 TMGN 和 Delta 的增加放宽 SDD ATPG 的约束,DS 故障数量急剧增加。然而,向量的质量如何?从图 8 来看,具有最小 slack(我们最感兴趣的那些故障)的路径上的 tdets 数量在 Delta=0.5 的曲线中已不再被检测到。事实上,整条曲线向右移动了大约 delta 的值,这可能导致测试向量质量的显著下降。
这里发生的情况是:故障模拟器在一条向量满足 tmgn/delta 约束后立即将故障从活跃故障列表中移除,将其标记为仿真检测(DS)。一旦从活跃故障列表中移除,该故障就不再被仿真——尽管可能存在获得更好向量的概率。
我们需要通过减少检测故障的 slack 来提高向量质量。在后 ATPG 故障列表中,TetraMAX 包含 tmgn 和 delta 的值。对于每个检测到的故障,检测路径上的总 slack 可以通过将 tmgn 和 delta 相加来推导——这两个值是故障列表中的最后两列,示例如下:
stf DS cpu_core/U11125/Y 0.09 0.23
该故障的 tmgn 为 0.09,delta 为 0.23,故障被检测到的检测路径 tdet 为 0.32。
有了这一理解,我们可以写出故障列表,剔除不感兴趣的故障,并对故障列表进行排序以获得最小的时序余量或 slack 数值。因此,我们决定剔除所有检测路径小于 0.80ns 的故障,同时去除 DI 故障和任何具有无限时序余量的故障。最后,按 tmgn 对剩余列表排序:
awk '$4+$5<=0.80' DT.fl | grep -v Inf | grep -v " DI " | sort -k 4n,4 > DT.tdet.fl
表 2 是排序后故障列表的一个片段,我们进行了前后对比,以查看故障的处理方式。这些故障与图 8 中使用的故障相同。
很明显,在 Delta=0 的情况下,故障是沿着最长的检测路径(tmgn+delta)以最小的 slack 被检测到的。表 2 的结果证实了我们在图 8 中看到的向右移动。此外,TetraMAX 并没有以相同的方式处理相同的故障。在 Delta=0.5 的情况下,故障被标记为 DS(Detected by Simulation,仿真检测),而在 Delta=0 的情况下,它们被标记为 TP(Transition Partially detected,跳变部分检测)。TP 分类使故障保留在活跃故障列表中,从而可能找到更好的向量。
我们还执行了另一个运行:完整的 SDD ATPG,tmgn=infinity / delta=0。表 3 比较了 TMGN=1.5 与 TMGN=Infinity 的结果。再次我们看到,由于我们没有将 SDD ATPG 的目标故障限制在 1.5ns 以内,tmgn=infinity 找到了具有更紧 slack 的向量。
3.1 向量数减少
表 1 中另一个突出的观察结果是,SDD 向量数超过标准固定型故障运行向量数的 10 倍以上。这对测试机来说是很大的负担。因此,使用 TetraMAX 开关 -basic_min_detect 可以显著减少向量数。
在 tmgn=infinity / Delta=0 的情况下,我们实现了从 22,227 个向量减少到 8,168 个向量。图 9 展示了使用 TMGM=infinity / Delta=0 / -basic_min_pattern 后的 TMGM 分布。图 10 展示了相同条件下的 TDET 分布。
我们还探索了一种替代的向量数减少方法。这种替代方法可以帮助没有扫描压缩的设计,将最小故障的检测压缩到更小的向量集中。该方法在附录 A 中介绍。
3.2 模块周围的故障分布
图 11 展示了使用 Highlight_faults_physical.tcl 检测到的故障分布。虽然图片不能提供可量化的指标,但它有助于可视化故障在模块周围的分布。均匀分布更加鲁棒,更有可能捕捉到时序缺陷。
在模块上精细调整了方法之后,是时候将所有学到的经验应用到顶层了。
4. 全芯片 STA
如第 2 节所述,模块级的 STA 相对直接。接下来,我们尝试在全芯片级执行 STA 分析。最初的方法是使用布局 SDC 文件,并在其中包含 scan_mode 约束以反映全速扫描捕获 SDC。我们采用了与模块级相同的方法。但这样做给我们带来了几个挑战。
4.1 功能时钟源不容易映射到扫描时钟
首先,在功能模式下,时钟源不再是简单的引脚,而是由主时钟引脚(这些引脚恰好也是慢速的)驱动的复杂多路选择器和 PLL。要将模块切换到 scan_mode 并解开时钟以引用扫描时钟(本设计未使用片上时钟),结果是一场噩梦。我们的设计中有近 35 个生成时钟域,将它们重新映射到主输入引脚并重新定义它们的时钟周期被证明是一项极其困难的任务。
4.2 模块级 SDC 文件与顶层 SDC 文件相互矛盾
使事情更加复杂的是,结果发现顶层 SDC 约束设计的方式与模块级 SDC 约束设计的方式不一致。在某些情况下,scan_mode 在模块级被用于收敛时序,然后相同的模块在顶层被配置为功能模式。结果,SDC 相互矛盾,无法合并为一个完整的顶层 SDC 文件。不一致的时钟模式使我们无法对这些 SDC 文件进行层次化合并。
4.3 使用 TetraMAX SDC 文件
因此,我们放弃了原来的方案,选择了一种蛮力方法:使用 TetraMAX 生成的 SDC 文件。
我们从 TetraMAX 生成的约束文件开始,将它们应用到 STA 会话中的芯片上。我们还知道 RAM 的直通路径必须被约束为多周期路径。在这些设置下,STA 结果显示了几个属于功能设计一部分的多周期路径违例。然后,我们遍历所有这些违例,在目标 FF 处将它们关闭为不关心路径(false_paths)——证明这些多周期路径实际上是测试路径。
另一个问题是,TetraMAX 使用两个时钟脉冲来描述"捕获时发射"全速时序波形中的捕获时钟双脉冲。TetraMAX SDC 没有做的是在第二个脉冲(作为发射)到第一个脉冲(作为捕获)之间创建一条 false path。这导致了一些非常粗略的时序违例(在后续版本的 TetraMAX 中已修复)。
此外,约束没有考虑到时钟内不确定性(intra-clock uncertainty)不同于时钟间域不确定性(inter-clock domain uncertainty)。这是 SDC 文件中生成的代码的一个简单取消注释。
完成以上工作后,我们在扫描模式下获得了一个没有任何时序违例的干净 STA 运行。这被用于写出 TetraMAX 使用的 SDD slack 时序文件。
5. 全芯片 SDD ATPG 生成
对于运行顶层 ATPG 生成,我们基于模块级实验的分析,选择执行两种运行:
1. TMGN=1.5ns / Delta=0
2. TMGN=infinity / Delta=0,开启 -basic_min_pattern 开关
这些向量为我们带来了表 4 中的结果。
6. 结果讨论
SDD ATPG 向量生成比传统的跳变 ATPG 向量生成更加复杂。它确实需要调整和假设分析,这可能会基于设计产生不同的结果。在我们的案例中,我们的设计确实将技术推到了极限——我们路径的相当一部分中只存在非常小的 slack 时间。这要求尽可能推动工具以提取最激进的时序余量。
在此过程中,我们确实遇到了一些流程和工具方面的问题:
1. STA 流程可以利用 TetraMAX 的读取功能 SDC 文件的能力。 2. 将 Delta 设置在 0.0ns 以上可能导致 SDD 路径具有比预期更大的 slack。
此外,鉴于我们当前可用的工具集,在研究不同的方法时,我们对自己的 SDD ATPG 向量生成方法充满信心——能够实现最小的 slack 覆盖和最小的向量数。
7. 致谢
- Manabu Kubo(Sony AC Japan)——在检测向量存储方面的工作。 - Nikolaus Mittermaier(German AC)——在 highlight_faults_physical.tcl 方面的工作。 - David Chagnon——在收集这些数据和帮助展示方面孜孜不倦的努力。
8. 参考文献
1. E. S. Park, M. R. Mercer, T. W. Williams, "Statistical Delay Fault Coverage and Defect Level for Delay Faults," ITC, pp. 492-499, September 1988. 2. E. S. Park, B. Underwood, T. W. Williams, M. R. Mercer, "Delay Testing Quality in Timing-Optimized Designs," ITC, pp. 897-905, October 1991. 3. T. W. Williams, B. Underwood, M. R. Mercer, "The Interdependence Between Delay-Optimization of Synthesized Networks and Testing," DAC, pp. 87-92, June 1991. 4. E. S. Park, M. R. Mercer, T. W. Williams, "The Total Delay Fault Model and Statistical Delay Fault Coverage," IEEE Trans. Comput., vol 41, no. 6, pp. 688-698, June 1992. 5. E. S. Park, M. R. Mercer, T. W. Williams, "A Statistical Model for Delay-Fault Testing," IEEE Design & Test of Comp., pp.45-55, February 1989. 6. R. Mattiuzzo, S. Graniello, S. Talluto, A. Conte, A. Cron, "Small Delay Defect Testing," SNUG San Jose 2008.
9. 附录 A:替代的向量数减少方法
我们还探索了一种替代的向量数减少方法。这种替代方法可以帮助没有扫描压缩的设计,将最小故障的检测压缩到更小的向量集中。本文介绍了这种改善 SDD 测试集质量的方法,并给出了结果。
我们决定运行全 SDD ATPG,以利用故障模拟器在拥有整个故障列表视图时所提供的优势——故障不会被从故障列表中移除,除非它沿着最长路径被检测到。幸运的是,这是 SDD 的默认行为,不需要设置特殊开关。一旦选择了故障模型(transition)并读入了故障列表(PrimeTime slack 报告),工具就自动处于 SDD ATPG 模式。
# 将 scan_enable 约束为在捕获期间为"关闭"
add_pi_constraint 0 scan_enable
为 SDD ATPG 使用跳变故障模型
set_faults -model transition
使用 TetraMAX 协议文件定义的时钟和捕获波形,
并读入在 slack 数据提取期间从 PrimeTime 写出的 SDC
set_sdc -env tmax_drc
read_sdc ./m4k_top_DSP_small_delay.sdc
执行测试设计规则检查
run_drc ./compression.spf
读入 Primetime 生成的 slack 数据
read_timing small_delay_slack.report
运行 SDD ATPG
run_atpg -auto
从 TetraMax 写出检测到的故障和向量
write_faults DT.fl -class DT -replace -collapsed
write_patterns full_sdd.pats -replace -internal -format binary
在 unix/linux 下剔除并排序故障列表。
以下命令移除不满足 0.8ns 检测路径要求的所有故障。
awk '$4+$5<=0.80' DT.fl | grep -v Inf | grep -v " DI " | sort -k 4n,4 > DT.tdet.1.fl
一旦故障列表被剔除,就使用刚写出的向量对剔除后的故障列表进行新故障列表的模拟。run_fault_sim 的 -detected_pattern_storage 选项只存储模拟期间检测到故障的向量。故障模拟后,故障列表会附加上检测到该故障的向量编号。向量编号通过向量 ID 提取,用于创建由单个向量组成的测试集。
# 移除当前故障列表并添加剔除后的故障列表
remove_faults -all
read_faults DT.tdet.fl
读入已保存的向量并进行故障模拟
set_patterns -external full_sdd.pats
run_fault_sim -detected_patterns_storage
写出故障列表用于后处理以获取向量 ID 号
report_fault -class DS -collapsed > DS.full.rpt
在 unix/linux 下提取检测到的向量 ID 号
awk '{print $4}' DS.full.rpt |sort|uniq > DS_pattern_ID.rpt
用 tcl 程序提取单个检测到的向量
set report_file [open DS-pattern_ID.rpt r]
while {[gets $report_file line] >= 0} {
set num $line
write_pattern patterns/DS_$num.pat -first $num -last $num -nooverlap_load -replace
}
删除旧的向量集并用程序创建新集
set_pat -del
set report_file [open DS-pattern_ID.rpt r]
while {[gets $report_file line] >= 0} {
set_pattern -external ./patterns/DS_$line.pat -append
}
写出检测到的向量的新合并向量集
write_patterns full_sdd.detected.pats -replace -internal -format binary
最后一步是使用检测到的向量 ID 号写出向量。首先,向量从原始合并的向量集中提取,并逐一写出为独立向量。最后,检测到的向量被写出为一个新合并的向量集。
所有标准 TetraMAX 报告都可用于衡量结果质量。实现的向量减少取决于从全 SDD ATPG 运行中剔除的故障数量。表 4 展示了检测路径 slack(tdet)小于 0.80ns 和 0.40ns 的两个数据点。
故障摘要、slack 直方图和故障列表提供了大量数据,使人对延迟覆盖率的质量有一个感觉,但无法量化这些故障在电路中的分布情况。
一位 Synopsys AC 开发的 TCL 程序(参见致谢)提供了在 ICC 布局上点亮检测到的故障的能力。Highlight_faults_physical.tcl(附录)在从 TetraMAX 加载后,读取故障列表并写出一个 TCL 脚本,该脚本在 ICC 中加载后可以点亮检测到的故障位置。
核心概念
| 概念 | 说明 |
| ATPG 自动测试向量生成 | 自动生成芯片测试向量的过程,本文聚焦 SDD ATPG |
| 静态时序分析 STA | 分析数字电路时序路径延迟的方法,PrimeTime 是核心引擎 |
| 小延迟缺陷 SDD | 先进工艺下微小制造缺陷导致的延迟偏差 |
| SDC 时序约束 | Synopsys Design Constraints,描述设计时序意图的标准格式 |
| 时序余量 Slack | 信号到达时间与要求时间之差,SDD ATPG 的核心质量指标 |
| At-Speed测试 | 以芯片正常工作频率运行的测试,Launch-on-Capture 是关键实现方式 |
EDA 工具
| 工具 | 角色 |
| PrimeTime | 静态时序分析,生成 SDC 和 slack report |
| TetraMAX | ATPG 引擎,SDD 模式支持 TMGN/Delta 调优 |
| IC Compiler | 物理实现和故障可视化 |
相关链接
- 静态时序分析 STA · ATPG 自动测试向量生成 · 小延迟缺陷 SDD - PrimeTime · TetraMAX · IC Compiler - TranSwitch · Synopsys