第二章:扫描链原理
2.1 扫描链的基本结构
扫描链,说白了就是把普通的寄存器串成一串。
我刚开始接触DFT时,觉得这玩意儿挺神奇的。为什么?因为正常芯片工作时,每个寄存器各司其职,互不干扰。但测试时,我们需要把它们串起来,像一串珍珠一样,数据可以从头传到尾。
嗯,这里要注意:扫描链的核心是扫描触发器。它比普通触发器多了一个输入端口——扫描输入(SI),还有一个控制信号——扫描使能(SE)。
扫描触发器结构要点:
- 正常模式:D端输入,Q端输出
- 扫描模式:SI端输入,Q端输出
- SE信号决定当前是功能模式还是扫描模式
我在项目中遇到过一种情况:设计团队为了省面积,把扫描触发器换成了普通触发器加MUX。结果呢?时序乱了。你想想看,MUX的延迟加上布线延迟,整个扫描链的时序就崩了。所以我建议,直接用扫描触发器库单元,别自己拼。
下面这张图展示了扫描链的基本结构:
2.2 扫描输入与扫描输出
扫描输入(SI)和扫描输出(SO)是扫描链的两个对外接口。
我个人习惯把扫描链想象成一条数据管道。测试数据从SI灌进去,经过一串触发器,最后从SO流出来。每个时钟周期,数据往前挪一位。
实战小技巧:
我曾经在一个项目中,扫描链长度达到了5000多个触发器。当时测试向量生成时没注意,结果仿真跑了整整两天。后来我学乖了——先做短链验证,再拼长链。
扫描输入输出有几个关键参数:
| 参数 | 说明 | 典型值 |
|---|---|---|
| 扫描链长度 | 链中触发器的数量 | 100~10000 |
| 扫描输入端口数 | 芯片有多少个SI引脚 | 8~64 |
| 扫描输出端口数 | 芯片有多少个SO引脚 | 8~64 |
| 移位频率 | 扫描模式下时钟频率 | 10~100MHz |
你想想看,如果芯片有10000个触发器,扫描链长度就是10000。要灌一组测试向量,需要10000个时钟周期。所以扫描链越长,测试时间越长。
2.3 扫描模式与功能模式切换
扫描模式和功能模式,说白了就是芯片的两种人格。
功能模式下,芯片正常干活。扫描模式下,芯片进入测试状态。切换的关键就是那个扫描使能信号SE。
⚠️ 重要警告:
模式切换时,千万不要让SE信号在时钟沿附近变化。我曾经吃过这个亏——SE和时钟同时跳变,导致触发器进入了亚稳态,整个测试结果全废了。
模式切换的时序要求:
// 模式切换伪代码
// 功能模式:SE = 0
// 扫描模式:SE = 1
// 进入扫描模式
SE = 1; // 先拉高SE
wait(5ns); // 等待SE稳定
CLK = 时钟脉冲; // 再给时钟
// 退出扫描模式
SE = 0; // 先拉低SE
wait(5ns); // 等待SE稳定
CLK = 时钟脉冲; // 再给时钟
嗯,这里要注意:SE信号通常是一个全局信号,但实际项目中,我建议分区域控制SE。为什么?因为一个大芯片里,不同模块的时钟域可能不同。全局SE一拉,所有触发器同时切换,瞬间电流可能把芯片烧了。
模式切换的三种场景:
- 全扫描模式:所有触发器都参与扫描链,SE全局为1
- 部分扫描模式:只有部分触发器参与扫描,其他保持功能
- 旁路模式:某些扫描链被旁路掉,用于调试
我记得有一次调试一个通信芯片,功能模式下一切正常,但扫描测试就是过不了。查了三天,最后发现是SE信号在时钟域交叉时没做同步处理。你想想看,异步SE信号跨时钟域,不亚于在高速公路上突然刹车——不出事才怪。
避坑指南:
我曾经在项目中总结了一套SE信号处理规范:
- SE信号必须用同步器跨时钟域
- SE信号切换后,至少等5个时钟周期再开始扫描
- 扫描链的第一条和最后一条触发器,建议加旁路逻辑
最后说一句:扫描链原理不难,但细节决定成败。我见过太多工程师,原理讲得头头是道,一上手就翻车。所以,多仿真、多验证、多踩坑,这才是成长的捷径。
可可精品资料库