逻辑内置自测试(LBIST)允许硬件测试自己的操作。无需任何外部硬件或测试设备。 LBIST是符合安全标准的SoC的“必备”功能。但是在复杂的SoC中使用LBIST时必须小心。
整个SoC被划分为各种LBIST分区和LBIST控制器用于在每个分区上运行LBIST。有一个中央控制器控制所有这些LBIST控制器,以便可以从整个SoC的一个点控制LBIST(否则每个LBIST控制器需要单独编程)。上面提到的中央LBIST控制器具有针对LBIST可用的各种选项的位映射以及用于对LBIST进行排序的寄存器。
上图显示了SoC中分区的基本概念。物理分区和LBIST分区的数量/大小可能因SoC而异。此外,单个物理分区内可以存在多个LBIST分区。每个LBIST分区都有一个专用的LBIST控制器,它将被放置在物理分区内(但在LBIST分区之外)。中央控制器位于顶部分区。
验证LBIST的主要挑战是验证LBIST分区的不同排列和组合。假设一个SoC说“n”个LBIST分区,那么你可以在所有分区上并行运行LBIST,所有顺序运行,或者它们可以分组。例如,您可能希望并行运行前5个,然后依次运行下3个,依此类推。顺序运行所有LBIST将花费大量时间。另一方面,并行运行所有LBIST将导致SoC中的大量电流消耗。因此,要运行的理想序列是在优化电流消耗和最小化LBIST运行时之间的权衡。对于具有“n”个LBIST分区的SoC,将会有n! LBIST组合可能 - 在有限的时间范围内验证所有这些组合是不可能的。因此,我们根据SoC的经验和架构巧妙地选择一些选定的组合。
这会导致验证时遗漏一些问题。本文讨论了这些问题,它们在硅上的调试,以及我们如何在设计周期中避免它们。
在LBIST期间,LBIST下的分区的所有输出将随机切换,可能影响整个SoC功能的重要信号需要“安全声明”,这意味着它们需要在LBIST期间保持安全值这样逻辑的其余部分就不会受到它们的影响。例如,如果在LBIST执行期间(进入SoC的复位控制器)在LBIST分区中的复位输出上发生切换,则将导致整个逻辑的复位,这不是设计意图。因此,为了避免这种情况,需要在LBIST期间将此复位信号安全地设置为安全值。 (在这种情况下,它将是重置的非活动值)。
验证LBIST安全陈述的步骤
由于LBIST扫描链以网表级别插入,因此运行门级仿真以验证SoC中LBIST的正确功能。通过此报告的主要功能问题是缺少对不同LBIST分区的关键输出信号的“安全说明”。
由于在网表中引入了实际的LBIST逻辑,因此在RTL阶段不会发生输出信号的切换在LBIST执行期间。因此,为了模仿实际情况,我们在LBIST执行期间随机切换LBIST分区的输出,以便在RTL级别本身捕获丢失的安全说明问题。然而,实际切换仅在门级仿真中发生,但对于“n”个LBIST分区,不可能在门级仿真中运行每个组合(因为GLS运行时间很大)。大多数情况下,我们运行所选择的组合来解决前面提到的安全陈述问题。但是,由于在模拟中未尝试所有分区组合,因此仍可能存在一些可能影响SoC功能的看不见的安全说明问题。
缺少安全陈述的后硅调试策略 - 样本调试
我们将解释如何调试和根源导致LBIST安全陈述问题硅借助于一个例子:当LBIST在特定配置(序列)中运行时,它失败,状态寄存器中的PLL丢失锁定错误。
调试步骤
首先,我们尝试使用不同时钟源的相同配置。以下是调查结果:
内部RC振荡器时钟通过。
PLL锁定内部RC振荡器时钟 - 通过。
PLL锁定在外部振荡器上 - 出现了问题。
接下来,为了缩小调试范围,我们尝试了各种LBIST分区组合,以找出硅上的失败组合。结果发现,在20个LBIST分区中,当第14和第15个LBIST分区以顺序方式运行时,自检失败,状态寄存器中报告了PLL丢失锁定错误。
第14和第15个LBIST分区单独或并行运行,未发现故障。这给了我们一个强烈的迹象,表明在第14个分区LBIST中有一些切换正在影响第15个分区的LBIST执行。
下一步是找出看到失败的最小模式数。 (在LBIST中,我们对特定数据进行“移入”并期望一些已知的“移出”数据。一个这样的步骤被认为是一个“模式”并且将给我们一定的信号覆盖。对于完整的覆盖,我们运行多个这样的模式,总数被称为“模式计数”)。这很重要,这样我们就可以轻松地模拟验证环境中的故障。这是通过编程开始模式计数和结束模式计数以及应用二进制搜索来找出发现故障的最小模式计数窗口来完成的。
最后,在验证环境中模拟了这个最小的模式计数窗口(网表)。据观察,有些情况受到影响,导致振荡器在两者之间断电,导致PLL失锁,最终导致自检失败,PLL失锁失误。
失败的根本原因
外部振荡器数字控制逻辑本身是14 th LBIST分区的一部分(而振荡器的模拟模块在外面)这个LBIST分区)。据观察,由于从数字控制模块到模拟振荡器模块的断电信号没有安全说明,振荡器正在断电。然而,问题仍然存在,为什么只有在两个分区按顺序运行而不是单独或并行运行时才能看到这种切换。
为了追踪问题,振荡器功率播放逻辑是在设计中追踪。它看起来像这样:
Oscillator_pwrdn = A& B
其中A是14 th 分区的输出信号,B是15 th 分区的输出信号。默认情况下,A和B均为0。 “A”在第11个 th 分区的LBIST期间切换,最终稳定为1.然而,此时“B”保持为0。这解释了为什么两个分区都单独传递。当LBIST在15 th 分区上运行时,“B”切换,因此在顺序情况下,一旦“B”变为1,“Oscillator_pwrdn”信号变为“1”并且故障发生。而在并行的情况下,当“A”变为1时,“B”已经确定为0.由于这个原因,故障也从未在平行情况下看到过。
以下是用于解释行为的波形快照(Xosc_clock - 外部振荡器时钟; Xosc_pwrdn - 外部振荡器掉电信号):
波形在顺序LBIST案例(看到失败)
波形并行LBIST案例(未见失败)
完成设计修复
使用锁存器安全地声明“Oscillator_pwrdn”信号,以防止在LBIST执行期间切换,以解决此问题设计。
如何避免LBIST安全陈述问题
应注意以下几点以避免此类情况:
需要通过功率估算技术,LBIST运行时分析等来选择各种LBIST组合。在物理设计团队和DFT团队的反馈之后需要进行验证。要提供给客户的自测配置应在设计阶段基于上面的最终确定,以便使用最终配置运行所有门级仿真。这将使我们能够彻底验证客户使用的配置;否则,如前所述,在有限的时间范围内尝试模拟中的所有自测组合是不可能的。
全部0条评论
快来发表一下你的评论吧 !