作者:Darren H. Chen
方向:Backend Flow / 后端实现流程 / EDA 工具工程 / DFT 与物理实现协同
demo:LAY-BE-16_scan_chain_placement
标签:Backend Flow、EDA、DFT、Scan Chain、Placement、Physical-Aware Test、可测性设计

Scan chain 通常会先作为一个 DFT 概念被介绍:

把触发器连接成串行链,使芯片内部状态在制造测试过程中能够被控制和观测。

这个说法是正确的,但对后端实现来说还不够。

一旦扫描逻辑被插入到门级网表中,它就不再只是一个抽象的测试结构。它会变成物理设计数据库中的一组真实单元、引脚、网络、时钟、使能信号、扫描输入、扫描输出以及连接关系。

从后端角度看,这意味着 scan chain 与 placement 不是隔离的。它会改变 placement 引擎看到的连接图,增加布线需求,引入额外的时序模式,影响寄存器密集区域附近的拥塞,并且可能约束后续 ECO 工作。

因此,一个成熟的 Backend Flow 应该把 scan chain 当作物理实现对象,而不仅仅当作 DFT 产物。

本文讨论 scan 结构为什么会影响 placement,scan 顺序如何与物理坐标相互作用,以及后端流程如何围绕 scan-chain placement 质量建立报告与检查机制。


1. Scan Chain 作为逻辑测试结构

一个普通时序单元主要用于功能模式:

D  -->  FF  -->  Q
CLK --> FF

一个 scan register 会增加测试数据路径和测试控制路径:

功能数据路径 : D  -> FF -> Q
扫描移位路径 : SI -> FF -> SO
控制信号     : SE / test_mode
时钟信号     : CLK / test_clock

一个简化的 scan register 可以表示为:

                 +---------------------+
D  ------------> |                     |
SI ------------> |   scan register     | ----> Q
SE ------------> |                     | ----> SO
CLK -----------> |                     |
                 +---------------------+

在 scan shift 模式下,多个 scan register 会被串接成一条链:

scan_in -> FF1 -> FF2 -> FF3 -> ... -> FFn -> scan_out

在逻辑层面,这是一种测试访问结构。
在物理层面,这条链上的每一条箭头都会变成被放置寄存器之间的一条真实连接。

这就是后端 placement 需要参与的地方。


2. 为什么 Scan Chain 会变成 Placement 问题

Placement 的本质是把逻辑连接图映射到二维物理版图上。

在 scan 插入之前,一个寄存器主要通过功能逻辑连接:

logic cone A -> FF1 -> logic cone B -> FF2

在 scan 插入之后,会增加额外的连接边:

FF1/SO -> FF2/SI
FF2/SO -> FF3/SI
FF3/SO -> FF4/SI

这些 scan 边不一定与功能逻辑的局部性相关。

例如:

物理位置:

+-------------------------------+
| FF3                       FF2 |
|                               |
|                               |
| FF1                       FF4 |
+-------------------------------+

Scan 顺序:

FF1 -> FF2 -> FF3 -> FF4

这个 scan 顺序会产生很长的物理跳跃:

FF1 -> FF2 : 很长的对角线连接
FF2 -> FF3 : 横跨顶部区域
FF3 -> FF4 : 很长的对角线连接

这个 scan chain 在逻辑上是合法的,但在物理上很差。

可能带来的后果包括:

scan 线很长
额外布线需求增加
局部拥塞
scan shift 时序退化
需要额外 buffer
hold 修复更复杂
增量 ECO 更困难

因此,scan 顺序和 placement 不能被看作完全独立的决策。


3. 后端工具看到的是图,而不是测试意图

在物理实现层面,EDA 工具通常基于类似图的数据结构处理设计:

G = (V, E)

V = cells, pins, ports, registers, macros
E = nets, timing arcs, connectivity relationships

scan 插入会向这张图中增加额外的边:

E_functional : 普通功能连接
E_scan       : scan shift 连接
E_control    : scan enable / test mode 连接
E_clock      : scan clock 或共享 clock 连接

除非流程显式建模,否则 placement 引擎不会自动理解每条连接边背后的设计意图。

两个极端做法都有风险:

做法 风险
把 scan 边完全当作功能关键边处理 可能扰乱功能时序驱动 placement
完全忽略 scan 边 可能产生很长的 scan 线和布线拥塞

更实际的后端流程应该对 scan 结构设置受控优先级:

功能关键路径        : 高优先级
clock 相关约束      : 高优先级
scan 物理长度       : 中等优先级
scan 控制信号扇出   : 中到高优先级
scan shift 时序      : 取决于测试频率和模式约束
拥塞影响            : 必须在 placement review 中可见

目标不是让 scan 主导 placement,而是避免 scan 在物理实现中变成不可见对象。


4. 逻辑 Scan 顺序与物理寄存器顺序

一条 scan chain 是一个有序寄存器列表:

SCAN_CHAIN_0 = {FF1, FF2, FF3, FF4, ..., FFn}

placement 会给每个寄存器一个物理位置:

FF_i -> (x_i, y_i)

scan chain 的物理代价可以近似为相邻 scan register 之间距离的总和:

ScanLength = sum(distance(FF_i, FF_{i+1}))

早期阶段常用的近似是曼哈顿距离:

D(FF_i, FF_j) = abs(x_i - x_j) + abs(y_i - y_j)

这个指标不能替代真实布线结果,但在早期物理分析中很有用。它可以揭示 scan 顺序是否与 placement 结果在物理上对齐。

示例

Scan 边 距离类型 风险
FF1 -> FF2 短距离局部跳转 通常可接受
FF2 -> FF3 跨 core 的长跳转 可能带来拥塞和延迟
FF3 -> FF4 穿过 macro 通道 存在布线风险
FF4 -> FF5 跨 power domain 边界 需要合法性检查

如果一条 scan chain 中存在大量长跳转,就应该在 routing 之前进行 review。


5. Scan Chain 通过四个主要通道影响 Placement

5.1 线长

最直接的物理影响是额外线长。

如果 scan 顺序与物理局部性不匹配,scan path 可能反复横跨整个 block。这会增加估算线长和布线资源使用量。

线长很重要,因为它会影响:

电容
延迟
transition
布线拥塞
动态功耗
buffer 插入

即使 scan shift 频率低于功能频率,过长的 scan 线仍然会带来物理实现成本。


5.2 拥塞

scan nets 会与功能 nets、clock nets、电源结构以及 macro pin 连接共同竞争布线资源。

高风险区域包括:

寄存器密集集群
macro 边缘
狭窄 macro 通道
clock buffer 区域
IO 进入区域
power stripe 交叉区域
scan compression 逻辑区域

从单元密度角度看,placement 结果可能是可以接受的,但仍可能产生 scan 相关布线压力。

典型拥塞症状包括:

许多 scan nets 穿过同一个通道
scan 长跳跨越 macro blockage
scan enable 网络扩散到整个 block
scan compression 逻辑附近局部 pin 密度很高
detail routing 之后出现绕线

5.3 时序

scan 逻辑会在多个模式下影响时序。

在功能模式下,scan mux 可能增加寄存器输入端负载,并在寄存器附近引入额外延迟。

在 scan shift 模式下,scan chain 自身路径也有时序要求:

SO_i -> SI_{i+1}

根据测试时钟频率不同,scan shift 时序不一定是最紧张的 setup 约束,但 hold、transition 和 clock skew 仍然可能重要。

scan 相关时序关注点包括:

过长 SO-to-SI 线延迟
短距离局部 scan 边上的 hold 修复
scan enable 大扇出
scan registers 之间的 clock skew
长 scan nets 引起 transition 退化
模式相关 false path 或 multicycle 建模错误

后端流程不应假设 scan timing 永远无害。


5.4 ECO 与可维护性

如果 scan-chain 的物理问题发现太晚,修复可能需要大量改动:

scan reconnect
增量 placement
增量 routing
scan timing update
DFT rule recheck
逻辑等价检查
signoff 重跑

这就是为什么 scan chain 应该在 placement review 中可见,而不是等到 routing 后才暴露。

早期 scan 分析可以降低由于测试结构连接导致的后期物理 ECO 风险。


6. 物理感知 Scan Reordering

物理感知 scan reordering 会根据 placement 和 DFT 约束调整 scan register 顺序。

从高层看,它尝试解决这个问题:

给定:
  scan registers
  物理坐标
  chain endpoints
  DFT constraints
  clock-domain constraints
  power-domain constraints

求解:
  一个既能降低物理代价,又能保持测试合法性的 scan 顺序

它类似路径优化问题,但并不是简单的最短路径问题。

scan 顺序必须满足许多约束:

约束 为什么重要
Clock domain 合法性 避免跨不兼容时钟结构产生非法 shift path
Power domain 合法性 避免跨 power intent 边界产生不安全 scan link
Chain endpoint 保持 保持 scan input/output 架构
Chain length 均衡 保持测试时间和 compression 假设稳定
Lock-up latch 规则 保留不同 domain 之间需要的时序保护
Scan compression 结构 避免破坏 compressor/decompressor 拓扑
测试协议 保持预期 shift/capture 行为

因此,物理感知 scan reordering 更适合被理解为受约束的物理优化。

它的目标不只是:

让 scan 线更短

而是:

在不破坏 DFT 架构和实现合法性的前提下,降低 scan 物理代价

7. Scan-Aware Placement 的后端架构视图

一个 scan-aware 的后端流程需要一个数据层,把 DFT 结构和物理 placement 连接起来。

Gate-Level Netlist

Design Database

Scan Chain Definition

Scan Chain Model

Register Objects

Placement Result

Register Coordinates

Scan Length Analysis

Long Jump Detection

Domain Crossing Check

Congestion Hint

Reorder Suggestion

Scan Physical Report

关键思想是建立以下三者之间的桥梁:

逻辑 scan 顺序
物理 register 位置
实现约束
可报告的后端证据

如果没有这座桥,scan chain 对 placement review 来说就是隐藏结构。


8. 实用的 Scan Chain 数据模型

后端流程可以用一个小型结构化模型表示 scan chain 信息:

scan_chain_db
├─ chain_id
├─ scan_in
├─ scan_out
├─ ordered_register_list
├─ register_count
├─ clock_domain
├─ power_domain
├─ test_mode
├─ physical_bbox
├─ estimated_wirelength
├─ long_jump_count
├─ crossing_count
├─ congestion_score
└─ timing_status

每个字段都对应一个工程问题。

字段 工程问题
chain_id 正在分析哪条 scan chain?
ordered_register_list 当前 scan 顺序是什么?
register_count chain length 是否均衡?
clock_domain chain 是否满足 domain 合法性?
power_domain 是否跨 power boundary?
physical_bbox chain 的物理分布范围有多大?
estimated_wirelength 早期物理代价是多少?
long_jump_count 是否存在可疑 scan 长跳?
congestion_score 是否可能增加布线压力?
timing_status scan timing 检查是否可接受?

这个结构让 scan chain 可以像其他后端对象一样被 review。


9. Scan Chain 物理状态机

scan-chain 处理可以建模成状态机。

read scan chain definition

validate chain endpoints and registers

placement coordinates available

compute distance and crossings

long jumps or high cost detected

cost within threshold

apply physical-aware reorder

re-evaluate

write scan physical reports

NetlistReady

ScanDefined

PrecheckPassed

PlacementAvailable

PhysicalAnalyzed

ReorderNeeded

Acceptable

Reordered

Reported

这个状态机强调一个实际原则:

在 placement review 关闭之前,就应该检查 scan chain。

如果发现 scan 问题,流程应该执行 reorder、repair,或者在报告中给出明确 waiver 和理由。


10. 与 Placement 阶段的交互

scan chain 分析可以插入 placement 前后。

Placement 之前

流程应检查:

scan definition 存在
scan endpoints 有效
scan chain 中的 registers 存在于 linked design 中
chain length 合理
clock-domain grouping 已知
如适用,power-domain grouping 已知

这可以避免在 scan 结构不一致的情况下进入 placement。

初始 Placement 之后

流程应提取物理数据:

register coordinates
chain bounding box
adjacent scan edge distance
long jumps
macro crossings
partition crossings
local congestion hints

这可以在 routing 之前让 scan 代价可见。

Reordering 之后

流程应比较前后结果:

scan wirelength reduction
long jump reduction
chain length preservation
DFT legality preservation
shift timing impact

一个改善物理长度但破坏 DFT 合法性的 reorder 是不能接受的。


11. Scan Chain 报告

成熟后端流程应该生成 scan-chain 报告,而不是依赖视觉检查。

推荐报告包括:

scan_chain_summary.rpt
scan_chain_length.rpt
scan_chain_long_jump.rpt
scan_chain_domain_check.rpt
scan_chain_congestion_hint.rpt
scan_chain_reorder_suggestion.rpt
scan_chain_stage_summary.rpt

11.1 scan_chain_summary.rpt

该报告应汇总所有 scan chains:

Chain Registers Clock Domain Power Domain Status
SCAN_CHAIN_0 128 CLK_CORE PD_CORE PASS
SCAN_CHAIN_1 132 CLK_CORE PD_CORE PASS
SCAN_CHAIN_2 97 CLK_PERIPH PD_PERIPH WARN

11.2 scan_chain_long_jump.rpt

该报告应列出可疑的相邻 register 对:

Chain From To Estimated Distance Reason Suggested Action
SCAN_CHAIN_2 u_core/u_reg_128 u_periph/u_reg_007 1820 um 跨区域跳转 考虑 physical reorder
SCAN_CHAIN_3 u_mem/u_reg_031 u_ctl/u_reg_002 1430 um 穿过 macro channel review macro pin/channel

11.3 scan_chain_reorder_suggestion.rpt

该报告不应盲目修改设计,而应提供可 review 的证据:

chain_id              : SCAN_CHAIN_2
original_length       : 15420 um
estimated_new_length  : 9820 um
long_jump_reduction   : 11 -> 4
constraint_status     : clock-domain preserved
recommendation        : review physical-aware reorder candidate

报告应区分 measurement 和 decision。


12. 常见失败模式

失败模式 症状 可能根因 工程响应
scan 长跳 SO-to-SI 距离很大 Scan 顺序忽略物理局部性 物理感知 reorder
穿过 macro channel 许多 scan nets 经过狭窄通道 Macro placement 与 scan 顺序冲突 Review macro channel 与 scan order
chain 不均衡 一条 chain 明显比其他 chain 长 scan partitioning 不佳 重新平衡 scan chains
跨 domain chain 不兼容 domain 的 registers 被串接 DFT constraints 不完整 Review scan domain rules
scan enable 拥塞 高扇出控制网络大范围扩散 SE distribution 没有物理建模 Buffering 或区域化控制策略
后期 scan ECO routing 后才发现 scan 问题 routing 前缺少 scan physical check 在 placement 后增加 scan report

这种分类可以让 scan-chain debug 更系统。


13. 方法论:让测试结构在物理上可见

核心方法论很简单:

不要等到 route 或 signoff 阶段才发现 scan-chain 的物理代价。

一个实际后端序列可以是:

DFT netlist ready
↓
scan chain precheck
↓
import and link design
↓
placement
↓
scan physical analysis
↓
physical-aware scan reorder if needed
↓
incremental placement / legalization
↓
routing
↓
scan mode timing and DFT rule checks

流程应该同时维护 DFT 正确性和物理实现质量。

这并不是替代 DFT signoff,而是在后端实现层面帮助 scan 结构保持物理可控。


14. Demo 设计:LAY-BE-16_scan_chain_placement

这个 demo 的目的不是运行完整工业 DFT 流程,而是演示如何建模 scan-chain 结构,如何把它连接到 placement 坐标,以及如何把 scan chain 作为后端物理问题生成报告。

推荐目录结构:

LAY-BE-16_scan_chain_placement/
├─ data/
│  ├─ scan_chain.def
│  ├─ registers.csv
│  └─ placement_after.csv
├─ scripts/
│  ├─ run_scan_physical_check.csh
│  └─ clean.csh
├─ tcl/
│  ├─ 01_read_design.tcl
│  ├─ 02_read_scan_chain.tcl
│  ├─ 03_report_scan_chain.tcl
│  ├─ 04_analyze_scan_distance.tcl
│  └─ 05_write_reorder_suggestion.tcl
├─ reports/
│  ├─ scan_chain_summary.rpt
│  ├─ scan_chain_length.rpt
│  ├─ scan_chain_long_jump.rpt
│  ├─ scan_chain_reorder_suggestion.rpt
│  └─ scan_chain_stage_summary.rpt
└─ README.md

运行入口可以保持通用:

#!/bin/csh -f

setenv EDA_TOOL_BIN /path/to/eda_tool
setenv DESIGN_ROOT  /path/to/LAY-BE-16_scan_chain_placement

$EDA_TOOL_BIN -batch $DESIGN_ROOT/tcl/03_report_scan_chain.tcl \
  >&! $DESIGN_ROOT/reports/run_scan_chain.log

命令名应根据实际 EDA tool 环境调整,但工程结构应保持稳定:

read scan structure
read register placement
compute physical scan cost
detect long jumps
write reviewable reports

15. Demo 输入与输出

15.1 输入

输入 目的
scan_chain.def 描述 scan chain 顺序或 chain membership
registers.csv 列出 scan registers 及其元数据
placement_after.csv 提供 placement 后的 register 坐标
linked design database 如果可用,提供 cell/pin/net 对象上下文

15.2 输出

输出 目的
scan_chain_summary.rpt 总体 chain 数量、长度和状态
scan_chain_length.rpt 估算 chain 物理长度
scan_chain_long_jump.rpt 报告高距离的相邻 scan register 对
scan_chain_reorder_suggestion.rpt 提供候选 reorder 建议,供 review
scan_chain_stage_summary.rpt 阶段级 pass/warn/fail 汇总

这个 demo 应证明三件事:

scan chain 可以表示为结构化数据
scan chain 可以与物理 placement 关联
scan chain 的物理质量可以被报告和比较

16. Review Checklist

在关闭 scan-aware placement review 之前,应检查:

[ ] 所有 scan chain endpoints 已知。
[ ] 所有 scan registers 存在于 linked design 中。
[ ] Chain length 分布合理。
[ ] Placement 后 register 坐标可用。
[ ] scan 长跳已报告。
[ ] 跨 domain scan links 已 review。
[ ] 穿过 macro channel 的情况已 review。
[ ] Scan enable fanout 可见。
[ ] Reorder 建议保持 DFT 合法性。
[ ] 报告已与 placement 结果一起归档。

这个 checklist 可以避免 scan-chain 物理质量变成非正式的视觉判断。


17. 工程要点

scan chain 会影响 placement,因为它给设计增加了真实物理连接。

其后端实现影响可以总结为:

scan chain 改变 connectivity graph
connectivity 影响 placement cost
placement 影响 routing demand
routing 影响 timing 和 signoff
后期 scan repair 影响 ECO 复杂度

成熟的后端流程应该把 scan-chain 结构作为 placement review 的一部分显式呈现。

关键不是过度优化 scan、牺牲功能实现,而是避免把 scan 当作不可见结构。


18. 总结

Scan chain 在方法论层面是 DFT 结构,但一旦进入网表和数据库,它就会变成后端物理对象。

它会影响:

wirelength
congestion
scan shift timing
control signal distribution
routing resource usage
incremental ECO complexity

物理感知 scan 处理需要:

scan chain precheck
register coordinate extraction
scan length estimation
long jump detection
constraint-aware reorder review
scan physical reports

核心后端原则是:

测试结构、placement、timing、routing 和 signoff 必须通过设计数据库和报告彼此可见。

后端实现不仅是放置功能逻辑,也必须放置和布线那些让芯片可测试的结构。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐