SCAN 片上比较(On-Chip Compare)技术
适用对象:数字 IC 设计、DFT(Design for Testability)工程师、SoC 验证与测试工程人员 前置知识:扫描链(Scan Chain)基本原理、D 触发器、组合逻辑故障模型、ATE 测试流程 关键词:Identical Cores、Broadcast Scan-In、XOR Tree、Sticky Bit、X-Masking、LTAG
目录
学习目标
读完本章,你应当能够:
- 解释为什么同构多核 SoC 必须引入片上比较技术;
- 画出”广播输入 + 片上互比”的整体架构,并说明引脚与测试向量为何不随核数增长;
- 推导 XOR 树与全 0/全 1 检测器的判定逻辑,写出其真值表;
- 说明粘滞位(Sticky Bit)触发器存在的必要性及其对测试时间的影响;
- 解释 X 态为何会导致误报,并描述 X-Masking 电路的接入位置与作用方式。
1. 背景:多核时代的测试困境
现代大规模多核 SoC 与 AI 芯片(GPU、NPU)中,往往集成数十乃至成百上千个完全相同的处理单元(Processing Element / Core)。这类结构被称为 Identical Cores(同构多核)。
如果沿用传统的”每个核独立引出 Scan-In / Scan-Out 引脚”的做法,会立刻遇到两个爆炸性问题:
| 问题 | 表现 | 后果 |
|---|---|---|
| 测试引脚爆炸 | 引脚数 ∝ 核数 N | 封装引脚、探针卡、ATE 通道资源无法承受 |
| 测试时间爆炸 | 测试向量数 ∝ 核数 N | 单颗芯片测试成本急剧上升 |
片上比较(On-Chip Compare)正是为解决这两个问题而生的核心技术。
1.1 核心思想
广播输入(Broadcast Scan-In)+ 片上多核结果互比(On-Chip Compare)
由于所有 Core 结构完全相同、接收完全一致的测试向量、并在相同节拍下运行,理论上它们的测试响应必须完全一致。因此不需要外部 ATE 逐个比对每个核的输出,只需在芯片内部判断”各核是否一致”即可。
2. 整体架构:广播 + 片上比较
2.1 架构图
flowchart LR
IN["SCAN In(广播)"] --> C0["Core 0"]
IN --> C1["Core 1"]
IN --> CN["Core N"]
C1 -.->|"︙ 中间还有更多核"| CN
C0 --> O0["SCAN Out 0"]
C1 --> O1["SCAN Out 1"]
CN --> ON["SCAN Out N(虚线)"]
O0 --> CMP["片上比较器<br/>XOR 树 + 粘滞位"]
O1 --> CMP
ON --> CMP
CMP --> PF["Pass / Fail<br/>(1 bit 或 N bit)"]
2.2 广播机制
外部 ATE 只需提供一套 SCAN In 激励数据,通过芯片内部的扇出树(Fan-out Tree)或广播总线,同时送达所有同构 Core 的扫描链输入端。
由此得到两个关键结论:
- Scan-In 引脚数恒定:无论片内有 4 个核还是 1024 个核,外部只需一组输入;
- 测试向量数恒定:同一套向量并行施加到所有核,向量总量不随核数增长。
设计要点:广播树需要在时序上保证各核同一周期收到同一比特。扇出树的平衡性、时钟偏斜(Skew)会直接影响比较结果的有效性——若某核晚一拍,比较器会把它误判为”不一致”。
3. 片上比较器结构
3.1 为什么不需要”期望值”
传统扫描测试需要 ATE 提供期望值(Expected Value)逐位比对。而同构多核架构下,比较器采用 Core-to-Core Comparison(核间互比):
- 不需要外部提供期望值;
- 以”多数一致”作为隐含的正确性基准;
- 大幅减少 ATE 存储与通道需求。
3.2 XOR 树(异或树)
将所有同构 Core 对应位置的扫描链输出 Scan_Out_0, Scan_Out_1, ..., Scan_Out_N 送入一个多输入异或门树;工程上也常采用相邻两两异或的方式(Core0 ^ Core1、Core1 ^ Core2 ……)。
判定原理:
- 所有 Core 输出全为 0 或全为 1 → 两两异或结果全为 0 → 一致(Pass);
- 某个 Core 因故障输出与其他核不同 → 异或门输出 1 → 存在差异(Fail)。
3.3 全 0 / 全 1 检测器
仅靠异或树还不够:需要同时确认”要么全 1、要么全 0”,而不是”部分 1 部分 0”。
- 多输入与门(AND):检测是否全为 1;
- 多输入或非门(NOR):检测是否全为 0;
- 两者结果经或门(OR)汇总:任一条件成立即判为 Pass。
flowchart LR
subgraph OUT["各核扫描输出"]
A0["Scan_Out_0"]
A1["Scan_Out_1"]
AN["Scan_Out_N"]
end
A0 --> AND["多输入 AND<br/>(全 1 检测)"]
A1 --> AND
AN --> AND
A0 --> NOR["多输入 NOR<br/>(全 0 检测)"]
A1 --> NOR
AN --> NOR
AND --> OR["OR 汇总"]
NOR --> OR
OR --> P["Pass"]
OR --> F["Fail"]
3.4 判定真值表(以 3 核为例)
| Core0 | Core1 | Core2 | 异或树输出 | AND(全1) | NOR(全0) | 结论 |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | Pass |
| 1 | 1 | 1 | 0 | 1 | 0 | Pass |
| 0 | 0 | 1 | 1 | 0 | 0 | Fail |
| 1 | 0 | 1 | 1 | 0 | 0 | Fail |
| 0 | 1 | 1 | 1 | 0 | 0 | Fail |
注意:若采用”两两异或”方案,需保证比较对象覆盖所有核(链式两两异或即可传递一致性),否则可能出现”两个核同时反向出错但互相抵消”的漏检风险。
4. 粘滞位捕获器(Sticky Bit / Error Latch)
4.1 问题:错误只是一个脉冲
扫描移位(Shift)过程通常持续上万个时钟周期。若某一周期出现不一致,比较器只会产生一个周期宽度的错误脉冲。若外部 ATE 不逐周期采样,这个错误就会”溜走”。
4.2 解决:锁存并保持
在比较器之后接入一个粘滞位触发器(Sticky-Bit Flip-Flop):
- 一旦检测到
Error = 1,立即置位并保持到测试结束; - 后续周期即使恢复正常,也不会清除该标志;
- 外部 ATE 只需在测试结束时读取 1 bit(或每核 1 bit)即可判断良率。
flowchart LR
ERR["比较器错误脉冲<br/>(单周期)"] --> FF["Sticky-Bit FF<br/>(置位后保持)"]
RST["Reset(通道复位)"] --> FF
FF --> TAG["Sticky pass/fail bit per core<br/>(经 LTAG 观测)"]
4.3 收益对比
| 方案 | 每周期采集量 | ATE 通道需求 | 测试时间影响 |
|---|---|---|---|
| 传统逐位比对 | 全部 Scan-Out | 高(∝ 核数) | 需完整采集 |
| 片上比较 + Sticky Bit | 1 bit / 核 | 极低 | 仅末端读取 |
5. 屏蔽逻辑(Masking Logic)与 X 态处理
5.1 X 态的来源
实际电路中,某些扫描链寄存器在 Capture 阶段可能捕获到不确定态(X 态),常见来源包括:
- 未初始化的 RAM;
- 模拟模块输出;
- 异步跨时钟域路径。
5.2 为什么 X 态会误报
不同 Core 的 X 态在仿真或实际硅片上可能表现出不同电平(一个出 0、一个出 1)。这会让片上比较器认为”核间不一致”,从而误报 Fail。
5.3 解决方法:X-Masking
在信号进入比较器之前,必须加入 X-Masking(X 态屏蔽)电路:
- 通常由额外的 Mask 寄存器或测试控制信号驱动与门实现;
- 在出现 X 态的移位周期,强制将对应通道屏蔽为固定值(如 0);
- 被屏蔽的通道不参与比较。
flowchart LR
SO["Scan_Out_i"] --> M["AND(Mask 门)"]
MK["Mask 寄存器 / 测试控制"] --> M
M --> XOR["XOR 树 / 比较器"]
代价与权衡:屏蔽会降低该周期的可观测性,可能掩盖真实故障。因此 Mask 的粒度(按通道 / 按周期)与覆盖率之间需要仔细权衡,通常结合 ATPG 的 X-masking 策略协同优化。
6. 比较器内部电路(On-Chip Compare Circuitry)
下图对应典型实现:左侧为输入信号,中间为异或树与粘滞逻辑,右侧为每核的 Pass/Fail 标志。
flowchart LR
R["Reset<br/>(channel output)"] --> LOGIC
E["Expect"] --> LOGIC
M["Mask"] --> LOGIC
F["Fail_1"] --> LOGIC
subgraph LOGIC["逻辑门网络<br/>(XOR / D-FF / OR)"]
direction LR
X["XOR 比较"] --> D["D 触发器"]
D --> O["OR 累积"]
end
LOGIC --> S["Sticky pass/fail bit per core<br/>(经 LTAG 观测)"]
对应关系说明:
| 信号 | 作用 |
|---|---|
Reset (channel output) |
每个测试通道开始前的复位,清除粘滞状态 |
Expect |
期望值输入(互比架构下可来自其他核或参考通道) |
Mask |
X 态屏蔽控制 |
Fail_1 |
上一级失败标志的级联输入 |
Sticky pass/fail bit per core |
最终输出,经 LTAG 链观测读出 |
7. 完整测试时序
sequenceDiagram
participant ATE
participant Broadcast as 广播树
participant Cores as Core 0..N
participant CMP as 片上比较器
participant Sticky as Sticky Bit
ATE->>Sticky: Reset 清零
loop 每个 Shift 周期(上万拍)
ATE->>Broadcast: 施加 1 套 SCAN In
Broadcast->>Cores: 同步广播
Cores->>CMP: 输出 Scan_Out
CMP->>CMP: XOR 树 + 全0/全1 检测
CMP->>Sticky: Error 脉冲(若有)
end
ATE->>Sticky: 读取 1 bit / 核
Sticky-->>ATE: Pass / Fail
关键时序约束:
- 各核 Scan-Out 必须同拍对齐;
- Sticky Bit 必须在测试开始前可靠复位;
- Mask 信号需在对应移位周期提前建立,避免毛刺;
- 读取阶段通过 LTAG 串行移出,注意与主扫描链的调度冲突。
8. 设计要点与常见陷阱
| 类别 | 要点 | 风险 |
|---|---|---|
| 时序 | 广播树平衡、Skew 控制 | 偏斜导致误判 |
| 逻辑 | XOR 树覆盖所有核 | 链式两两异或需保证传递性 |
| 复位 | Sticky Bit 可靠复位 | 残留状态导致假 Fail |
| 屏蔽 | Mask 粒度与覆盖率权衡 | 过度屏蔽掩盖真实缺陷 |
| 观测 | LTAG 读取调度 | 与主链冲突、读取遗漏 |
| 可诊断性 | 输出 1 bit 还是 N bit | 1 bit 只能判 Pass/Fail,无法定位故障核 |
延伸思考:若输出为 N bit(每核 1 bit),则可在良率损失时快速定位哪个核出错,代价是观测通道增加。实际工程中常在”1 bit 快速筛选”与”N bit 故障定位”之间做分级设计。
9. 本章小结
- 问题:同构多核导致测试引脚与测试时间随核数线性爆炸。
- 思路:广播输入 + 片上互比,用”一致性”替代”逐位期望值比对”。
- 比较:XOR 树判差异,AND/NOR 判全 1/全 0,OR 汇总输出 Pass/Fail。
- 保持:Sticky Bit 将单周期错误脉冲锁存至测试结束,ATE 末端读 1 bit。
- 防护:X-Masking 在比较前屏蔽不确定态,避免误报。
10. 思考题
- 若 1024 个同构核中只有 1 个核在某一拍出错,XOR 树的输出是什么?Sticky Bit 最终读到什么?
- 为什么”全 0 或全 1”检测不能只用 XOR 树完成?请构造一个 XOR 树无法区分、但 AND/NOR 可以区分的场景。
- 若广播树中某一路延迟多一个时钟周期,比较器会表现为什么现象?如何在不改版图的前提下定位该问题?
- X-Masking 屏蔽某一通道后,该通道上的固定型故障(Stuck-at)是否还能被检测?请说明理由。
- 在”1 bit 输出”与”N bit 输出”之间,你会如何根据产品定位(成本敏感 / 可维护性优先)做选择?
附录:术语表
| 缩写 / 术语 | 全称 | 说明 |
|---|---|---|
| DFT | Design for Testability | 可测试性设计 |
| ATE | Automatic Test Equipment | 自动测试设备 |
| Scan Chain | 扫描链 | 将触发器串成移位寄存器的测试结构 |
| Shift | 移位 | 测试向量串行移入 / 响应移出的过程 |
| Capture | 捕获 | 在功能时钟下捕获电路响应 |
| XOR Tree | 异或树 | 多输入异或门构成的比较网络 |
| Sticky Bit | 粘滞位 | 一旦置位便保持的故障标志位 |
| X-Masking | X 态屏蔽 | 将不确定态通道强制为固定值的电路 |
| LTAG | — | 用于观测片上测试标志的串行访问结构 |
| Skew | 时钟偏斜 | 同一时钟到达不同寄存器的时间差 |