如果内部节点很难控制和观察,能否在设计阶段就加一些结构,以方便后续的测试?
这就是可测试性设计(design for testability,DFT)的核心思想。
可扫描触发器
扫描(scan)方法将每个触发器改为可扫描触发器 scan flip-flop(加一个 MUX 即可),并在测试模式下将它们串成一个移位寄存器(shift register)。
可扫描寄存器有两种输入:正常输入 $D$ 与测试输入 scan-in $SI$;由控制信号 SCAN 决定使用哪一个。在测试模式(scan mode)下,测试人员可以把想要的内部状态 scan in,让电路运行几个 cycle,再把结果 scan out 出来观察。
内建自测试 BIST
扫描仍需要外部测试器提供测试向量,内建自测试(Built-In Self-Test,BIST)更进一步,让芯片内部自己生成测试输入并压缩测试结果(对拍?)。
BIST 的过程:
- 伪随机测试向量发生器(Pseudo-Random Sequence Generator,PRSG)生成伪随机测试向量
- 将测试向量送进被测的组合逻辑
- 输出结果 compile 成 syndrome,与 expected syndrome 比对,如果一致,被测 block 很可能无故障
关于 PRSG:可以由线性反馈移位寄存器(Linear Feedback Shift Register)实现,三个串联的 flip-flop,每次 Q0-Q1 移位至 Q1-Q2,新的 Q0 由原 Q0 与 Q2 异或产生。
内建逻辑块观测器(Built-In Logic Block Observer,BILBO)则将可扫描触发器与 BIST 结合。
边界扫描
扫描与 BIST 关注的是芯片的内部测试,而边界扫描(boundary scan)关注的是板级测试,也就是芯片封装引脚与 PCB 板之间的连接是否正常。
DFT 在芯片的每个 I/O pad 附近加入边界扫描单元,上有测试接口(interface),使得外部能够控制和观察每个 pin。这些接口有:
- TCK(Test Clock):测试时钟 clock
- TMS(Test Mode Select):选择测试模式
- TDI(Test Data-In):串行测试数据输入
- TDO(Test Data-Out):串行测试数据输出
- TRST(Test Reset):测试复位