4、响应分析技术:MISR原理、签名分析、故障覆盖评估
好了,咱们接着聊BIST的核心环节——响应分析。
测试向量打进去了,电路也跑起来了,最后一步就是看输出对不对。你想想看,芯片内部成千上万个节点,每个时钟周期都在跳变,我们总不能把每个周期的输出都存下来吧?那得多少存储空间?
所以就有了MISR(多输入特征寄存器)这个东西。说白了,它就是个压缩器,把一串长长的输出序列,压缩成一个短签名。最后我们只需要比对这一个签名,就能判断芯片有没有故障。
4.1 MISR的工作原理
MISR本质上是一个带反馈的移位寄存器。我习惯把它理解成「带记忆的累加器」。每个时钟周期,它都会把当前测试响应和寄存器里的历史值做一次多项式除法,余数留在寄存器里。
举个例子,一个4位的MISR,结构大概是这样的:
// 4位MISR的Verilog描述
module misr_4bit (
input clk,
input rst_n,
input [3:0] data_in, // 来自CUT的测试响应
output [3:0] signature // 最终签名
);
reg [3:0] misr_reg;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
misr_reg <= 4'b0;
else
// 特征多项式:x^4 + x + 1
misr_reg[0] <= misr_reg[3] ^ data_in[0];
misr_reg[1] <= misr_reg[0] ^ data_in[1] ^ misr_reg[3];
misr_reg[2] <= misr_reg[1] ^ data_in[2];
misr_reg[3] <= misr_reg[2] ^ data_in[3];
end
assign signature = misr_reg;
endmodule
这里的关键是特征多项式。不同的多项式,压缩效果不一样。我遇到过有人随便选了个多项式,结果两个不同的故障序列压缩出了相同的签名——这就是所谓的「混淆」或「别名」现象。
4.2 签名分析
签名分析,说白了就是比对。我们把无故障芯片跑出来的签名叫做「黄金签名」,流片回来的芯片跑出来的签名和它比对,一致就通过,不一致就说明有故障。
但这里有个坑——签名一致不代表芯片一定没问题。为什么?因为MISR是个有损压缩,不同的输出序列可能映射到同一个签名。这就是前面提到的别名问题。
我给大家一个经验数据:
| MISR位数 | 别名概率 | 适用场景 |
|---|---|---|
| 8位 | 约0.4% | 小规模模块,对故障覆盖要求不高 |
| 16位 | 约0.0015% | 中等规模,大多数场景够用 |
| 32位 | 约2.3×10⁻¹⁰ | 大规模SoC,高可靠性要求 |
| 64位 | 约5.4×10⁻²⁰ | 航天、医疗等安全关键领域 |
你看,32位的MISR,别名概率已经低到可以忽略不计了。我个人习惯,做消费类芯片用16位就够了,做车规级至少32位起步。
4.3 故障覆盖评估
故障覆盖,就是看你的BIST能测出多少比例的故障。这个数字直接决定了芯片的良率和可靠性。
评估方法主要有两种:
- 故障注入仿真:在RTL或门级网表里,人为插入各种故障模型(比如固定0、固定1、桥接故障),然后跑BIST,看能不能检测出来。
- 形式化分析:用EDA工具自动计算故障覆盖。这种方法快,但有时候会过于乐观。
我记得有一次,一个同事做完BIST,报告上写着故障覆盖99.8%。结果流片回来,良率惨不忍睹。后来一查,发现他用的故障模型太简单了,很多实际会发生的时序故障根本没覆盖到。
所以我的建议是:
- 别只看 stuck-at 故障。现在工艺越来越先进,桥接故障、延迟故障、开路故障越来越常见。
- 跑足够多的测试向量。测试向量太少,覆盖率上不去。我一般会跑到故障覆盖饱和为止——就是再加向量,覆盖率也不怎么涨了。
- 做交叉验证。用不同的工具、不同的故障模型去评估,结果互相印证。
核心要点:
- MISR是BIST的「压缩器」,把长输出序列压成短签名
- 签名比对是判断芯片好坏的最后一道关卡
- 故障覆盖评估要全面,别只盯着一个指标
- 别名概率可以通过增加MISR位数来降低
嗯,响应分析这块,说白了就是「压缩-比对-评估」三步走。MISR选多少位、特征多项式怎么定、故障覆盖做到多少算够——这些都得根据你的芯片规模、成本、可靠性要求来权衡。
我见过有人为了追求100%故障覆盖,把BIST面积做到占芯片总面积的10%以上,结果芯片成本翻倍,市场竞争力全没了。也见过有人为了省面积,用8位MISR糊弄事,结果良率惨不忍睹。
说到底,这是个工程权衡。没有标准答案,只有最适合你项目的方案。
避坑指南:
- 我曾经在某个项目里用了全0的MISR种子,结果所有芯片都显示通过——因为CUT输出全是0,MISR也一直是0。后来改成全1种子,才真正测出问题。
- 签名比对时,别忘了考虑X态(未知态)。如果CUT输出有X态,MISR会把它当成0或1,导致签名不稳定。我建议在MISR前面加个X态屏蔽逻辑。
- 故障覆盖评估别只看数字。我见过有人用工具跑出99.9%的覆盖率,结果实际测试时漏掉了一个关键路径的延迟故障。所以,覆盖率要结合设计知识来看。
好了,响应分析技术就讲这么多。MISR的原理、签名分析的方法、故障覆盖的评估——这三块是BIST测试的最后一道防线。做得好,芯片质量有保障;做得不好,流片回来哭都来不及。
记住一句话:测试不是为了证明芯片没问题,而是为了找出问题。签名分析就是那个「找问题」的工具,用好了,事半功倍。