
从微处理器到 FPGA,现代电子产品的可靠性取决于一个关键挑战:我们如何测试包含数十亿晶体管的电路?尝试所有可能的状态在计算上是不可行的,这在数字系统的复杂性与我们验证其正确性的能力之间造成了巨大的鸿沟。本文通过探索测试模式生成器(TPG)的世界来解决这个问题,TPG 是为高效、有效的电路测试而设计的智能引擎。在接下来的章节中,我们将首先剖析“原理与机制”,将暴力方法与线性反馈移位寄存器(LFSR)优雅的伪随机性及其背后的数学原理进行对比。随后,“应用与跨学科联系”一章将展示这些原理如何应用于内建自测试(BIST)、扫描链设计乃至低功耗测试等真实场景中,揭示 TPG 在工程和科学领域的深远影响。
想象一下,你刚刚拿到了一台有史以来最复杂机器的钥匙——一个拥有数百万个发光拨动开关的巨大控制室。你的任务很简单:确保机器的每个部分都完美运行。你会怎么做?最直接的方法,或许是尝试所有可能的开关组合。拨动第一个,检查。拨动第二个,检查。同时拨动前两个,检查。你马上就能发现问题所在。如果你只有 64 个开关,其组合数量就比全世界海滩上的沙粒总数还要多。要全部尝试一遍,花费的时间将比宇宙的年龄还长。简而言之,这就是测试现代数字电路所面临的巨大挑战,这些电路是封装在单一芯片中的晶体管微观城市。我们需要一种更聪明的方式来‘拨动开关’——即测试模式生成器(TPG)。
最直接的自动化‘按钮操作员’就是一个简单的二进制计数器。它从全零(00...0)开始,在每个时钟周期递增 1(00...1、00...10,以此类推),直到覆盖所有组合,直至全一(11...1)。这被称为穷举测试。它看似万无一失,毕竟它不放过任何一个角落。但它却一头撞上了我们刚才讨论的组合学壁垒。对于一个仅有 24 个输入的电路(按今天的标准来看相当小),穷举测试需要 个模式。即便使用高达 250 MHz 的时钟,这个测试也要花费相当长的时间。对于一个 64 位处理器,测试时间将是天文数字。因此,暴力方法在实际应用中是不可行的。有人可能会尝试更具选择性的方法,预先计算一小组‘黄金’测试模式并将其存储在只读存储器(ROM)中,在测试期间回放。这算是一种进步,但它假设我们确切知道哪些模式是关键的,而这本身就是一个巨大的挑战。
那么,如果我们不能尝试所有模式,那尝试大量精心挑选的模式又如何呢?这时,一种极其优雅的数学机器便派上了用场:线性反馈移位寄存器,即 LFSR。LFSR 是一位伪装大师。它生成的数字序列看起来完全随机,但实际上是完全确定且可重复的。把它想象成一副神奇的扑克牌。你可以用一种非常特定、复杂的方式洗牌,发牌时,牌的顺序看似随机。但如果你把牌收起来,用完全相同的方式再洗一次,你会得到完全相同的‘随机’序列。这种看似随机但可重复的特性被称为伪随机性,它是有效测试的秘诀。
这台神奇的机器是如何工作的?其核心出人意料地简单。它由一串构成移位寄存器的存储单元(触发器)组成。在每个时钟周期,寄存器中的比特位向后移动一个位置。‘魔力’发生在反馈回路中。被送入链首的比特位不是一个新的随机位,而是通过从寄存器中提取几个特定的比特位,并用一个极其简单的操作——异或(XOR)门——将它们组合计算出来的。例如,在一个 4 位 LFSR 中,进入寄存器的下一个比特位可能是通过将第一和第二个单元的比特位进行异或运算得出的。让我们看看它的实际运作。如果我们的寄存器状态为 1001,规则是新比特位为 (最右边第二位和第一位的异或),那么下一个状态将是 1100,然后是 0110,接着是 1011,依此类推。一个简单的局部规则,生成了一个复杂的、全局变化的序列!
当然,并非任何反馈规则都有效。一个糟糕的规则可能导致序列在几个模式后就开始重复,这对测试来说没什么用。我们的目标是让序列在重复前尽可能长。对于一个有 位的 LFSR,它能生成的最长序列包含除一个状态外的所有 位组合:全零状态。(为什么不包括全零?因为如果寄存器中所有位都是零,XOR 反馈将永远产生零,LFSR 就会陷入一种永久的‘无聊’状态,永远输出 00...0。)这个长度为 的最长可能序列,被称为最大长度序列。
我们如何找到保证最大长度序列的反馈‘秘方’呢?这正是抽象数学之美与工程学相遇的地方。这些规则由一种特殊的数学对象——在二元有限域 上的本原多项式所决定。我们无需在此深入探究抽象代数的深奥理论。可以这样想:数学家们已经绘制了海图,并给了我们藏宝图。对于给定位数 ,他们可以提供一份这些‘本原’秘方的列表,确切地告诉我们应该抽取哪些位来进行 XOR 反馈,以创建最大长度序列。通过简单地在硬件中实现这个秘方,我们就能构建一个完美的伪随机模式生成器。这是‘数学在自然科学中不可思议的有效性’的一个绝佳例子——或者,在这种情况下,是在工程学中。
此时,你可能会问一个非常合理的问题。一个 24 位计数器生成 个模式。一个 24 位最大长度 LFSR 生成 个模式。模式数量的差异只有一个!总测试时间几乎完全相同。那么,为什么要费这么多周折?为什么 LFSR 如此优越?
答案是现代测试中最重要的思想之一:最重要的不是模式的数量,而是它们的质量和结构。二进制计数器产生的是高度结构化、可预测的序列。最低有效位在每个时钟周期都会翻转。次低位每隔一个周期翻转一次。而最高有效位在整个测试的前半段只翻转一次!这就像通过非常非常缓慢地按压汽车的一个角来测试其悬挂系统。你可能会发现一个重大的断裂,但会错过所有只有在汽车被复杂地颠簸和摇晃时才会出现的细微问题。
LFSR 的伪随机序列就是那条颠簸、不可预测的道路。由于连续的模式在很大程度上是不相关的,电路输入端的比特位以一种更加多样化和看似混乱的方式翻转。这种剧烈的‘摇晃’在激活电路内部通路上远比计数器有效。它对于检测那些并非简单的‘固定型’故障(如导线固定为某个值)的细微缺陷尤其关键,例如延迟故障。当逻辑电路中的一条信号路径速度稍慢,导致芯片在全速运行时出错,就会发生延迟故障。检测此类故障需要在特定输入端产生信号跳变(从 0 到 1 或从 1 到 0),然后捕获其影响。LFSR 生成的丰富多样的跳变比来自计数器的缓慢、可预测的序列更有可能触发和暴露这些与时序相关的‘小恶魔’。
LFSR 是一个强大的工具,但并非万能。有时,我们需要更巧妙的方法。例如,某些类型的故障更容易被包含大量‘1’或大量‘0’的模式所激活。标准的 LFSR 生成的模式中,平均有一半的比特位是‘1’。为了解决这个问题,我们可以在 LFSR 的输出端添加一个简单的逻辑电路来为模式‘加权’。这种加权逻辑可以,例如,将任何具有大量‘1’的 LFSR 状态转换为全‘1’模式,从而增加使用此类模式进行测试的概率。这就像给骰子灌铅以偏向某些结果。
对于延迟故障的全速测试,需要一个更复杂的技巧。这里,我们需要在两个连续的时钟周期内施加一个非常特定的模式对:一个发射向量 用来启动信号跳变,以及一个捕获向量 用来检查跳变是否在规定时间内完成。我们的 TPG 如何生成这样协调的向量对呢?一种巧妙的方法是,利用 LFSR 的单个状态 来生成两个向量。例如,我们可以通过将状态 与其自身的一个旋转版本进行异或来定义 ,并通过将 与另一个不同方式旋转的版本进行异或来定义 。这使得一个简单、紧凑的 TPG 能够产生要求最严苛的测试所需的复杂、时间相关的序列。
最后,值得一提的是,LFSR 尽管光彩夺目,但并非工程师工具箱中唯一的模式生成机器。另一种方法是使用元胞自动机(CA),它由一排单元组成,每个单元根据其近邻的状态来更新自身状态。这些自动机可以生成不同系列的复杂模式,并且在某些情况下,根据芯片布局,其实现效率可能高于 LFSR。在 LFSR、CA 或其他类型的 TPG 之间做出选择,涉及硬件成本、测试时间和最终目标之间的经典工程权衡:以最高置信度确保我们负责的复杂机器每次都能完美运行。
既然我们已经掌握了内建自测试(BIST)的基本原理,让我们开启一段旅程,看看这些思想在何处生根发芽、开花结果。与任何深邃的科学概念一样,其真正的美并非体现在孤立状态,而在于其解决现实问题、连接看似无关的知识领域的力量。BIST 不仅仅是设计师手册中的一个巧妙技巧,它是一个关键的学科,支撑着整个数字世界的可靠性,从最简单的逻辑门到最复杂的超级计算机。
想象一下,一个现代微处理器,一座由数十亿晶体管构成的城市,充满了繁忙的活动。我们如何能确定每一条街道、每一栋建筑、每一个电灯开关都工作正常?我们无法派遣外部检查员去探测这数十亿个组件中的每一个。解决方案既优雅又强大:我们赋予这座城市自我检查的能力。这就是 BIST 的核心理念——在硅片内部嵌入微小的、自主的“测试机器人”,它们可以在指令下被激活,验证其局部区域的健康状况。整个过程由一个中央控制器来协调,就像一位指挥家,确保这首宏大的诊断交响曲完美和谐地演奏。
在最基本的层面上,数字电路由组合逻辑(如与门和译码器)和时序逻辑(如寄存器和触发器)构成。BIST 提供了一整套技术来测试它们。
对于像 4 位寄存器这样的简单存储元件,BIST 循环是一个教科书式的案例:一个测试模式生成器(TPG),通常是线性反馈移位寄存器(LFSR),将一系列模式输入到寄存器中。然后,寄存器的输出被一个输出响应分析器(ORA)(通常是多输入特征寄存器,MISR)捕获并“压缩”。经过多个周期后,这个 MISR 会得出一个最终的“特征”。如果该特征与从已知良好电路预先计算出的特征相匹配,则该寄存器通过测试。
但工程学的真正优雅之处往往在于找到更简单的方法。考虑测试一个 3-8 译码器,该电路的作用是对于任意 3 位输入,在其八个输出中精确地激活一个。暴力方法可能是将所有八个正确的 8 位输出模式存储在存储器中,然后逐一比较。但我们可以更聪明!我们知道,一个健康的译码器输出总是“独热(one-hot)”的——它总是包含奇数个‘1’(具体来说,是一个)。一个简单的 8 输入异或门可以用最少的硬件来检查这个属性。如果输出任何时候不是独热的(例如,全零或有两个 1),‘1’的数量就变成偶数,异或门会立即标记错误。这种对电路固有属性的巧妙利用是优秀 BIST 设计的标志。
测试组合逻辑是一回事,但带有内部状态和存储器的时序电路则要棘手得多。测试它们就像试图通过仅查看一个运行了一小时的计算机程序的最终输出来寻找其中的错误。你完全看不到中间发生了什么。
解决方案源于更广泛的可测试性设计(DFT)领域的一个深刻概念:扫描链。其思想是为电路添加一个特殊的“测试模式”。在这种模式下,所有的触发器——电路的存储元件——被重新连接,形成一条长链,就像串珠一样。这条链有一个单一输入(Scan_In)和一个单一输出(Scan_Out)。瞬间,这个不透明、复杂的时序电路就变成了一个简单的移位寄存器!
对此类电路的 BIST 测试遵循一个三步曲:
扫描链是一个巧妙的技巧。它将一个棘手的、随时间控制和观察内部状态的问题,转变为一个简单的、可管理的、移入移出数据的问题。它赋予了 BIST 硬件如同神一般的能力,可以将电路“传送”到任何所需的状态,并在一个时钟周期后读取其“思想”。
你可能想知道,TPG 的“伪随机”模式从何而来?我们又凭什么相信它们是有效的?答案不在五金店里,而在于优雅的抽象代数世界。
LFSR 根据一个特征多项式来生成其序列。这个多项式的选择至关重要。一个选择不当的多项式可能导致一个短的、重复的序列,从而漏掉许多故障。但一种特殊的多项式,即本原多项式,可以产生一个最大长度序列,在重复之前会遍历寄存器所有可能的非零状态(对于一个 位的 LFSR,有 个状态)。寻找这些多项式是研究伽罗瓦域(GF(2))理论的数学家的任务。这是纯粹数学为一个非常实际的工程问题提供完美工具的绝佳范例。
当然,天下没有免费的午餐。ORA 在将一长串输出比特流压缩成一个小的单一特征时,会丢失信息。它本质上是在创建一个哈希值或校验和。这就为一种称为混叠(aliasing)的现象打开了大门:当一个有故障的电路,纯粹由于运气不好,产生的输出序列最终形成的特征与无故障电路的特征相同,从而导致缺陷未被检测到。虽然通过使用精心设计的 MISR 可以使混叠的概率变得极小,但它的可能性提醒我们,BIST 是一场概率游戏——用一个微小、可控的风险,换取测试时间和成本的大幅节省。
BIST 的原则并非一成不变,它们在不断发展以应对新技术的挑战。
测试算术核心: 现代处理器的定义在于其执行算术运算的能力。BIST 很容易应用于这些核心单元。对于阵列乘法器或保留进位加法器,可以巧妙地划分 TPG 的状态以提供多个输入操作数,而多位结果则由一个宽的 MISR 高效压缩。这展示了 BIST 范式在处理芯片计算核心时的可扩展性和灵活性。
变色龙芯片 - 测试 FPGA: 现场可编程门阵列(FPGA)是芯片世界的变色龙;其内部逻辑可以动态重构。你如何测试一个没有固定功能的电路?你必须测试其底层结构本身。针对 FPGA 的 BIST 涉及测试其查找表(LUT)内的配置存储单元。这通过一个系统化的过程来完成,例如,先向 LUT 加载全零,然后是全一,接着执行“走步1(walking-1)”和“走步0(walking-0)”测试,以确保每个存储位都能被正确地设置为‘0’和‘1’。这不仅仅是测试一个电路,更是在测试创造电路的潜力本身。
绿色测试 - 低功耗 BIST: 测试的一个隐藏成本是功耗。施加随机模式可能导致大量晶体管同时开关,从而引发巨大的功率尖峰,这可能会损坏芯片或需要昂贵的测试设备。低功耗 BIST 领域通过设计能够最大限度减少这种开关活动的 TPG 来解决此问题。一个绝佳的例子是使用 Johnson 计数器来代替标准的 LFSR。Johnson 计数器每一步只改变其状态的一位,产生一个功耗低得多的“温和”测试序列。然后可以使用一个简单的扰码器来改善模式的特性,从而将 BIST 与功耗感知设计的关键领域联系起来。
从抽象数学到功耗的物理约束,从最简单的逻辑门到 FPGA 的可重构结构,内建自测试的应用既广泛又至关重要。它证明了科学与工程的统一,其中一套优雅的原则提供了无声、无形的质量保证,使我们的数字时代成为可能。