SCAN用于检测芯片逻辑功能是否正确。DFT设计时,先使用DesignCompiler插入ScanChain,再利用ATPG(Automatic Test Pattern Generation)自动生成SCAN测试向量。SCAN测试时,先进入Scan Shift模式,ATE将pattern加载到寄存器上,再通过Scan Capture模式,将结果捕捉。再进入下次Shift模式时,将结果输出到ATE进行比较。 ———————————————— 解释一下这段话
时间: 2025-08-01 14:28:33 浏览: 15
<think>我们正在讨论DFT设计中的SCAN测试流程,包括DesignCompiler插入ScanChain、ATPG生成测试向量、ATE加载pattern及结果比较。根据用户提供的引用内容,特别是引用[1][2][3],我们可以构建一个详细的工作流程。引用[1]提到ATPG是DFTScan流程中的关键技术,用于生成测试向量以检测半导体设计中的故障。引用[2]详细介绍了扫描测试(ATPG)与边界扫描的区别,并说明扫描测试是针对内部标准单元逻辑的测试,需要将内部的触发器替换为带SCAN功能的触发器。引用[3]则简要描述了SCAN测试的基本操作:通过控制Scan-En信号来切换正常工作模式和测试模式,并利用移位寄存器链来输入测试数据和捕获输出。因此,我们可以将整个SCAN测试流程分为以下几个步骤:1.设计准备:在RTL设计阶段,设计人员需要为DFT做好准备,比如确保设计中所有时序单元(触发器)都是可控制的(如具有异步复位或置位),并且设计是同步设计。2.ScanChain插入:使用DesignCompiler等综合工具,将普通的触发器替换为带Scan功能的触发器(ScanFlip-Flop),并将这些触发器连接成一条或多条ScanChain。每条ScanChain有一个Scan-In输入和一个Scan-Out输出。3.ATPG(自动测试向量生成):利用ATPG工具(如TetraMAX、TestKompress等)生成测试向量(testpatterns)。这些向量用于检测芯片中的制造缺陷,如stuck-at故障、transition故障等。4.仿真验证:在将测试向量交给ATE之前,需要进行仿真验证,确保这些向量在模拟故障时能够正确捕获故障。5.ATE测试:在芯片制造完成后,使用自动测试设备(ATE)加载测试向量。ATE将测试向量通过ScanChain输入到芯片内部,并捕获输出响应,然后与预期响应进行比较,以判断芯片是否存在制造缺陷。下面详细说明每个步骤:###1.ScanChain插入(使用DesignCompiler)在综合阶段,使用DesignCompiler的DFT工具插入ScanChain。具体步骤包括:-**替换触发器**:将设计中的标准触发器替换为具有Scan功能的触发器(例如MUX-SCAN触发器)。这种触发器在正常功能模式下,数据从D端输入;在测试模式下,数据从Scan-In端输入。-**连接ScanChain**:将多个Scan触发器串联起来,形成一条或多条ScanChain。每条ScanChain形成一个长的移位寄存器。连接时需要考虑物理布局,以最小化布线长度和延迟。-**添加测试控制信号**:需要添加以下测试控制信号:-**ScanEnable(SE)**:控制触发器是工作在正常模式(SE=0)还是测试模式(SE=1)。-**ScanIn(SI)**:测试数据输入。-**ScanOut(SO)**:测试数据输出。插入ScanChain后,设计除了原有的功能端口外,还增加了测试端口(SE,SI,SO等)。###2.ATPG生成测试向量ATPG工具根据插入ScanChain后的网表自动生成测试向量。流程如下:-**故障建模**:首先对电路进行故障建模,常用的有固定型故障(stuck-atfault,如固定为0或固定为1)。-**生成测试向量**:ATPG工具通过算法(如D算法、PODEM算法)生成能够激活故障并将故障效应传播到可观测点(ScanChain的ScanOut端)的测试向量。-**测试向量格式**:生成的测试向量通常以STIL(StandardTestInterfaceLanguage)或WGL(WaveformGenerationLanguage)格式存储,这些格式可以被ATE读取。一个测试向量通常包含两部分:-**Shift-in部分**:在SE=1(测试模式)下,将测试向量通过ScanIn端口移位输入到ScanChain中。-**Capture部分**:将SE置为0(功能模式)一个时钟周期,使电路根据ScanChain中的值进行正常操作,捕获组合逻辑的输出到触发器中。-**Shift-out部分**:再将SE置为1,将捕获的数据通过ScanChain移位输出,同时移入下一个测试向量。###3.ATE加载测试向量及结果比较在芯片测试阶段,ATE执行以下步骤:1.**初始化**:将芯片置于测试模式(SE=1)。2.**加载测试向量**:-将测试向量通过ATE的通道连接到芯片的ScanIn端口。-在测试时钟的控制下,将测试向量逐位移入ScanChain(移位次数等于ScanChain的长度)。3.**捕获响应**:-置SE=0,使芯片在功能模式下运行一个时钟周期,此时组合逻辑根据ScanChain中的输入值计算出结果,并捕获到ScanChain的触发器中。4.**移出响应**:-置SE=1,将捕获的响应数据通过ScanChain逐位移出到ScanOut端口,同时移入下一个测试向量。-ATE在ScanOut端口捕获响应数据。5.**结果比较**:-ATE将捕获的响应数据与ATPG生成的预期响应(黄金响应)进行比较。-如果有任何不一致,则记录故障。整个流程如下图所示(以一条ScanChain为例):```测试向量1:[v1,v2,...,vn](n为ScanChain长度)步骤:1.移位:将v1~vn通过SI在n个时钟周期内移入ScanChain(同时移出无关数据)2.捕获:SE=0,一个功能时钟周期,将组合逻辑输出捕获到触发器3.移位:SE=1,用n个时钟周期将捕获的数据移出(同时移入下一个测试向量v1'~vn')4.比较:ATE比较移出的数据与预期响应```注意:为了提高测试效率,通常采用“流水线”方式,即在移出当前测试向量的响应时,同时移入下一个测试向量。###与边界扫描(BoundaryScan)的区别引用[2]指出,边界扫描(BoundaryScan)测试目标是芯片的I/O引脚,利用JTAG接口互连,主要用于板级测试。而扫描测试(ATPG)针对的是芯片内部的标准逻辑单元(std-logic)。###总结整个SCAN测试流程涉及多个工具和步骤:-**DesignCompiler**:插入ScanChain,生成带Scan的设计网表。-**ATPG工具**:生成测试向量和预期响应。-**ATE设备**:在芯片测试时加载测试向量并比较响应。通过这个流程,可以在芯片制造后快速检测出制造缺陷,提高芯片良率。下面用一段伪代码描述ATE执行一个测试向量的过程:```python#假设scanchain长度为ndefapply_pattern(ATE,pattern,expected_response):#设置测试模式ATE.set_pin("SE",1)#移位输入测试向量(同时移出无关数据)foriinrange(n):ATE.set_pin("SI",pattern[i])ATE.pulse_clock()#施加时钟,上升沿移位#注意:此时移出的数据是上一次捕获的响应(第一次移位时移出的是未知值,可忽略)#捕获周期ATE.set_pin("SE",0)#进入功能模式ATE.pulse_clock()#功能时钟,捕获组合逻辑输出#移位输出响应(同时移入下一个测试向量的第一位)ATE.set_pin("SE",1)response=[]foriinrange(n):#先设置下一个测试向量的当前位(如果是最后一个向量则不需要)ifi<len(next_pattern):ATE.set_pin("SI",next_pattern[i])#施加时钟,移出响应ATE.pulse_clock()#在时钟后读取SOresponse.append(ATE.get_pin("SO"))#比较响应ifresponse!=expected_response:report_fault()```注意:实际ATE操作中,移入和移出是同时进行的,因此效率较高。§§相关问题§§1.在插入ScanChain时,如何优化ScanChain的长度和数量以提高测试效率?2.ATPG工具生成测试向量时,如何衡量测试覆盖率?如何提高覆盖率?3.除了stuck-at故障,ATPG还能检测哪些类型的故障?4.在ATE测试中,如何解决测试时间过长的问题?5.扫描测试对芯片性能(如时序、面积、功耗)有何影响?</think>### DFT设计中SCAN测试工作流程详解
#### 1. **Design Compiler插入Scan Chain**
在RTL综合阶段,使用Synopsys Design Compiler进行扫描链插入:
- **触发器替换**:将普通触发器替换为带SCAN功能的多路选择器型触发器(MUX-DFF)[^2]
- **扫描链连接**:将触发器串联成扫描链,每条链有独立SI(Scan-In)和SO(Scan-Out)端口
- **测试控制信号**:添加全局扫描使能信号(Scan Enable, SE)
- **设计规则检查**:确保所有时序单元可控可观测,无组合逻辑环路[^3]
```mermaid
flowchart TB
A[RTL设计] --> B[Design Compiler综合]
B --> C[扫描链插入]
C --> D[扫描触发器替换]
D --> E[扫描链连接]
E --> F[门级网表输出]
```
#### 2. **ATPG生成测试向量**
使用ATPG工具(如TetraMAX)生成测试向量:
- **故障建模**:采用固定故障模型(stuck-at fault model)
- **向量生成**:
- **移位阶段**:SE=1,测试数据通过SI移入
- **捕获阶段**:SE=0,系统时钟捕获组合逻辑响应
- **移出阶段**:SE=1,响应数据通过SO移出[^3]
- **测试压缩**:采用嵌入式确定性测试(EDT)减少向量数量[^1]
#### 3. **ATE加载Pattern及测试**
自动测试设备(ATE)执行流程:
1. **初始化**:置SE=1进入扫描模式
2. **加载向量**:
```python
# 伪代码示例
for pattern in test_patterns:
ate.shift_in(SI, pattern.input) # 移位输入
ate.pulse(SE=0) # 捕获响应
ate.shift_out(SO) # 移出结果
ate.compare(expected_response) # 结果比对
```
3. **故障诊断**:记录SO输出与期望值不匹配的故障位置[^2]
#### 4. **全流程协同关系**
```mermaid
flowchart LR
A[Design Compiler] -->|插入扫描链| B[门级网表]
B --> C[ATPG工具]
C -->|生成| D[测试向量]
D --> E[ATE设备]
E -->|加载| F[芯片测试]
F -->|反馈| G[良率分析]
```
#### 关键技术与工具关系
| 技术环节 | 主要工具 | 输出结果 |
|----------------|--------------------------|-------------------|
| 扫描链插入 | Design Compiler | 带SCAN的门级网表 |
| ATPG向量生成 | TetraMAX/TestKompress | STIL测试向量 |
| 测试执行 | Advantest/Teradyne ATE | 故障诊断报告 |
#### 测试效率优化技术
- **并行扫描链**:多链并行缩短测试时间
- **X-屏蔽**:屏蔽未知态(X-state)提高测试准确性
- **时钟门控**:动态控制时钟域降低功耗[^1]
阅读全文
相关推荐


















