所有现代SoC都使用扫描结构来检测设计中是否存在制造缺陷。扫描链的目的就是用于测试并按照串行顺序连接芯片的时序元件。然而,随着现代SOC几何尺寸不断缩小及复杂性不断增加,如今已能将数百万个晶体管集成到单一芯片之中。因此,时序元件总数与可用的扫描IO总数之比在不断增加。而测试仪的成本(测试仪使用时间)高昂,传统的扫描结构已不足以支持这些复杂的SoC。压缩逻辑被看作是针对上述问题的解决方案,但它在逻辑合成阶段却带来了扫描拼接方面的新挑战。我们将详细讨论这些挑战和针对这些扫描拼接问题的解决方案,但在此之前,我们先通过一个示例来了解对压缩逻辑的需求。
要讨论控制扫描结构的各种参数,需要考虑具有以下配置的设计:可用测试仪内存=每测试信道1M向量(测试仪提供的固定内存);可用扫描输入/输出端口=5+5;每个链的触发器数=200(总触发器=1000);完整测试设计所需模式数=2400。
因此,所需测试仪内存=200×2400≈每测试信道0.48M。
在上述情况中,所需的测试仪内存小于可用内存,因此,此设计可测试。但随着现代SOC尺寸的增加(即设计中时序元件数增加),现有的测试仪内存可能不足。应考虑另一种含20k个触发器且有更多扫描IO的设计:可用测试仪内存=每测试信道1M向量;可用扫描输入/输出端口=10+10(封装上的有限数量测试引脚);每个链的触发器数=2000(总触发器=20000);完整测试设计所需模式数=2400(这是最保守的数字,因为模式数会随着设计尺寸的增加而增加)。
因此,所需测试仪内存=2000×2400≈每测试信道4.8M。
在上例中,由于该模式不适合现有的测试仪内存,因而上述简单的扫描结构已不足以对设计进行完全测试。这个问题可以通过扫描压缩来解决。
压缩逻辑概念
压缩逻辑旨在解决与测试芯片制造缺陷有关的问题。在这种结构中,芯片级链被分为多个内部链,因此,通过压缩激励(扫描输入)和解压结果(扫描输出),在芯片级便能解决有多个扫描输入和输出端口的问题。此后,我们将把这种压缩和解压逻辑简称为CDL
压缩逻辑解决了较大测试仪内存的问题,如下所示(压缩因子=10):
可用测试仪内存=每测试信道1M向量(测试仪提供的固定内存);可用扫描输入端口=10(封装上的有限数量测试引脚);可用扫描输出端口=10(封装上的有限数量测试引脚);扫描链总数=100;每个链的触发器数=200(总触发器=20000);完整测试设计所需模式数=2400。因此,所需测试仪内存=200*2400≈每测试信道0.48M。
由于所需测试仪内存较小,因此设计现在可进行测试。
问题是什么?
扫描压缩逻辑是所有现代复杂SOC必须提供的功能。然而,引入这种扫描压缩逻辑也带来了逻辑合成阶段扫描拼接方面的新挑战。如图3所示,扫描链从CDL(扫描输入引脚)的输出拼接到CDL(扫描输出引脚)的输入。压缩逻辑的扫描输入引脚连接到触发器的扫描输入。
根据成功进行DFT检查的要求,每个窗口只应进行一次捕捉。违反此条件将导致测试覆盖率下降,因为所有触发器都不是独立可控的。对于本文涉及的所有讨论,我们已经考虑了图4所示的窗口。
拼接了扫描链后,由于CDL触发器和设计的其他部分可能由不同时钟域的时钟进行计时(因为设计中存在不同功能的时钟域),这些时钟可能包含不常见的宽时钟路径,因此可能会发生保持(HOLD)时间冲突。为考虑所有可能的冲突,图5列出了以下情况。
因此,发生以下两种情况时将产生冲突。
到达发起和捕捉触发器的时钟出现倾斜,在以下两种场景下,正边沿-正边沿和负边沿-负边沿触发器对将发生这种情况(图6中已展示):1.在一个扫描链中拼接的触发器由同一时钟记录时间。由于到达发起和捕捉触发器的时钟之间存在偏差,时钟到达捕捉触发器的时间可能远比到达发起触发器的时间晚;2.在一个扫描链中属于不同时钟域的两个触发器由不同时钟进行计时,由于OCV的存在,时钟之间的偏差可能足以使发起和捕捉操作在同一个窗口发生。当其中一个触发器在CDL内部而另一个触发器在其外部时,发生这种情况的几率最大。
发起和捕捉操作在一个窗口内执行。当发起触发器是正边沿触发器而捕捉触发器是负边沿触发器时,会发生这种情况。在这种情况下,即使时钟边沿之间不存在偏差,在一个时钟周期内也将发生两次捕捉(图6)。由于扫描拼接在逻辑合成后执行,因此,在进行CDL编码时,设计人员无须考虑扫描链中第一个或最后一个触发器(正或负边沿触发器)的特性。
目前有哪些技术可用?
设计人员可以采用各种不同技术来避免这一问题。下面介绍其中的一些技术。
定制的CDL:在这种方法中,扫描链与一个伪CDL拼接,根据扫描链的第一个触发器对CDL进行修改,以确保没有冲突。然后CDL单独进行合成,并与之前创建的网络表合并。
这种方法的优势在余不会在CDL边界增加锁定触发器,因为每次CDL都将根据扫描拼接进行配置。缺点是随着实施周期的进行,将添加新的触发器,且每次都需要对CDL进行修改。
反馈法:在这种方法中,先计算设计中正边沿和负边沿触发器的数量,然后根据扫描链的数量产生CDL。下面的示例说明了这种方法与自定义CDL方法的不同之处。假设一个设计中有4000个触发器,其中有3700个正边沿触发器和300个负边沿触发器。现在拼接扫描链(约100个触发器/链)并得到分布(如表1所示)。
现在将生成用于触发器合并的CDL,这样在CDL接口就不会存在正边沿-负边沿触发器对,同时将强制进行合成,以便根据RTL调整扫描链中的触发器。这可通过一些脚本来实现。
与自定义CDL方法相比,这种方法的优势在于整个合成在一次运行中完成。缺点是:在实施反馈法之后,CDL的RTL比较稳定,但是如果负边沿触发器的数量突然发生变化,则需要再次重复整个周期。
使用设计中现有的触发器:在这种方法中,CDL的RTL不会发生变化,且每次合成都通过同一个CDL完成。在扫描拼接后,扫描链将重新排序,以消除发生冲突的机会。
这种方法的优点是,即使新版本RTL的触发器数量突然发生变化,DFT团队也无须创建新的CDL,因为CDL代码是固定的。与自定义CDL和反馈法相比,这种方法效率更高,但是在对扫描链进行重新排序以消除冲突时,却可能发生覆盖丢失。“覆盖丢失”可通过下面的示例说明。
只要正边沿-负边沿触发器以这种顺序进行配对,便会发生发起和捕捉冲突,因为发起和捕捉将会在边沿2和边沿3发生,如图7所示。为了消除这种冲突,我们可以重新进行排序,或者在这两个触发器之间添加一个触发器。尽管这样能够消除早期冲突,但是我们将无法检查在插入的触发器上收到的数据,这将导致覆盖丢失。
添加伪触发器:这种方法克服了上述各种方法的所有缺点。该方法中,在预计发生冲突的所有地方都添加了一个伪锁定触发器。在这种情况下,不会存在增加覆盖丢失的影响,也没有移动设计触发器方法中讨论的问题。
这种方法非常高效,因为不需要增加DFT和合成团队的工作。此外,它还解决了覆盖丢失的问题。但此方法的缺点是添加了额外的单元。在对电力极其敏感而电力又十分关键的情况下,这会形成一种阻碍。这些少数单元的漏电量会显著增加设计的总漏电量。
本文小结
表2汇总了本文所讨论的各种技术。扫描压缩逻辑是复杂SOC必须提供的功能,而添加压缩逻辑却增加了合成过程中扫描拼接方面的挑战。有许多方法可应对这些挑战,然而,添加伪触发器方法具有其他方法无法比拟的优势。虽然因为添加了锁定触发器而需要进行一些权衡,但是,我们已经看到额外锁定触发器的数量非常有限(远小于总时序元件的0.1%),因为只会在预计发生捕捉冲突的那些链中添加锁定触发器。上述方法将有助于最大程度减少DFT和合成设计团队之间的重复工作,从而加快设计完成速度。