
【一句话结论】
设计芯片测试与验证方案需整合DFT技术(扫描链、BIST)与测试向量生成策略,通过量化故障覆盖率(如提升至98%)和多维度覆盖(功能+故障),并建立故障处理流程(如工具参数优化+人工关键向量设计),核心是平衡测试效率(如缩短测试时间30%)与芯片性能(如扫描链时钟频率优化至原1.2倍)。
【原理/概念讲解】
老师讲解DFT与测试向量:DFT(设计可测试性技术)是设计阶段嵌入的测试结构,用于提高芯片可测试性。扫描链(如标准扫描链)通过移位寄存器将芯片内部逻辑状态串行移出,便于测试;BIST(内建自测试)则是芯片内部集成测试生成、执行、响应分析单元,无需外部测试设备。测试向量是用于激励芯片并检查响应的输入序列,覆盖不同功能路径。测试覆盖率通常指故障覆盖率(检测故障模型的概率)或功能覆盖率(路径、状态机覆盖)。类比:扫描链像“芯片的测试管道”,将内部状态串行移出,方便检查;BIST像“芯片内置的测试员”,自己生成测试并检查结果。
【对比与适用场景】
| 特性 | 扫描链(DFT扫描链) | BIST(内建自测试) |
|---|---|---|
| 定义 | 通过移位寄存器将内部逻辑状态串行移出,实现测试 | 芯片内部集成测试生成、执行、响应分析单元 |
| 特性 | 需外部测试设备(如边界扫描仪器) | 无需外部测试设备,自测试 |
| 使用场景 | 适用于复杂逻辑,尤其是组合逻辑与状态机混合的芯片 | 适用于需要快速自测试的芯片,如嵌入式系统、存储器 |
| 注意点 | 可能增加芯片面积和延迟,需设计移位时钟控制 | 可能增加芯片面积,测试生成可能不覆盖所有故障 |
【示例】
扫描链测试流程伪代码(假设一个组合逻辑模块):
function test_scan_chain():
// 1. 初始化扫描链:将所有扫描寄存器置为0
for i in 0 to num_scan_regs-1:
scan_in[i] = 0
// 2. 串行移入测试向量(测试向量是输入激励序列)
for each test_vector in test_vectors:
for i in 0 to num_scan_regs-1:
scan_in[i] = test_vector[i] // 串行移入
// 3. 应用测试向量到芯片输入
apply_input(test_vector)
// 4. 等待时钟周期,使测试向量生效
wait_clock_cycles()
// 5. 串行移出响应(芯片输出状态)
for i in 0 to num_scan_regs-1:
response[i] = scan_out[i] // 串行移出
// 6. 比较响应与预期值
if response != expected_response:
report_fault()
故障覆盖率计算示例:若故障模型库有1000个故障,检测到980个,则故障覆盖率FC = (980/1000)×100% = 98%。
【面试口播版答案】
面试官您好,设计芯片的测试与验证方案,我会从DFT技术(扫描链、BIST)和测试向量生成两方面入手。首先,扫描链通过移位寄存器串行移出内部状态,结合测试向量覆盖逻辑路径;BIST则是芯片内置的测试单元,生成自测试向量并分析响应。为提高测试覆盖率,我会采用多策略:比如功能覆盖(路径、状态机)、故障覆盖(常见故障模型),同时结合随机测试与确定性测试。比如过往项目中,我处理测试向量不足时,通过优化测试向量生成工具(如使用Synopsys FaultSim,将故障模型库从1000个增加到2000个,测试向量长度从10%增加到30%),并调整测试策略(增加随机测试比例),最终将故障覆盖率从85%提升到98%。总结来说,测试方案需平衡测试效率(如通过优化扫描链时钟频率至原1.2倍,减少测试时间30%)与芯片性能,通过DFT技术提升可测试性,结合多维度覆盖和故障处理流程确保测试有效性。
【追问清单】
【常见坑/雷区】