3、扫描链设计(Scan Chain)
扫描链,说白了就是给每个触发器装个「旁路开关」。正常工作时它就是个普通寄存器,测试模式下就串成一条移位寄存器链。我刚开始接触DFT时觉得这玩意儿挺简单,不就是把触发器连起来嘛。后来踩过坑才知道,这里面的门道多着呢。
3.1 扫描触发器原理
先说说扫描触发器的内部结构。普通D触发器只有数据输入D、时钟CK、输出Q。扫描触发器在此基础上多了两个端口:扫描输入SI和扫描使能SE。
核心要点:SE=0时走D路径(正常功能),SE=1时走SI路径(扫描移位)。
我习惯把扫描触发器理解成一个2选1多路器加一个D触发器的组合。不过实际项目中,为了时序和面积,通常会把多路器集成到触发器内部,做成真正的扫描单元。
// 扫描触发器的RTL描述(简化版)
module scan_dff (
input wire D, // 功能数据输入
input wire SI, // 扫描输入
input wire SE, // 扫描使能
input wire CK, // 时钟
output reg Q // 输出
);
always @(posedge CK) begin
if (SE)
Q <= SI; // 扫描模式
else
Q <= D; // 功能模式
end
endmodule
嗯,这里要注意。扫描触发器的选择不是随便来的。不同工艺库提供的扫描单元类型不一样,有上升沿触发的,有下降沿触发的,还有带复位的。我个人建议统一用同一种边沿触发,不然时钟树综合时会很头疼。
经验之谈:我在28nm项目里吃过亏——混合用了上升沿和下降沿的扫描触发器,结果扫描时钟树搞出了两条路径,最后不得不重新综合。从那以后,我坚持全芯片统一用上升沿触发。
3.2 扫描链插入流程
扫描链插入不是手动连的,那是找死。我们用的是EDA工具自动插入。流程大致分几步:
- 准备网表——综合后的门级网表,不带扫描结构
- 定义扫描规则——时钟、复位、set/clear信号怎么处理
- 替换触发器——工具把普通DFF换成扫描DFF
- 连接扫描链——把扫描输入输出串起来
- 验证扫描链——跑DRC检查有没有违反规则
你想想看,一个百万门的芯片,手动替换触发器?不现实。工具做这件事很快,但前提是你得把规则定义清楚。
避坑指南:我曾经在一个项目中忘了定义异步复位信号的扫描规则,结果工具把复位端当成了普通输入,扫描链死活跑不通。后来花了三天才查出来——复位信号在扫描模式下必须被屏蔽掉。
扫描链插入时,工具会生成一个扫描链描述文件。这个文件很重要,后面ATPG生成测试向量时要用。里面记录了每条链上有哪些触发器、顺序是什么。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 链长度 | 100~1000个触发器 | 太短则测试时间长,太长则移位功耗大 |
| 扫描时钟 | 功能时钟或独立扫描时钟 | 建议用功能时钟,减少时钟域 |
| 扫描使能 | 全局SE信号 | 必须保证所有SE同时切换 |
3.3 多扫描链与压缩技术
单条扫描链?那是小芯片的做法。现代SoC动辄几千万门,单链根本不行。为什么呢?
一条链上串了5000个触发器,你要把测试向量移进去,得花5000个时钟周期。如果芯片有100万触发器,单链测试时间长得吓人。所以我们要用多扫描链——把触发器分成多条链,并行移位。
多链的好处:假设分成10条链,每条链1000个触发器,移位时间直接降到原来的1/10。测试时间缩短,测试成本就降下来了。
但多链也有代价——芯片引脚不够用。每条链需要一个扫描输入和一个扫描输出引脚。10条链就要20个引脚。所以就有了压缩技术。
压缩技术的思路很简单:在芯片内部加一个解压缩器(Decompressor)和一个压缩器(Compressor)。外部用少量引脚输入压缩后的测试数据,内部解压缩后送到多条扫描链,响应数据再压缩后输出。
// 压缩扫描架构示意
// 外部引脚: 2个扫描输入 + 2个扫描输出
// 内部链数: 16条扫描链
// 压缩比: 8:1
// 解压缩器(XOR网络)
// 输入: scan_in[1:0]
// 输出: chain_in[15:0]
// 每个chain_in由多个scan_in异或生成
// 压缩器(MISR或XOR树)
// 输入: chain_out[15:0]
// 输出: scan_out[1:0]
我记得在16nm项目里用过一种叫XOR压缩的方案。外部只有4个扫描输入引脚,内部却驱动了32条扫描链。压缩比8:1,测试数据量减少了将近80%。
实用技巧:压缩比不是越高越好。压缩比太高,ATPG工具生成向量时会有很多冲突,反而降低测试覆盖率。我一般控制在4:1到8:1之间,具体要看芯片规模和测试需求。
压缩技术还有个好处——可以检测出扫描链本身的故障。如果某条链断了,压缩器的输出模式会异常,测试就能发现。这在良率分析中很有用。
下面这张图展示了多扫描链与压缩的整体架构:
压缩技术不是万能的。它有个缺点——诊断分辨率下降。如果某条链上的触发器有故障,压缩后的输出很难定位到具体是哪条链。所以现在主流做法是:量产测试用压缩模式,失效分析时切回非压缩模式做精确定位。
重要提醒:压缩模式下的ATPG向量生成时间比非压缩模式长很多。我有个项目,非压缩模式跑ATPG只要2小时,开了8倍压缩后跑了整整两天。所以项目计划里一定要留够ATPG的时间。
最后说一句,扫描链设计不是一锤子买卖。芯片设计过程中,RTL每改一版,扫描链可能都要重新插入和验证。我建议在项目早期就把扫描链的流程跑通,后面迭代起来就快了。