扫描链设计入门:扫描触发器原理、扫描链结构、扫描使能信号、扫描输入输出端口
扫描链(Scan Chain)是可测试性设计(DFT)中最核心的硬件基础设施。在数字芯片中,功能寄存器(Flip-Flop)在测试模式下被重新配置为串行移位寄存器,从而实现对内部状态的直接控制(写入)和可观测(读出)。本章从扫描触发器的电路原理出发,逐步拆解扫描链的组成结构、扫描使能(Scan Enable)信号的时序要求,以及扫描输入输出端口的物理实现与复用策略,为后续ATPG向量生成和故障仿真打下坚实的硬件基础。
扫描触发器的电路原理与工作模式
扫描触发器的本质是在标准D触发器(D Flip-Flop)的数据输入端前增加一个2选1多路选择器(MUX),由扫描使能信号SE(Scan Enable)控制数据来源。当SE=0时,触发器工作在功能模式,D端接收来自组合逻辑的激励信号;当SE=1时,触发器工作在移位模式,D端被切换到扫描输入SI(Scan In),实现串行移位。
从电路实现角度,扫描触发器有两种常见结构:MUX-D型和电平敏感型(LSSD)。MUX-D型结构简单、面积开销小,是当前主流ASIC设计中最常用的方案。其核心时序参数包括:
- 建立时间(Setup Time):在时钟上升沿到来之前,SI或D数据必须保持稳定的最小时间。
- 保持时间(Hold Time):在时钟上升沿之后,数据必须继续保持稳定的最小时间。
- 时钟到Q延迟(CK-to-Q Delay):时钟有效沿到Q端输出稳定的时间。
在移位模式下,所有扫描触发器通过SI→Q→SI的路径首尾相连,形成一条或多条移位寄存器链。每来一个时钟脉冲,测试数据就向链尾移动一位。这种设计使得测试工程师可以通过串行方式将任意测试向量移入所有触发器,并在测试响应捕获后将其移出进行比对。
核心要点:扫描触发器是DFT的“细胞”,其面积开销通常为5%~10%。在综合阶段,标准单元库中的普通D触发器会被自动替换为扫描触发器(Scan DFF),这一过程由DFT Compiler或Genus等工具自动完成,但设计者需要理解其内部结构以便进行时序约束和故障诊断。
扫描链的物理结构与拓扑策略
扫描链的构建并非简单地将所有触发器串联成一条长链,而是需要根据芯片规模、功耗、布线资源和测试时间进行综合权衡。常见的扫描链结构包括:
| 结构类型 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| 单条长链 | 所有触发器串联为一条链 | 端口占用最少 | 测试时间长、布线拥塞 |
| 多条并行链 | 触发器分组为多条链并行移位 | 测试时间短、布线均衡 | 需要更多扫描端口 |
| 平衡树结构 | 链长相近,时钟到达时间一致 | 时序收敛容易 | 布局规划复杂 |
| 压缩链结构 | 使用XOR压缩网络减少输出端口 | IO开销小 | 诊断分辨率下降 |
在实际工程中,扫描链的划分通常遵循以下原则:
- 链长均衡:每条链的触发器数量尽量接近,避免某条链过长导致测试时间瓶颈。
- 时钟域隔离:不同时钟域的触发器不应混在同一条扫描链中,否则需要额外的时钟同步逻辑。
- 物理邻近性:同一链上的触发器在版图上应尽量靠近,以减少布线长度和延迟。
- 功耗控制:移位时大量触发器同时翻转会产生较大动态功耗,必要时可分组使能。
扫描使能信号(SE)的时序与设计约束
扫描使能信号是扫描链正常工作的关键控制信号。在测试模式下,SE必须在移位阶段保持为高电平(SE=1),在捕获阶段切换为低电平(SE=0)。SE信号的时序要求极为严格,因为它直接决定了数据路径的选择。
SE信号的设计难点在于:它是一个全局信号,需要同时到达所有扫描触发器的MUX控制端。如果SE到达不同触发器的时间不一致(即时钟偏斜),可能导致部分触发器仍在移位模式而另一部分已进入捕获模式,从而造成数据错误。为此,工程上通常采用以下措施:
- 时钟树综合(CTS):将SE信号当作时钟信号进行树形综合,保证其到达时间偏差在可接受范围内。
- 锁存器保护:在SE路径上插入锁存器,防止移位阶段结束时SE过早下降。
- 多周期约束:在SDC约束文件中,对SE信号设置多周期路径约束,允许其在捕获时钟沿之后一个周期内稳定。
典型的扫描测试时序分为三个阶段:移位(Shift)→ 捕获(Capture)→ 移位(Shift)。在移位阶段,SE=1,测试向量逐位移入;在捕获阶段,SE=0,一个或两个功能时钟脉冲被施加,组合逻辑的响应被捕获到触发器;随后SE再次拉高,将捕获结果移出。
风险提示:SE信号与时钟信号之间的竞争冒险是扫描链调试中最常见的问题。如果SE在时钟上升沿附近发生变化,可能导致触发器采样到不确定的数据。务必在仿真阶段使用真实的时序模型验证SE的建立/保持时间。
扫描输入输出端口的设计与复用
扫描输入(Scan In, SI)和扫描输出(Scan Out, SO)是芯片与外部测试设备(ATE)之间的数据通道。由于芯片引脚资源宝贵,SI和SO通常与功能引脚复用,通过测试模式信号(如Test Mode)进行切换。
端口复用的典型方案包括:
| 复用方式 | 功能引脚 | 测试模式功能 | 注意事项 |
|---|---|---|---|
| 输入复用 | 数据输入引脚 | 作为SI使用 | 需保证输入缓冲器在测试模式下正常工作 |
| 输出复用 | 数据输出引脚 | 作为SO使用 | 需三态控制避免总线冲突 |
| 双向复用 | GPIO引脚 | 分时作为SI/SO | 需要额外的方向控制逻辑 |
在端口设计时,还需要考虑以下工程细节:
- 扫描链的起始和结束:每条扫描链的SI端必须连接到芯片的可控引脚,SO端必须连接到可观测引脚。如果内部有多个扫描链,通常通过扫描链选择器(Scan Chain MUX)进行切换。
- 测试访问端口(TAP):在IEEE 1149.1标准(JTAG)中,扫描链通过TAP控制器进行管理,SI/SO与TDI/TDO复用。
- ESD保护:扫描端口必须与功能端口一样具备ESD保护电路,防止测试过程中的静电损伤。
实战案例:多时钟域扫描链的调试与优化
某通信芯片设计包含3个时钟域(CPU域、DSP域、外设域),共约200万触发器。初始DFT方案将所有触发器串联为4条长链,每条链约50万触发器。在ATE测试时发现以下问题:
初始现象:测试向量加载时间过长(单条链移位需要50万拍时钟),且DSP域与CPU域之间的跨时钟路径在捕获阶段出现大量时序违例。
分析过程:通过时序报告发现,跨时钟域的路径在捕获阶段需要满足两个时钟沿之间的约束,但由于扫描链将不同时钟域的触发器混在一起,导致捕获时钟无法同时满足所有域的时序要求。
优化方案:
- 将扫描链按时钟域重新划分,每个时钟域独立成链,共形成12条链(CPU域4条、DSP域5条、外设域3条)。
- 在跨时钟域路径上插入同步器(2级触发器),并在扫描链中将这些同步器排除在外(或单独处理)。
- 对SE信号按时钟域分别生成,每个域的SE独立控制,避免全局SE的时序收敛压力。
- 在SDC中为每个时钟域设置独立的捕获时钟约束,使用
set_false_path或set_multicycle_path处理跨域路径。
结果对比:优化后,单条链长度降至20万拍以内,测试时间缩短60%;跨时钟域时序违例数量从127条降为0条;ATE测试良率从92.3%提升至98.7%。
复盘经验:扫描链设计必须在RTL阶段就考虑时钟域边界,不能等到网表阶段再划分。同时,SE信号的时钟树综合质量直接影响测试稳定性,建议在CTS阶段将SE与时钟同等对待。
经验提醒:在扫描链插入完成后,务必运行DRC(设计规则检查)工具(如Tessent Scan DRC),检查是否存在未扫描的触发器、锁存器、三态总线等异常结构。这些结构会导致ATPG覆盖率下降或测试向量无效。
常见误区与总结复盘
扫描链设计看似简单,但在实际项目中经常出现以下误区:
- 误区一:忽视SE信号的时序——将SE当作普通信号处理,未进行时钟树综合,导致移位阶段数据不稳定。
- 误区二:扫描链过长——为了节省IO端口而将所有触发器串成一条超长链,导致测试时间呈线性增长,且布线拥塞严重。
- 误区三:跨时钟域处理不当——将不同时钟域的触发器混链,导致捕获阶段时序违例,ATPG覆盖率下降。
- 误区四:忽略异步复位/置位——带有异步复位端的触发器在扫描移位时可能被复位信号干扰,需要将复位信号在测试模式下强制为无效状态。
- 误区五:扫描端口未做隔离——SI/SO与功能引脚复用时,未考虑测试模式下的输入缓冲器状态,导致漏电流或逻辑冲突。
总结而言,扫描链设计是DFT流程中最基础也最关键的一环。设计者需要从触发器原理出发,理解SE信号的时序本质,合理规划扫描链拓扑结构,并严格验证端口复用逻辑。只有打好扫描链的硬件基础,后续的ATPG向量生成、故障仿真和良率分析才能顺利进行。建议在项目初期就制定扫描链设计规范,并在综合前完成扫描链的插入与验证,避免后期返工。