2. 扫描链(Scan Chain)原理:扫描链的结构、工作模式(shift/capture)、扫描触发器类型

好,咱们今天聊聊扫描链。这是DFT里最基础、也最核心的一块。说白了,扫描链就是给普通触发器装了个“后门”,让测试时能直接控制它们的状态。

我刚开始接触DFT时,觉得扫描链不就是把触发器串起来嘛,有什么难的?后来踩了不少坑才明白,这里面的门道多着呢。

2.1 扫描链的基本结构

先看结构。普通触发器只有数据输入D、时钟CK、输出Q。扫描触发器多了一个测试输入端——扫描输入SI,还有一个控制信号——扫描使能SE。

当SE=0时,触发器正常工作,D端数据进来。当SE=1时,触发器进入扫描模式,SI端的数据被捕获。多个这样的触发器串起来,就形成了扫描链。

我画个图帮你理解一下:

扫描链结构示意图 扫描输入 SI FF1 扫描触发器 组合逻辑 FF2 扫描触发器 组合逻辑 SO 扫描链路径(SE=1时) 时钟 CK 扫描使能 SE 扫描触发器 组合逻辑 扫描链路径

你看,FF1的Q端通过组合逻辑连到FF2的D端,这是正常路径。但扫描链走的是另一条路:FF1的Q直接连到FF2的SI端。这样测试时就能绕过组合逻辑,直接把数据灌进去。

2.2 两种工作模式:Shift 和 Capture

扫描链有两种模式,你得搞清楚它们的区别。

2.2.1 Shift 模式(移位模式)

Shift模式下,SE=1。每个时钟周期,数据从SI端进入,沿着扫描链一级一级往后传。就像一串珠子,你从一头往里塞,另一头就往外吐。

我举个例子。假设扫描链有1000个触发器,你想把一串测试向量“1010...011”灌进去。那就需要1000个时钟周期,一个bit一个bit地移进去。

Shift 模式的关键点:

  • SE=1,所有触发器都工作在扫描模式
  • 每个时钟周期,数据沿扫描链移动一位
  • 用于把测试向量灌入,或者把响应结果移出
  • 移入和移出可以同时进行——这叫“流水线操作”

嗯,这里要注意。Shift模式下,组合逻辑的输出会被忽略。因为SE=1时,触发器只认SI端的数据。所以组合逻辑里即使有毛刺,也不会影响扫描链的移位。

2.2.2 Capture 模式(捕获模式)

Capture模式就不同了。SE=0,触发器恢复正常功能。这时候,组合逻辑的输出会被捕获到触发器里。

Capture模式通常只持续一个时钟周期。为什么?因为你要捕获的是组合逻辑在特定输入下的响应,而不是多个周期累积的结果。

我的经验:Capture周期数要严格控制。我曾经在一个项目里,Capture给了两个时钟周期,结果ATPG工具报了一大堆时序违例。后来才发现,多出来的那个周期让组合逻辑的路径多了一级,时序分析全乱了。

2.3 扫描触发器的类型

扫描触发器不是只有一种。常见的类型有这几种:

类型 结构特点 面积开销 时序影响 适用场景
Muxed-D D端前加一个2选1MUX 约10-15% 增加D端延迟 最常用,通用性强
LSSD 双锁存器结构,电平敏感 约20-30% 无MUX延迟 高性能设计,对时序要求高
Clocked-Scan 独立扫描时钟 约15-20% 需要额外时钟树 低功耗设计,时钟可关断

2.3.1 Muxed-D 扫描触发器

这是最常用的类型。说白了就是在普通触发器的D端前面加一个MUX。MUX的两个输入分别是功能数据D和扫描数据SI,由SE控制选择。

优点是结构简单,面积开销小。缺点是MUX会增加D端的延迟,对时序有影响。

避坑指南:我曾经在一个高速设计中,用了Muxed-D扫描触发器。结果发现关键路径的时序怎么也收不拢。查了半天,原来是MUX的延迟把setup时间吃掉了。后来换成了LSSD,问题才解决。

2.3.2 LSSD(Level-Sensitive Scan Design)

LSSD是IBM搞出来的。它用两个锁存器代替一个触发器,对电平敏感而不是边沿敏感。

LSSD的好处是没有MUX,所以D端没有额外延迟。但面积开销大,而且需要两相不交叠时钟。

我个人觉得,LSSD适合那种对性能要求极高的设计。普通设计用Muxed-D就够了,没必要多花面积。

2.3.3 Clocked-Scan 扫描触发器

这种类型给扫描链单独配了一个时钟。功能时钟和扫描时钟是分开的。

好处是扫描时可以关掉功能时钟,省电。坏处是需要多一个时钟树,布局布线更复杂。

我记得有个低功耗项目,客户要求待机电流不能超过1μA。我们就是用Clocked-Scan,测试时只开扫描时钟,功能时钟全关掉,才把功耗压下来。

2.4 扫描链的时序约束

扫描链不是随便连的。时序约束必须做好。

// 扫描链时序约束示例
// Shift 模式:扫描时钟周期
create_clock -name scan_clk -period 100 [get_ports scan_clk]

// 扫描输入延迟
set_input_delay -clock scan_clk -max 10 [get_ports scan_in]
set_input_delay -clock scan_clk -min 2 [get_ports scan_in]

// 扫描输出延迟
set_output_delay -clock scan_clk -max 10 [get_ports scan_out]
set_output_delay -clock scan_clk -min 2 [get_ports scan_out]

// 扫描使能信号
set_case_analysis 1 [get_ports scan_enable]

你看,Shift模式下,扫描时钟周期一般设得比功能时钟宽松。因为扫描链很长,走线延迟大,周期太紧容易出时序问题。

我的习惯:扫描时钟周期我一般设成功能时钟周期的2-3倍。这样Shift时数据能稳定传输,Capture时又能保证组合逻辑的时序。两全其美。

2.5 扫描链的常见问题

做扫描链这么多年,我遇到过不少坑。挑几个典型的说说:

  • 扫描链断裂:触发器之间连线断了,或者SI/Q端接错了。ATPG时会报大量X态。
  • 时钟域问题:不同时钟域的触发器串在一起,跨时钟域路径没处理好,Capture时出现亚稳态。
  • 扫描使能信号歪斜:SE信号到达各触发器的时间不一致,导致Shift时数据错位。
  • 扫描链长度不均:有的链1000个触发器,有的链10000个。测试时间被最长的链拖死。

避坑指南:我曾经在一个项目里,扫描链测试死活过不去。查了三天,最后发现是SE信号在时钟树上的延迟太大。Shift模式下,SE应该在时钟沿之前稳定下来,结果它晚到了,导致数据没移进去。后来加了SE的时钟树平衡,问题才解决。

嗯,扫描链的原理大概就这些。结构上就是触发器串起来,模式上就是Shift和Capture来回切换,触发器类型根据设计需求选。把这些搞清楚了,后面做ATPG、做测试诊断,心里就有底了。

可可精品资料库