第二章:扫描链原理

2.1 扫描链的基本结构

扫描链,说白了就是把普通的寄存器串成一串。

我刚开始接触DFT时,觉得这玩意儿挺神奇的。为什么?因为正常芯片工作时,每个寄存器各司其职,互不干扰。但测试时,我们需要把它们串起来,像一串珍珠一样,数据可以从头传到尾。

嗯,这里要注意:扫描链的核心是扫描触发器。它比普通触发器多了一个输入端口——扫描输入(SI),还有一个控制信号——扫描使能(SE)。

扫描触发器结构要点:

  • 正常模式:D端输入,Q端输出
  • 扫描模式:SI端输入,Q端输出
  • SE信号决定当前是功能模式还是扫描模式

我在项目中遇到过一种情况:设计团队为了省面积,把扫描触发器换成了普通触发器加MUX。结果呢?时序乱了。你想想看,MUX的延迟加上布线延迟,整个扫描链的时序就崩了。所以我建议,直接用扫描触发器库单元,别自己拼。

下面这张图展示了扫描链的基本结构:

扫描链基本结构 扫描输入 SI 扫描触发器1 SE=1: 扫描模式 扫描触发器2 SE=1: 扫描模式 ... 扫描触发器N SE=1: 扫描模式 扫描输出 SO 扫描使能 SE(全局控制) 时钟 CLK(所有触发器共享) 功能逻辑(组合逻辑) 正常模式下,触发器通过组合逻辑连接

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一拉,所有触发器同时切换,瞬间电流可能把芯片烧了。

模式切换的三种场景:

  1. 全扫描模式:所有触发器都参与扫描链,SE全局为1
  2. 部分扫描模式:只有部分触发器参与扫描,其他保持功能
  3. 旁路模式:某些扫描链被旁路掉,用于调试

我记得有一次调试一个通信芯片,功能模式下一切正常,但扫描测试就是过不了。查了三天,最后发现是SE信号在时钟域交叉时没做同步处理。你想想看,异步SE信号跨时钟域,不亚于在高速公路上突然刹车——不出事才怪。

避坑指南:

我曾经在项目中总结了一套SE信号处理规范:

  • SE信号必须用同步器跨时钟域
  • SE信号切换后,至少等5个时钟周期再开始扫描
  • 扫描链的第一条和最后一条触发器,建议加旁路逻辑

最后说一句:扫描链原理不难,但细节决定成败。我见过太多工程师,原理讲得头头是道,一上手就翻车。所以,多仿真、多验证、多踩坑,这才是成长的捷径。

可可精品资料库