3、扫描链设计基础:扫描链的工作原理、扫描触发器类型(muxed-D、LSSD)、扫描链的插入流程、扫描使能控制
各位同学,今天我们聊聊扫描链。这是可测性设计里最基础、也最核心的一块。说白了,扫描链就是给芯片里的每个触发器装上一扇「后门」。测试模式下,我们可以通过这扇后门,把测试数据灌进去,再把结果读出来。
我刚开始接触DFT时,觉得这玩意儿挺神奇的。明明芯片正常工作的时候,触发器之间是组合逻辑连着的,怎么一进测试模式,它们就乖乖串成一串了呢?嗯,今天我们就把它彻底讲透。
3.1 扫描链的工作原理
先看一张简单的图(脑补一下):
正常模式:
组合逻辑 → FF1 → 组合逻辑 → FF2 → 组合逻辑 → FF3
测试模式(扫描链):
Scan_in → FF1 → FF2 → FF3 → Scan_out
工作原理其实就三步:
- 移位(Shift):测试模式下,所有触发器串成一条链。时钟每来一个周期,数据从Scan_in移入,经过FF1、FF2、FF3,最后从Scan_out移出。
- 捕获(Capture):移入完成后,切回正常模式,给一个或几个时钟脉冲。这时候组合逻辑的输出被捕获到触发器里。
- 移出(Unload):再切回测试模式,把捕获到的结果从Scan_out移出来,和预期值比对。
为什么能这么干?因为每个触发器在测试模式下,输入被切换到了扫描路径上。你想想看,原本每个触发器的输入来自前级组合逻辑,现在变成了来自前一个触发器的输出。这就是「扫描」二字的由来。
核心要点:扫描链的本质,是把时序电路在测试模式下「降维」成移位寄存器。这样我们就可以用ATE(自动测试设备)直接控制每个触发器的状态,也能直接读出每个触发器的状态。
3.2 扫描触发器类型
扫描触发器不是普通触发器。它需要多一个「测试数据输入」端口和一个「测试使能」控制。实际工程中,主流的有两种:muxed-D和LSSD。
3.2.1 Muxed-D扫描触发器
这是最常用的类型。结构很简单:在D触发器的输入前加一个2选1多路器。
┌─────┐
D (功能) ─┤ │
│ MUX ├──→ D触发器 ─→ Q
SI (扫描)─┤ │
└─────┘
↑
SE (扫描使能)
SE=0时,选择D端,正常工作。SE=1时,选择SI端,进入扫描移位模式。
我个人习惯在项目里优先用muxed-D。为什么?因为它面积小,功耗低,而且大多数标准单元库都直接提供。我在一个28nm的项目里,整个芯片用了超过20万个muxed-D触发器,综合下来面积开销大概在5%左右,完全可以接受。
小提示:选muxed-D时,注意多路器的传播延迟。如果SE信号到达时间不一致,可能导致扫描移位时数据错位。我建议在SE树上做时钟树综合级别的平衡。
3.2.2 LSSD(电平敏感扫描设计)
LSSD是IBM搞出来的老牌技术。它不用多路器,而是用两个锁存器组成一个主从结构。
L1锁存器 L2锁存器
D ─→ [L1] ─→ [L2] ─→ Q
↑ ↑
C1时钟 C2时钟
SI ─→ [L1] (扫描输入)
LSSD有两个独立的时钟:C1控制L1,C2控制L2。正常工作时,C1和C2交替脉冲,数据从D传到Q。扫描模式下,通过C1和C2的非重叠脉冲,数据从SI串行移入。
说实话,LSSD现在用得少了。为什么?因为它面积大,功耗高,而且需要两个时钟。但它在抗毛刺方面确实有优势。我记得有一次做车规级芯片,客户指定要用LSSD,说是可靠性要求高。那是我第一次在项目里用LSSD,布线的时候真是头疼,两个时钟树要分别做平衡。
| 特性 | Muxed-D | LSSD |
|---|---|---|
| 面积开销 | 小(约5-10%) | 大(约15-25%) |
| 功耗 | 低 | 高 |
| 时钟需求 | 单时钟 | 双时钟(C1/C2) |
| 抗毛刺能力 | 一般 | 强 |
| 主流应用 | 消费电子、AI芯片 | 军工、车规、高可靠 |
3.3 扫描链的插入流程
扫描链插入不是手动干的,都是用EDA工具自动完成。但流程你得心里有数。我一般分四步走:
- 准备网表和库:综合后的门级网表,加上标准单元库(里面要有扫描触发器的定义)。
- 定义扫描链:告诉工具哪些触发器要串成链,链的起点(Scan_in)和终点(Scan_out)在哪。
- 执行插入:工具会把普通触发器替换成扫描触发器,然后把它们串起来。这一步会生成新的网表。
- 验证:跑DRC(设计规则检查)和仿真,确保扫描链功能正确。
这里有个坑。我曾经在一个项目里,工具自动把时钟域混在一起的触发器串到了同一条链上。结果仿真时发现,跨时钟域的扫描数据老是出错。后来我学乖了,插入前先按时钟域分组,每个时钟域单独做一条链。
警告:扫描链插入后,一定要做形式验证(Formal Verification)。确保插入前后,功能逻辑完全等价。我见过有人跳过这步,结果流片回来测试时发现功能不对,最后定位到是扫描插入时把一条关键路径改坏了。
3.4 扫描使能控制
扫描使能(Scan Enable,简称SE)是整个扫描链的「总开关」。SE=1时,芯片进入测试模式;SE=0时,恢复正常工作。
SE的控制有几个关键点:
- 全局性:SE信号通常是一个全局信号,从芯片的测试引脚进来,经过缓冲树分布到每个扫描触发器。
- 时序要求:SE切换必须在时钟沿之间完成。如果SE在时钟沿附近变化,可能导致触发器误操作。我一般要求SE的setup/hold时间和数据信号一样严格。
- 毛刺防护:SE线上绝对不能有毛刺。一旦毛刺导致SE误翻转,扫描链上的数据就全乱了。我习惯在SE入口加一个同步器,再用一个毛刺滤波器。
实际项目中,SE控制还有一个常见问题:功耗。扫描移位时,所有触发器同时翻转,瞬间电流可能比正常工作还大。我记得有个项目,扫描测试时电源压降太大,导致测试失败。后来我们加了SE的分组控制,一次只激活一部分链,才把问题解决。
避坑指南:我曾经在一个65nm的项目里,SE信号用了普通的缓冲树,结果测试时发现扫描链移位速度上不去。后来换成时钟树综合工具来布SE树,问题就解决了。SE树和时钟树一样,需要做平衡。
好了,扫描链的基础就这些。下一章我们讲扫描链的优化和压缩技术,到时候会涉及更多实战经验。记住,扫描链是DFT的基石,这块搞不明白,后面ATPG、诊断什么的都白搭。