2、扫描链基础:扫描链原理、扫描触发器、扫描输入输出、扫描使能
好,咱们正式开始聊扫描链。说实话,这是 DFT 里最核心、最基础的东西。你想想看,芯片里那么多寄存器,你怎么知道它们在生产出来之后都能正常工作?靠的就是扫描链。
2.1 扫描链原理:把时序电路变成组合逻辑
扫描链的原理,说白了就是一句话:把芯片里的普通寄存器,换成扫描触发器。这样在测试模式下,所有寄存器就串成了一根长长的链条。
为什么要这么干?因为测试组合逻辑容易啊。你给一组输入,看输出对不对就行。但时序电路有状态,你得让状态跑起来才能测。扫描链就是让这些寄存器在测试时变成「移位寄存器」,你可以把测试数据一个一个灌进去,然后捕获结果再移出来。
我刚开始接触 DFT 时,总觉得这玩意儿很玄乎。后来自己搭过一次扫描链,才明白其实就是「串行化」三个字。把并行的数据通路,在测试时变成串行的移位通路。
核心思想:正常模式下各干各的,测试模式下串成一串。
2.2 扫描触发器:普通寄存器的「变身」
扫描触发器,英文叫 Scan Flip-Flop,简称 SFF。它比普通寄存器多了一个输入端口和一个控制端口。
具体来说,一个扫描触发器有:
- 数据输入(D):正常模式下的输入
- 扫描输入(SI):测试模式下的输入
- 扫描使能(SE):控制选择哪个输入
- 时钟(CK):时钟信号
- 输出(Q):输出信号
嗯,这里要注意:扫描使能 SE 是关键。SE=0 时,走正常数据通路;SE=1 时,走扫描通路。
我在项目中遇到过一种情况:某个库里的扫描触发器,SE 信号是异步的。结果仿真时出现了毛刺,导致扫描链移位出错。后来我建议改用同步 SE 的触发器,问题就解决了。所以选库的时候,一定要看清楚 SE 是同步还是异步。
个人经验:我一般会优先选择带「双沿触发」能力的扫描触发器。虽然面积大一点,但测试覆盖率能提高不少。
2.3 扫描输入输出:数据怎么进去,怎么出来
扫描输入(Scan In)和扫描输出(Scan Out)是芯片的测试引脚。你想想看,芯片那么多寄存器,不可能每个都单独拉一根测试线出来。所以就用扫描输入和扫描输出这两个引脚,搞定所有寄存器的测试。
具体流程是这样的:
- 把 SE 拉高,进入测试模式
- 在扫描输入引脚上,一个时钟周期送一个 bit 数据
- 数据沿着扫描链,一级一级往下传
- 传完所有寄存器后,把 SE 拉低,进入捕获模式
- 一个时钟周期后,组合逻辑的结果被捕获到寄存器里
- 再把 SE 拉高,把捕获到的结果从扫描输出引脚移出来
说白了就是「灌进去 → 跑一下 → 吐出来」。你对比一下输入和输出,就知道芯片有没有问题。
我记得有一次,芯片流片回来,扫描链死活跑不通。查了半天,发现是扫描输出引脚被复用了,测试时没切换过来。从那以后,我每次做扫描链都会检查引脚复用逻辑。
避坑指南:我曾经因为扫描链的输入输出引脚没有做 ESD 保护,导致测试时芯片被静电打坏。后来我学乖了,扫描引脚一定要加 ESD 保护电路。
2.4 扫描使能:控制模式的开关
扫描使能(Scan Enable,SE)是整个扫描链的「总开关」。它决定了芯片是在正常工作,还是在做测试。
SE 信号的设计有几个要点:
- 全局性:SE 必须能同时控制所有扫描触发器
- 快速切换:从移位模式切换到捕获模式,SE 必须在半个时钟周期内完成
- 无毛刺:SE 切换时不能有毛刺,否则会导致数据错误
你可能会问:为什么 SE 切换要这么快?因为移位模式结束后,下一个时钟沿就要捕获数据。如果 SE 切换慢了,捕获到的数据就不对。
我个人的习惯是,SE 信号会单独走一根全局布线,不跟其他信号混在一起。这样能保证 SE 的延迟最小,切换最快。
另外,SE 信号在测试模式下要能通过扫描链本身来测试。也就是说,SE 本身也要能被扫描到。这个细节很多人会忽略,但做 DFT 的人必须考虑到。
关键点:SE 信号的设计质量,直接决定了扫描链能不能正常工作。我建议在综合时就把 SE 的时序约束设得紧一点,别留太多余量。
2.5 扫描链的完整工作流程
最后,咱们把整个流程串起来看一遍:
| 步骤 | SE 状态 | 操作 |
|---|---|---|
| 1. 移位加载 | 1 | 把测试数据从 Scan In 移入所有寄存器 |
| 2. 捕获 | 0 | 一个时钟周期,组合逻辑结果被捕获 |
| 3. 移位卸载 | 1 | 把捕获结果从 Scan Out 移出,同时加载下一组数据 |
你看,就这么三步。但每一步都有坑。比如移位加载时,数据能不能在一个时钟周期内传到下一级?捕获时,组合逻辑的路径能不能满足时序?卸载时,输出数据能不能被正确采样?
嗯,这些细节咱们后面会慢慢展开。今天先把扫描链的骨架搭起来,后面再往里填肉。
一句话总结:扫描链就是把芯片里的寄存器串起来,让测试变得可控、可观测。你掌握了这个思路,后面学什么扫描压缩、EDT 都不难。