3. Scan插入基础
在可测性设计(DFT)中,Scan插入是把普通时序电路改造成“可扫描”结构的第一步。它的核心目标很直接:让原本深埋在芯片内部、难以直接控制的触发器,在测试模式下变成一条可串行移入激励、移出响应的移位寄存器链。这样,ATPG工具就能用较少的测试向量获得较高的故障覆盖率。理解Scan插入,必须同时抓住四个关键词:扫描链、扫描触发器、多路选择器插入和扫描替换流程。
一、扫描链原理:把时序深度变成可控移位
普通功能触发器在功能模式下由数据端D采样,时钟沿到来后更新输出Q。问题在于,测试时我们很难从芯片外部直接给每一个触发器赋特定值,也很难直接观察每一个触发器的值。扫描链的基本思想是:在功能数据通路之外,增加一条测试专用的移位通路。所有扫描触发器首尾相连,前一级的Q接到后一级的扫描输入端,形成一条长链。测试模式下,外部通过扫描输入端口(scan_in)逐拍移入数据,经过N个时钟周期后,整条链上的触发器被赋予期望值;随后切换到捕获模式,让电路在功能时钟下工作一拍,把组合逻辑的响应捕获到触发器;再切回移位模式,把捕获结果逐拍移出到扫描输出端口(scan_out),由ATE或仿真器比对。
因此,扫描链的本质是“用时间换可控性和可观测性”。它没有改变电路的功能逻辑,只是增加了一条测试通路。链越长,移入移出所需周期越多,但可控/可观测的节点数量也越多。实际项目中,通常会把成千上万个触发器拆分成多条较短的扫描链,以平衡测试时间和引脚数量。
二、扫描触发器:多路选择器插入的关键结构
扫描触发器通常由普通D触发器加一个前端多路选择器(MUX)构成。MUX有两个数据输入:一个是功能数据D,另一个是扫描输入SI;选择端为扫描使能SE。当SE=0时,触发器工作在功能模式,Q在时钟沿采样D;当SE=1时,触发器工作在扫描模式,Q采样SI。这样,同一个触发器在两种模式下复用,既不影响功能时序,又增加了测试通路。
在标准单元库中,扫描触发器一般以专用单元形式提供,例如SDFF、SDFFR、SDFFS等,带复位或置位端。使用专用扫描单元比在普通触发器前手工插MUX更优,因为专用单元内部已经优化了面积、延迟和建立/保持时间,且ATPG工具能自动识别其SI/SE端口。若设计中混用普通触发器和手工MUX,容易导致扫描链识别失败或时序违例。
提示:扫描替换时,优先使用库中已表征的扫描触发器单元;若必须手工插入MUX,需确保MUX输出到触发器D端的路径满足建立时间,并避免在时钟路径上引入额外延迟。
三、扫描替换流程:从普通网表到扫描网表
Scan插入不是简单地把所有触发器换成扫描触发器,而是一个有顺序、有约束的工程流程。典型流程如下:
- 准备阶段:确认工艺库中扫描单元可用,确认时钟、复位、扫描使能等信号的定义,确定扫描链数量、每条链的最大长度和扫描引脚分配。
- 扫描替换:用扫描触发器替换普通触发器,连接SI和SE。替换时保持功能连接不变,仅增加测试端口。
- 链连接:按规划顺序把扫描触发器的Q连接到下一级的SI,形成扫描链。链的起点接scan_in,终点接scan_out。
- 规则检查:运行DRC检查,确认没有组合逻辑插入扫描路径、没有时钟域混链、没有未连接的SI/SE、没有锁存器干扰。
- 时序修复:扫描移位路径通常要求较低频率,但仍需检查建立/保持;功能路径的时序不能因MUX插入而恶化。
- 输出交付:生成扫描网表、扫描链定义文件(如SCANDEF)、ATPG约束和测试协议文件。
下面是一个简化的扫描链连接示例,展示替换后网表中SI/SE的连接关系:
// 扫描触发器例化(替换后)
SDFFRX1 u_ff1 (
.D (func_d1),
.SI (scan_in),
.SE (scan_en),
.CK (clk),
.RN (rst_n),
.Q (q1)
);
SDFFRX1 u_ff2 (
.D (func_d2),
.SI (q1), // 前一级Q接后一级SI
.SE (scan_en),
.CK (clk),
.RN (rst_n),
.Q (q2)
);
SDFFRX1 u_ff3 (
.D (func_d3),
.SI (q2),
.SE (scan_en),
.CK (clk),
.RN (rst_n),
.Q (scan_out) // 链尾输出
);
四、基本术语与常见误区
Scan插入涉及大量术语,理解它们有助于后续ATPG和MBIST签核。下表列出最常用的基本术语:
| 术语 | 含义 | 工程关注点 |
|---|---|---|
| Scan Chain | 由扫描触发器首尾相连形成的移位链 | 链长、链数、平衡性 |
| Scan Flip-Flop | 带MUX的扫描触发器,含D/SI/SE端口 | 单元库支持、时序表征 |
| SE | Scan Enable,扫描使能信号 | 全局布线、时钟域同步 |
| SI / SO | Scan In / Scan Out,扫描输入/输出 | 引脚分配、链方向 |
| Shift | 移位模式,SE=1,逐拍移入移出 | 移位频率、功耗 |
| Capture | 捕获模式,SE=0,功能时钟采样响应 | 时钟脉冲、竞争冒险 |
| SCANDEF | 扫描链定义文件,描述链顺序和连接 | 与网表一致性 |
| Lockup Latch | 跨时钟域扫描链中的锁存器,防止亚稳态 | 时钟域边界处理 |
常见误区:很多初学者认为“把所有触发器换成扫描触发器就完成了Scan插入”。实际上,若扫描链顺序不合理、跨时钟域未加lockup latch、SE信号未做平衡,后续ATPG会出现大量不可测故障,甚至无法生成有效向量。另一个误区是忽略功能时序:MUX插入会增加D端延迟,若不在综合阶段预留余量,可能造成建立时间违例。
五、案例场景:一条链的替换与验证
假设一个模块有3个普通触发器,功能数据分别为func_d1、func_d2、func_d3,时钟为clk,复位为rst_n。扫描插入后,它们被替换为SDFFRX1,并连接成一条链:scan_in → u_ff1.SI,u_ff1.Q → u_ff2.SI,u_ff2.Q → u_ff3.SI,u_ff3.Q → scan_out。SE统一接scan_en。验证时,先令SE=1,移入3位激励;再令SE=0,给一个功能时钟脉冲;最后SE=1,移出3位响应。若移出值与ATPG期望一致,说明扫描链工作正常。这个简单案例体现了Scan插入的全部核心动作:替换、连接、移位、捕获、比对。
在实际项目中,扫描链数量可能达到几十到上百条,每条链长度从几百到几千不等。扫描插入完成后,必须通过DRC和ATPG试运行来确认链的完整性和可控性。只有扫描链正确,后续的ATPG和MBIST签核才有可靠基础。