
现代计算机芯片包含数十亿个晶体管,其深不可测的复杂性使得传统的外部测试缓慢、昂贵且不完整。这带来了一个重大挑战:我们如何确保这些错综复杂的数字城市的可靠性?革命性的答案在于内建自测试 (BIST),这是一种让芯片能够自我测试的设计理念。虽然存在多种BIST类型,但本文将专门聚焦于逻辑BIST (LBIST),它是验证芯片计算大脑的主力军。
本次探索将引导您进入精妙的 LBIST 世界。在“原理与机制”一章中,我们将剖析核心组件以及使芯片能够执行全面自我诊断的精密如钟表的过程。我们将揭示扫描链、伪随机码型生成器和特征寄存器背后的独创性,同时也会审视这项强大技术固有的局限性和挑战。随后,“应用与跨学科联系”一章将拓宽我们的视野,揭示 LBIST 如何应用于捕捉与速度相关的缺陷,以及它在风险极高的硬件安全领域中令人惊讶且至关重要的作用。
要领会逻辑内建自测试 (Logic Built-In Self-Test, LBIST) 的独创性,我们必须先问一个简单的问题:为什么判断一个计算机芯片是否正常工作如此困难?答案在于其深不可测的复杂性。现代芯片包含数十亿个晶体管,这是一个由逻辑门组成的互联城市,其数量堪比地球人口。通过从外部——使用称为自动测试设备 (ATE) 的外部设备——检查每一个“房子”来测试这个城市,就像试图仅从城市边界观察来诊断特大城市中的每一个人。这种方法缓慢、昂贵,而且你无法看到内部深处发生了什么。
BIST 理念提供了一个革命性的答案:如果这个城市可以自我测试呢?如果我们可以将诊断工具直接构建到硅片结构中,让芯片只需按下一个按钮就能执行全面的健康检查呢?这就是内建自测试的核心思想。虽然芯片的不同部分有不同的“专家”,比如用于庞大存储器阵列的存储器BIST和用于敏感真实世界接口的模拟BIST,我们此行的重点将是负责芯片计算大脑的主力军:逻辑BIST。
想象一下,试图通过在音乐厅外聆听来测试整个管弦乐队。你也许能听到宏大的声音,但无法判断后排的第二小提琴手是否拉错了音符。为了解决这个问题,你需要一种方法来隔离每个音乐家并单独听他们演奏。工程师们在面对芯片内数十亿个晶体管时也遇到了类似的问题。他们卓越的解决方案是扫描链。
扫描链是一种巧妙的技巧,它将芯片的内部存储元件——即保存计算状态的触发器——重构为一个巨大的串行移位寄存器。在“正常模式”下,这些触发器是独立的,按照逻辑的指令捕获数据。但在“测试模式”下,它们像串起来的珠子一样首尾相连。这将观察芯片内部状态这个极其复杂的三维问题,转化为一个简单的一维问题。我们现在可以将一串测试数据“移入”这个长链,让逻辑执行一个操作,然后将结果“移出”以观察发生了什么。我们获得了近乎完全的可控性和可观测性。
有了提供访问通道的扫描链,我们还需要测试的“乐谱”。这来自一个片上测试码型生成器 (TPG)。LBIST 并未存储数百万个预定的测试码型(这会占用巨大空间),而是使用了一种效率极高的设备,称为伪随机码型生成器 (PRPG),几乎总是通过线性反馈移位寄存器 (LFSR) 实现。LFSR 是一个简单的移位寄存器,带有一个反馈路径,该路径使用异或 (XOR) 门来计算下一个要移入的比特。这个反馈的“配方”由一个称为特征多项式的数学结构定义。有了正确的多项式,这个简单的电路就能生成一个极长的、确定性的比特序列,从统计学上看,这个序列几乎是完全随机的。这不是真正的随机性,但它“足够随机”,足以扰动电路绝大多数的节点,从而有望揭示任何潜藏的缺陷。
在逻辑处理完伪随机码型之后,我们得到一个结果——一个被捕获在我们扫描链中的新状态。为数百万个测试码型中的每一个都移出整个状态会产生堆积如山的数据,远超处理能力。我们需要压缩这些数据。这就是多输入特征寄存器 (MISR) 的工作。MISR 就像乐团的指挥,同时聆听所有输出并总结整场表演。从结构上看,它是另一个类似 LFSR 的设备,但它不是生成序列,而是接收来自扫描链的多个并行输出流,并在每个时钟周期将它们“混合”到其内部状态中。
在施加了数百万个测试码型之后,这个连续的混合过程产生一个单一的、固定宽度的二进制数——通常是32、48或64比特长——称为签名。
让我们观察这个乐团演奏一个音乐小节,即测试的一个周期。这个过程是一场精美同步的舞蹈:
移位 (Shift): 在等于最长扫描链长度的时钟周期数内,系统处于“测试模式”。LFSR 产生其伪随机比特,这些比特被移入扫描链,用测试码型填充它们。同时,前一个测试周期的结果被移出扫描链,进入等待中的 MISR,MISR 勤勉地更新其状态。
捕获 (Capture): 在短暂的一瞬间,scan_enable 信号被关闭。系统在一个时钟脉冲(有时是两个,用于时序测试)期间恢复到“正常模式”。在这个“捕获”脉冲期间,保存在扫描链触发器中的测试码型被释放到组合逻辑的海洋中。逻辑门完成它们的工作,结果在时钟周期结束时被同一个扫描触发器捕获。
重复 (Repeat): 系统立即返回“测试模式”,过程重复。新捕获的响应开始其移出扫描链并进入 MISR 的旅程,而下一个测试码型则开始其移入的旅程。
这种移位-捕获-移位的节奏持续数百万个周期。在最终结束时,我们在 MISR 中得到一个单一的签名。然后,将这个签名与一个“黄金签名”——一个通过在完美、无故障的设计模型上模拟完全相同的 BIST 过程而预先计算出的值——进行比较。如果签名匹配,芯片通过。如果它们哪怕只相差一个比特,芯片就未通过测试。
这个系统精妙、强大且效率惊人。但就像任何强大的工具一样,我们必须了解它的局限性。一个好奇的人可能会问:“如果一个有故障的电路,由于一次离奇的巧合,产生了与好电路完全相同的黄金签名怎么办?” 这不仅是可能的,它还有一个名字:混叠 (aliasing)。这相当于两个完全不同的文档具有相同的数字指纹或哈希值。
幸运的是,我们可以计算出这个概率。对于一个设计良好的 位 MISR,任何给定故障的混叠概率约为 。对于一个常见的32位 MISR,这大约是四十亿分之一。如果我们正在测试10,000个不同的可能故障,预计被混叠掩盖的故障数量是一个极小的分数,约为 。通过使用48位或64位的 MISR,我们可以使混叠的风险低到天文数字般的程度,使其发生的可能性低于测试期间宇宙射线击中芯片并导致瞬时错误的概率。
一个更实际的挑战是随机码型抗性故障的存在。LBIST 的最大优势——其对伪随机码型的依赖——同时也是一个弱点。有些故障就是很难通过随机方式找到。想象一下,试图为一个10输入与门的输出测试一个“固定为0”故障。要找到这个故障,你必须施加一个使其输出为1的码型,这意味着所有10个输入都必须为1。一个随机码型连续出现十个1的概率仅为 。如果这个门深埋在逻辑中,这个概率可能会变得微乎其微。这些顽固的故障是纯 LBIST 有时需要用其他技术来增强的原因之一。
然后是复杂的片上系统 (SoC) 的混乱现实。当扫描链从一个未初始化的存储器块,或从一个在测试期间没有数字意义的模拟电路的输出捕获到一个值时,会发生什么?它会捕获到一个未知值,或'X'值。因为 MISR 的操作是线性的,一个'X'值输入其中并不仅仅是损坏一个比特;它会“毒化”整个签名。最终的签名变成了这个未知值的函数,使其无法与黄金签名进行比较。测试因此失效。这在现实世界的设计中是一个关键问题,需要巧妙的解决方案,如X值屏蔽 (X-masking)——用特殊逻辑来阻断这些已知的'X'值来源,并向 MISR 提供一个恒定值。
也许 LBIST 最引人入胜且违反直觉的方面是,测试本身可能导致一个完全正常的芯片失效。在正常操作期间,芯片的活动在某种程度上是局部化和相关的;你通常不会看到芯片的每个部分同时翻转其状态。但 LBIST 的伪随机码型是残酷的。它们的翻转概率接近50%,这意味着在每个捕获时钟边沿,整个电路中大约一半的节点可能同时切换状态。
这种大规模、同步的开关活动会产生对电流的巨大瞬时需求。芯片的供电网络,就像一个城市的水系统,有有限的电阻和电感。对电流的突然需求会导致局部电压——即“水压”——瞬间下降。这被称为电源电压下降 (supply droop) 或 IR压降。
这里的关键在于:晶体管的速度直接依赖于其供电电压。电压越低,逻辑越慢。对于一个设计时只有皮秒余量的关键时序路径来说,这种由测试引起的突然电压下降可能会使其减速,刚好错过其时序窗口。捕获触发器锁存了错误的值,这个错误传播到 MISR,导致黄金签名不匹配。测试报告失败,但这是一个伪失效。该芯片在正常操作条件下功能完好;是这种非自然的压力测试导致了它的“损坏”。数字码型、功率物理学和模拟时序之间这种美妙的相互作用,是现代芯片设计挑战的一个缩影。工程师们也设计出了同样美妙的解决方案,例如使用“加权”随机码型来降低翻转率,或者错开芯片不同部分的时钟来分散电流需求。
因此,我们看到,设计一个 BIST 策略并非简单地插入一个 LFSR 和一个 MISR。这是一项深刻的工程挑战,是一门在相互竞争的约束之间进行精妙平衡的艺术。正如在现实世界规划中的复杂权衡所示,工程师必须兼顾:
这些因素中的每一个都朝着不同的方向拉扯。更长的测试提供更好的覆盖率,但会耗费时间和金钱。同时测试更多部分可以节省时间,但会带来巨大的供电挑战。逻辑BIST的原理和机制是人类智慧的证明,是构建在硅片上的一部精密运行的交响乐,以解决技术领域中最困难的问题之一:在一个不完美、极其复杂的世界中追求完美。
在理解了逻辑内建自测试 (LBIST) 的复杂机制之后,我们现在可以退后一步,欣赏其深远的影响。我们讨论的原理不仅仅是抽象的好奇心;它们是几乎所有现代电子产品可靠性的基石。但 LBIST 的故事远不止其作为缺陷侦探的主要角色。这是一段引人入胜的旅程,深入到工程权衡、高等数学,乃至硬件安全这个阴影世界的中心。
LBIST 最根本的应用当然是发现制造缺陷。但仅仅询问电路布线是否正确是不够的;我们必须问它是否布线正确并且能否以现代处理器要求的惊人速度运行。一个稍微过慢的信号路径——即“转换故障”——与一根断线一样致命。LBIST 正是通过“全速”运行测试,使用芯片自身的高频功能时钟,来捕捉这些与速度相关的缺陷。
如何在芯片内部创建必要的两步式全速测试?第一部分,“启动”,建立一个转换(从0到1,或从1到0);第二部分,“捕获”,检查该转换是否及时完成。工程师们设计了两种主要方法,每一种都体现了他们的独创性。“移位时启动 (Launch-on-Shift, LOS)”方法巧妙地利用慢速扫描时钟的最后一个节拍作为启动事件,然后用一个单一的全速脉冲来捕获结果。另一种方法,“捕获时启动 (Launch-on-Capture, LOC)”,也许更直观:加载测试码型后,芯片完全切换到功能模式,并从功能时钟发出两个快速脉冲——第一个用于启动,第二个用于捕获。
没有一种方法是万能的。选择涉及时间和控制的微妙舞蹈。例如,LOS方法给“扫描使能” () 信号带来了巨大的负担,该信号必须在整个芯片上以类似时钟的精度进行切换,以避免错误。LOC方法放宽了这一限制,但这样做,它测试的是一组略有不同的路径。这是一个经典的工程权衡,是在不同优缺点之间做出的选择,一切都是为了追求一个完美的芯片。
LBIST的核心是其伪随机码型生成器 (PRPG),它能产生数以百万计的测试码型。你可能会认为,只要有足够多的随机码型,最终所有可能的故障都会被发现。但在这里,我们遇到了复杂性的顽固本质。有些故障是“随机码型抗性的”;它们隐藏在逻辑的角落里,通过偶然的机会被激励到的可能性微乎其微。想象一下,试图通过随机旋转来打开一个有十二个拨盘的密码锁。恰好转到正确组合的几率是微小的。对于一个需要十几个特定内部信号处于特定状态才能被激活的故障来说,情况也是如此。
为了解决这个问题,工程师们有一套巧妙的解决方案。一个直接的方法是安装“测试点”。如果一个故障难以触发,可以添加一个“可控性点”——一种能将内部信号强制设置为所需值的杠杆。如果一个故障的影响深埋在逻辑内部,可以添加一个“可观测性点”——一个微小的“窗口”,将该信号直接传送到扫描链,使其可见。这些有针对性的修改可以将一个几乎无法测试的故障变成一个容易捕捉的故障 ([@problem-id:4295617])。
一个更优雅的解决方案是让我们的随机性变得更聪明。我们可以使用“加权”随机码型,而不是纯粹的随机码型。如果我们知道一个故障需要一组信号为逻辑'1',我们可以“操纵”PRPG的骰子,使其生成在那些位置有更高概率包含'1'的码型。这极大地增加了激活罕见逻辑条件的几率,而无需放弃随机方法的效率。
最终,最有效的策略通常是混合策略。LBIST会话运行设定的周期数,快速高效地找到绝大多数“随机友好”的故障。随着测试的进行,发现新故障的速率会下降——达到覆盖率饱和点。在这个收益递减的点上,仅仅运行更多的随机码型已不再高效。取而代之的是,系统会切换到少数几个预先计算好的、确定性的“补充”码型,这些码型由强大的外部自动测试码型生成 (ATPG) 工具生成。它们像外科手术式打击一样,精确地瞄准随机性遗漏的少数几个顽固故障。这种组合方法——LBIST的广泛扫描后跟ATPG的精确打击——是工程优化的一个绝佳例子,它在最短的时间内提供了最高质量的测试。
一个好的测试能发现真正的故障。一个卓越的测试在做到这一点的同时,还能确保不会错误地指控一个完全正常的芯片。这个问题源于电路的物理结构和其功能目的之间的差异。一个设计可能包含“伪路径”——物理上可能但由于逻辑约束在正常操作中永远不会被激活的信号路径。同样,“多周期路径”被特意设计为慢速路径,需要几个时钟周期来传播信号。
LBIST的盲目随机性在这里可能成为一个问题。它可能会生成一个激活伪路径的码型,或者可能会用一个单周期测试周期来测试一个三周期路径。在这两种情况下,测试都会失败,一个功能完好的芯片将被丢弃,这是一个代价高昂的错误,称为“良率损失”。为了防止这种情况,LBIST架构必须被赋予更多的智能。它们可以被编程为对已知的慢速路径应用特殊的多周期时钟,并“屏蔽”或忽略来自终止已知伪路径的扫描单元的结果。这确保了测试在需要的地方是严格的,但在应该的地方是宽容的,使LBIST成为一个有辨别力的法官,而不是一个盲目的刽子手。
也许LBIST最激动人心的应用出现在我们跨入其他学科,特别是硬件安全领域时。在这里,测试的工具可以成为在硅片上进行的无形战争中的武器。
当LBIST测试失败时,多输入特征寄存器 (MISR) 中的结果签名不仅仅是一个“失败”标志。它是一条线索。因为MISR是一个线性系统,故障签名与预期的“黄金”签名之间的差异——一个称为伴随式的值——在数学上与发生的错误相关。这种关系由有限域上优美的多项式代数所支配。错误流可以被看作一个“错误多项式”,而伴随式正是这个错误多项式除以MISR特征多项式后得到的余数。这使得工程师能够执行“基于伴随式的诊断”,利用最终的签名来推断故障的位置和性质,将一个简单的通过/失败结果转变为法医分析的起点。
为测试提供芯片内部窗口的相同基础设施,也可能被对手利用。通常可以通过JTAG等标准端口访问的扫描链和BIST控制器,构成了提取秘密的强大旁路信道。拥有物理访问权限的对手可以触发LBIST运行并观察结果签名。尽管签名是内部状态的压缩、加扰版本,但它仍然泄露了信息。信息论告诉我们,一个 -比特的签名每次运行最多能泄露关于一个秘密密钥的 比特信息。通过使用不同的随机种子多次运行测试,攻击者可以累积这些微小的信息泄露,最终重建整个密钥。如果电路的逻辑恰好是线性或仿射的,攻击的破坏性更大,因为每个签名都提供了一组可以求解以找到密钥的线性方程。
威胁甚至更深。测试行为本身会消耗功率。测试码型的开关活动可以通过电容耦合影响邻近的、静态的秘密密钥寄存器。这就产生了一个功耗旁路信道,芯片的瞬时功耗会微妙地依赖于秘密密钥比特的值。在BIST运行期间监控电源的攻击者可以破译密钥。在一个展现对称思维的绝佳例子中,一种对策包括添加一个由测试码型开关活动的反向版本驱动的“虚拟负载”电路。这确保了密钥附近的总开关活动是恒定的,从而有效地“洗白”了功耗特征,并将秘密隐藏在噪声中。
正如LBIST可以是一种威胁一样,它也可以是一个强大的防御者。硬件安全世界饱受“硬件木马”的威胁——这些是由对手插入设计中的微小恶意电路。这些木马被设计得非常隐蔽,只在非常具体和罕见的条件下触发。
一个标准的、无偏的LBIST不太可能偶然触发这样罕见的条件。但在这里,我们为寻找随机码型抗性故障而开发的技术找到了新的用途。通过使用加权随机码型,我们可以有意地偏置测试码型,以显著增加产生木马触发条件的概率。这使得LBIST能够主动搜寻这些隐藏的威胁,将其从一个简单的质量保证工具转变为一个为芯片完整性保驾护航的警惕安全卫士。
从其确保质量的核心使命,到其在硬件安全这场高风险博弈中的惊人角色,逻辑BIST是人类智慧的证明。在这个领域,抽象数学为数字取证提供了工具,功耗物理学成为战场,对制造完美的执着追求创造了一项具有惊人深度和多功能性的技术。它是驱动我们技术世界的伟大无形引擎之一。