制造过程中会引入错误。
制造测试用于验证芯片是否与设计相一致。
测试的类型包括:
功能测试;
性能测试(延迟测试)。
对制造完成后的设计进行测试
可测试性设计( DFT,Design-for-Test) 的目标:
让制造出来的芯片能够被快速、全面地测试。
DFT 的核心思想:
提供可控性和可观测性。
DFT 策略的组成部分:
提供测试方案,使其能够保证合理的故障覆盖率;
提供支持测试的额外电路结构。
两个重要的测试属性
DFT:Design-for-Test,可测试性设计; DUT:Device Under Test,被测器件。
可控性 Controllability:表示仅通过输入引脚,把电路中某个节点设置到指定状态的难易程度。
可观测性 Observability:表示在输出引脚处观察电路中某个节点数值的难易程度。
测试时两者都需要具备。
组合逻辑电路通常同时具有较好的可控性和可观测性,因此比较容易确定测试向量。
而时序电路中存在状态,测试会更加困难。因此常见做法是把它转换成类似组合逻辑的问题来处理,或者使用自测试方法。
测试向量的生成与验证
自动测试图形生成 ATPG,Automatic Test-Pattern Generation:
对于给定故障,确定能够激活该故障的输入向量,这个输入向量称为测试向量。这个测试向量还需要让故障产生的错误传播到主输出端(可观察性)。
故障仿真 Fault Simulation:
用于确定(所提出的一组测试向量的)测试覆盖率;
其基本方法是并行仿真无故障网络和带故障网络。
ATPG 和故障仿真都需要有合适的 CMOS 集成电路故障模型。
测试问题规模
注意组合逻辑和时序逻辑的区别
时序逻辑电路中输入数为 N,输出数为 K,状态寄存器数量为 M;
需要考虑的输入模式数量为
现代微处理器中的状态机通常有 50 以上的状态,会导致测试时间非常大
可以利用两个特点来减少测试向量数量。
冗余性 Redundancy:电路中的一个故障通常可以被多个输入模式覆盖,也就是说,检测一个故障并不一定需要所有可能输入,只要找到其中一个能够暴露该故障的输入模式即可。
降低故障覆盖要求 Reduced fault coverage:放宽“所有故障都必须被检测出来”的要求。实际中,典型的故障覆盖率通常为:
测试流程包括:
设置门电路输入;
观察门电路输出;
比较无故障情况下的输出和实际观测到的输出。
测试向量 Test vector:施加到测试系统上的一组门电路输入。
Stuck-at-0/1 故障:指逻辑门的输出始终固定为 0 或 1,且不受输入值影响。
这种故障与实际制造缺陷之间的对应关系取决于具体的逻辑电路家族。
Stuck-at-open/closed model 固定开路 / 固定闭合模型
原因是:用来描述晶体管总是导通或总是关断的情况。
如果晶体管
因此,测试这种故障通常需要两个周期:
第一个周期:必须先把输出电容放电 (输出节点可能保留之前的电荷状态)
第二个周期:尝试使
固定故障模型 Stuck-at models
sa0:stuck at zero,固定为 0 可以理解为信号短路到 GND。
sa1:stuck at one,固定为 1
可以理解为信号短路到
门电路中的固定故障
检测 NAND 的 stuck-at-0 有三种输入方式,而检测 NAND 的 stuck-at-1 只有一种输入方式
检测 NOR 的 stuck-at-1 有三种输入方式,而检测 NOR 的 stuck-at-0 只有一种输入方式
固定故障模型存在的问题:固定故障模型有时不能完全反映实际电路行为,可能出现“时序效应”的问题。
当
当
当
正常情况下:由
故障情况:由于
结果:此时输出节点
因此,检测这类故障需要两个测试向量,而不是一个测试向量。
Step 1:当
Step 2:当
组合网络测试测试分成两个部分:
第一,控制门电路的输入。这里的门电路可能是与外部输入直接连接的门,也可能是电路内部的门。
第二,观察门电路的输出。这里的输出也可能不是最终输出,而是电路内部某个节点的输出。
组合逻辑测试示例,目标是检测门 D 的 S-A-0 故障
核心思路:
选择输入,让门 D 在正常情况下应该输出 1。
选择输入,让门 D 的输出结果能够传播到输出
测试过程(1)
目标:测试门 D 的 stuck-at-0 故障。
第一步:让门 D 的输入端都为 0(门 D 是一个 NOR 结构,输入为 0、0 时,正常输出应为 1)。
接下来需要从门 D 反向推回到主输入:
需要
接下来要在主输出端观察这个故障。必须让门 D 正常时和门 D 有故障时,输出
F 的另一个输入必须为 0,这样 D 输出的差异才能通过 F 传播出去,也就是需要让 E 的输出为 0。
路径敏感化:确定一个输入模式,使得某个故障既能够被控制(能触发这个故障),也能够被观察(故障造成的影响能够在输出节点上被看到)。
时序电路测试会比组合电路逻辑测试困难得多——原因是不能直接设置存储单元的值。
因此,必须施加一串输入序列,让状态机逐步进入测试所需要的状态。同时,还要保证测试结果能够被观察到。
注意,主输入
为了测试 NAND 门的 stuck-at-1 故障,可以把 NAND 门的两个输入都设置为 1。
主输入
但为了让 NAND 门的正常输出为 0,必须把状态
测试需要经过多个时钟周期。状态机测试的成本要高于组合逻辑测试。
控制有限状态机 FSM
测试状态机时,我们通常不知道机器的初始状态。因此,必须找到一个输入序列,使状态机能够从任意初始状态出发,最终进入测试所需要的目标状态。
例如进入
其中
时序电路测试的第一步是先通过输入序列把状态机带到需要的状态。
常见测试方法包括:
Ad-hoc testing 专用测试。
Scan based test 基于扫描链的测试。
Self test 自测试。
Ad-Hoc Test 专用测试设计,通常是针对某个局部结构临时加入辅助测试电路,比如 mux,让内部模块更容易被控制或观察。
左图为原始结构,右图为改进后的结构。当 test 信号有效时, I/O bus 直接连接 Memory 的数据和地址总线,旁路掉中间的 Processor,从而有利于测试信号的控制和故障观察。
插入多路选择器可以提高可测试性。
Scan Based Test 基于扫描链的测试。
扫描测试有两个工作模式:
正常模式 normal mode: 寄存器作为普通的 N 位宽时钟寄存器工作。电路按照原本的功能运行。
测试模式 test mode:所有寄存器被连接成一个串行移位寄存器,也就是扫描链。此时通过,Scanin:串行输入测试数据;Scanout:串行移出测试结果,这样就可以把内部寄存器状态变得可控、可观测。
一个由多个触发器 FF 组成的扫描寄存器结构。Test = 1时,触发器会通过 scanin 和 scanout 串联成一条扫描链。
第一阶段
第二阶段
第三阶段
面向测试的扫描设计
上图,插入扫描结构之前的设计
下图,插入扫描结构之后的设计
使用另一种模式,也就是测试模式,把期望的测试值施加到组合逻辑的输入端。
把所有寄存器连接成一条扫描链。
需要额外的测试模式引脚,用于外部测试控制。
自动测试图形生成 ATPG 可以为时序机器生成一组测试向量。
scan design 的目的,是把时序电路内部的寄存器变成可以外部写入、外部读出的结构,从而降低测试难度。
电路板级测试正在变得和芯片级测试一样困难。
图中展示的是一块印刷电路板 PCB,上面有多个芯片。每个芯片的边界处加入扫描单元,这些扫描单元可以串接起来,形成一条边界扫描链。
Built-In Self Test,BIST 内建自测试。
电路自己判断测试结果是否正确
Stimulus generator 激励生成器,用来产生测试输入模式。
Sub-circuit under test 被测试的子电路。
Response analyzer 响应分析器,用来分析电路输出结果。
Test controller 测试控制器,用来协调整个测试过程。
需要一种方法来提供测试模式 ( stimulus generator ),还需要一种方法把电路响应与已知正确序列进行比较( response analyzer )
核心:BIST 把测试向量生成和结果判断电路都放进芯片内部,从而减少对外部测试设备的依赖。
使用 LRSR(LFSR) / Linear feedback shift register 线性反馈移位寄存器作为BIST 中的 stimulus generator 激励生成器,产生测试输入序列。它通过移位寄存器和反馈异或逻辑,自动生成一串看起来随机、但实际上可重复的测试模式。
伪随机模式生成器(它不是完全随机,而是按照固定反馈逻辑生成一组伪随机测试向量,用来刺激被测电路)
BIST 中的 response analyzer,响应分析器:它的功能是分析被测电路输出的响应序列。图中通过锁存器、异或门和计数器来统计输入序列中的跳变次数。
统计从 0 到 1,以及从 1 到 0 的跳变次数。
签名分析:计数器的值(电路的“签名”),随后会与已知的正确计数值进行比较。
响应分析器不一定逐位保存完整结果,而是把结果压缩成一个“签名”。只要最终签名与正确签名一致,就认为测试通过;如果不一致,就说明可能存在故障。
Memory Self Test 存储器自测试通过 FSM 自动产生地址、数据和读写控制,然后把读出的结果送入签名分析模块,判断存储器是否正常。
常用的存储器测试模式
Writing/Reading 0s, 1s 。写入并读出全 0、全 1。
Walking 0s, 1s。移动 0、移动 1:让单个 0 或单个 1 在不同存储单元上移动,用来检测相邻单元、地址译码或位线相关问题。
Galloping 0s, 1s。快速移动 0、快速移动 1。 这是一类更复杂的存储器测试模式,用来更充分地暴露存储阵列中的耦合故障或动态问题。
片上系统 SoC 中模块复杂度不断增加,而且不同类型模块的异构集成也越来越复杂。
先进封装和装配技术把测试问题进一步扩展到了电路板级别。
功能验证是数字 IC 设计中非常关键、非常耗时的一环。如果前期验证不充分,流片后很容易暴露功能错误。芯片第一次失败的主要原因很多都是验证不足。
前端 = 设计 30% + 验证 70%:在前端设计阶段,真正写 RTL 代码可能只占一部分,大量时间都花在验证上。
EDA = Electronic Design Automation,电子设计自动化。
EDA工具可以显示仿真器输出,帮助分析;分析设计可靠性;分析电磁干扰 EMI;分析金属迁移;分析信号完整性;分析热特性。
EDA 工具可以工作在不同抽象层次:行为级;RTL 级;门级;物理版图级;甚至整个电子系统级。
验证和EDA工具不考