【芯片测试】:6. 向量、Sequencer 指令与高速串行 IO
Pattern 详解:向量、Sequencer 指令与高速串行 IO
系列:Advantest V93000 SmarTest 8 核心概念解析|第 6 篇(共 8 篇)
适合读者:需要理解数字测试激励数据结构的工程师
前言
Pattern(模式)是 SmarTest 测试中最"庞大"的数据单元,可能包含数亿个向量,占据数 GB 的存储空间。理解 Pattern 的结构,不仅关系到写出正确的测试,更关系到如何在有限的测试机内存中高效组织数据。
本篇覆盖三个层次:
- 基础:Pattern 的文件结构、Vector 的格式、Signal Group
- 存储:向量内存的硬件组织与优化(Memory Pooling)
- 高级:SOC 多核测试的 Virtual Pattern,以及高速串行接口的 Link Scale / HSIO
一、Pattern 的基本结构
一个 Pattern 是**向量序列(vectors)和Sequencer 指令(sequencer instructions)**的组合,存储为.pat文件(本质是 zip 压缩包,包含多个子文件):
pattern_file.pat (zip archive) ├── program ← Sequencer 指令(循环、跳转、Action 锚点等) ├── vectors ← 向量数据(状态字符阵列) ├── comments ← 注释(可选) └── metadata ← 元数据(可选)Vector(向量)
Vector 是一个状态字符的线性数组,每个位置对应一个 DUT 信号(或信号组)在当前 device cycle 的波形。
向量示例(5个信号,向量编号31245): 信号: CLK DATA0 DATA1 RESETn IO_OUT 向量: 1 0 1 H X 含义:CLK 驱动高,DATA0 驱动低,DATA1 驱动高, RESETn 输出期望高,IO_OUT 不关心(don't care)每个状态字符(如0、1、H、L、X、Z)都在 wavetable 中有对应的波形定义(参见第 4 篇)。每个向量中,每个信号必须有且仅有一个状态字符。
Pattern 可以用在哪里
- 直接绑定在 Test Suite 上:最简单用法,一个 test suite 直接指定一个 pattern
- 通过 Operating Sequence 调用:多个 pattern 和 action 按时序编排后,由 test suite 使用 operating sequence
二、Signal Group in Pattern:批量广播
什么是 Signal Group
Signal Group 允许把多个拥有相同波形需求的信号合并成一个"组",在 pattern 中只写一列状态字符,SmarTest 自动将该状态字符广播给组内所有信号。
适用场景
场景 1:多核 SOC 中的相同 IP 核
例如一个 DUT 上有 16 个 CPU core,每个 core 的 CLK 信号都需要相同的时钟波形。使用 signal groupIO07_CPU,将 16 个 CLK 信号合并,pattern 中只写一列。
场景 2:多个相同功能模块
PCIe 接收信号组RXp3包含 8 路 PCIe 信号,测试时发送相同激励,使用 signal group 可以大幅减少 pattern 的列数和 binding 时间。
内存的注意点
虽然一个 signal group 在 pattern 中看起来只有一列,但底层每个信号仍然有自己独立的 pogo pin 和向量内存。数据在 binding 时被复制到每个信号各自的内存中。如果要避免这种内存复制,需要使用Pin Scale Intra-site Memory Sharing(同一 channel group 内存共享)。
三、Sequencer 指令:控制 Pattern 执行流程
Pattern 不是线性播放的,Sequencer 指令可以在向量中插入控制流:
| 指令类别 | 功能 |
|---|---|
| Loop / Repeat | 重复执行一段向量 N 次 |
| GenVec | 生成并执行 N 个向量 |
| Call / Jump | 跳转到 pattern 的另一处 |
| MatchLoop | 循环执行直到 DUT 响应匹配期望值(动态等待) |
| BreakPoint | 在并行 pattern 中标记同步点;配合 break vector 使用 |
| Action Anchor | 在特定向量位置触发一个 Action(仪器操作) |
| CTIM / CLEV | 在 pattern 执行中途切换 timing set 或 level set |
MatchLoop是一个特别有用的指令,常用于:
- 等待 DUT 完成内部初始化(busy-wait)
- 等待 DUT 输出特定响应后才继续
四、向量内存的硬件组织
数字卡的物理结构
以 PS5000 为例,一张卡有多个逻辑板(Logical Board),每个逻辑板对应 DUT board 上一个 pogo block(16 个 pogo pin)。每个逻辑板内有两个测试处理器(Test Processor),每个处理器控制一个8-channel group的内存。
PS5000 卡(单张) ├── Logical Board 1 │ ├── Test Processor A → 8-channel group(CH01~CH08) │ └── Test Processor B → 8-channel group(CH09~CH16) ├── Logical Board 2 │ ├── ...关键约束:内存共享和 pooling 只能发生在同一个 channel group 内(PS5000 Xtreme Pooling 是例外)。
Pin Scale Memory Pooling:自动利用碎片内存
不同信号对向量内存的需求差异极大:
- 深扫描信号(Deep Scan):通过高速串行接口传输大量扫描数据,需要 GB 级内存
- 控制信号(CLK、RESET、SYNC 等):只需要少量向量内存
这种不均衡导致大量内存碎片。Memory Pooling机制自动利用"富余"信号的空闲内存来存储"缺口"信号的向量数据:
Channel Group(8 channels) CH01: Signal S01(需要 48 MiB,已许可 64 MiB,剩余 16 MiB) CH06: Signal S07(需要 62 MiB,已许可 112 MiB,剩余 50 MiB) ↑ S02 需要 110 MiB,但自身只有 64 MiB 许可 → Memory Pooling 自动将 S02 的额外数据存入 S07 的剩余空间 → S02 可以访问 S07 的"捐出"内存,无需物理搬运Memory Pooling 是完全透明的,无需修改测试程序或 pattern,系统自动完成。
约束:
- Donor 和 Recipient 必须在同一个 4/8-channel group 内
- Recipient 的许可内存级别必须 ≥ Donor(只能向"上捐")
- 不支持级联(A 捐给 B,B 无法再捐给 C)
Xtreme Memory Pooling(PS5000、PSMLS B 专属)
当深扫描信号需要的数据超过整个 channel group 的容量时,Xtreme Memory Pooling允许跨 channel group 转移数据:
Channel Group A(内存空闲) Channel Group B(深扫描,内存饱和) ↓ ↑ 存储 B 的向量数据 →→→ 运行时复制到 B →→→ 执行完释放 →→→ 接收下一批这实现了"流水线式"的数据供给,使得深扫描信号可以执行远超单个 channel group 容量的向量序列。
五、Virtual Pattern:SOC 多核测试的抽象
随着 SOC 的复杂度增加,DUT 内部有多个 IP 核(Core A、B、C…),每个核有自己的接口信号。但这些核的信号不一定直接连接到测试机的 pogo pin——它们可能是 DUT 内部路由,只能通过扫描链间接访问。
SmarTest 引入Virtual Signal 和 Virtual Pattern来处理这种情况。
三个层次的信号
| 层次 | 名称 | 描述 |
|---|---|---|
| 物理层 | DUT Pin / Pogo Pin | 实际与测试机接触的管脚 |
| 逻辑层 | DUT Signal | 测试程序中使用的逻辑信号名(通过.dbd映射到 pogo pin) |
| 虚拟层 | Virtual Signal | IP Core 的内部信号,不直接连接 pogo pin |
Virtual Vector 与 Virtual Pattern
Virtual Vector:m 个 virtual signal 在一个 core cycle 的状态字符数组(类比 DUT 的 vector)
Virtual Pattern:一系列 virtual vector 的序列,描述某个 IP Core 的激励或期望响应(类比 DUT 的 parallel pattern)
例如一个有 5 个 IP 核(A、B、C、D、E)的 SOC:
Core A: Asig0 Asig1 虚拟向量序列 → Virtual Pattern A Core B: Bsig0 Bsig1 Bsig2 ... Bsig7 虚拟向量序列 → Virtual Pattern B Core C: Csig0 Csig1 ... Csig4 虚拟向量序列 → Virtual Pattern C ...(D、E 类似)每个 IP Core 有自己独立的 Virtual Pattern,它们捕获了该 Core 在功能测试中应该发送和接收的完整数据序列。
重要限制
- Virtual Pattern不能是 site-specific(不支持不同 site 发不同数据)
- SmarTest 8 的
.pat文件原生支持 virtual pattern 格式 - Virtual Pattern 不通过标准 pogo pin 接口直接执行,而是由 Link Scale / HSIO 序列化后传输
六、Link Scale / HSIO:高速串行扫描
传统的 ATE 测试使用并行 pogo pin 接口传输向量数据。随着 DUT 数据量增加,并行接口的带宽和引脚资源不足,出现了通过**高速串行接口(HSIO)**传输扫描数据的方案——这就是Link Scale。
Link Scale 的架构
Link Scale 使用USB3或PCIe4这两种 HSIO 协议与 DUT 通信:
测试机 Link Scale 卡 ↓(USB3 或 PCIe4 高速串行链路) DUT 上的 DUT Scan Controller(DFT 组件) ↓(内部路由) 各 IP Core 的 Scan ChainDUT 上必须有一个DUT Scan Controller,它负责接收 HSIO 数据包,解包后将扫描数据路由到各个内部扫描链。
Link Scale HSIO Pattern
Link Scale HSIO Pattern 是在 Virtual Pattern 基础上,增加了序列化信息和 DUT Scan Controller 控制指令的扩展格式:
Link Scale HSIO Pattern = 序列化的 Virtual Pattern 数据 + (可选)DUT Scan Controller 控制指令一个 HSIO Pattern 可以包含多个 Virtual Pattern,或包含让 DUT Scan Controller 自动生成 Virtual Pattern 的指令(DUT 自生成模式)。
前向映射(Forward Mapping)
前向映射是将 Virtual Pattern 的状态字符序列化为 HSIO 比特流的过程,规则包括:
- 添加包头元信息(描述 pattern 结构)
- 将信号名称替换为 DUT 内部标识符
- 按 LSB/MSB 顺序、大端/小端字节序排列比特
Virtual Pattern A → [包头] [信号ID映射] [数据比特流] → USB3/PCIe4 传输 Virtual Pattern B → [包头] [信号ID映射] [数据比特流] ↗ (两个 pattern 可打包在同一个 HSIO 数据包中)后向映射(Backward Mapping)
DUT 响应的序列化输出需要被还原为与 Virtual Pattern 对应的数据结构,这个过程叫后向映射(Back Mapping):
DUT HSIO 输出流 → 反序列化 → 按信号分配的并行结构 → 标记失败周期结果有两种形式:
- Raw Result Data:直接从 HSIO 比特流中提取的原始失败比特
- Back-mapped Data:将失败比特映射回 Virtual Signal 的失败周期(更易于分析)
工具链分工
Link Scale 的前向/后向映射不是 SmarTest 功能,而是由第三方 EDA 工具完成(例如 Synopsys TestMAX ALE)。SmarTest 的职责是:
- 接受已序列化好的 HSIO Pattern
- 通过 Link Scale 卡物理传输
- 收集 DUT 的 HSIO 响应输出
- 将 raw 结果或 back-mapped 结果提供给测试方法
七、Pattern 相关的数量限制速查
| 限制项 | 数值 |
|---|---|
| 每个 wavetable 最大波形数 | 256 |
| Pattern 文件大小 | 无硬性上限(受内存约束) |
| 向量数必须是 X-Mode 的倍数 | X8 模式 → 向量数必须是 8 的倍数 |
| 每个 tester cycle 最大 drive/receive edge 数(X1,PS1600/PS5000) | 8 |
| Signal Group 内信号数 | 无硬性上限 |
总结
| 概念 | 一句话 | 关键点 |
|---|---|---|
| Pattern | 向量序列 + sequencer 指令 | .pat是 zip 文件,包含 program/vectors 等 |
| Vector | 所有信号在一个 device cycle 的状态字符数组 | 每信号一个状态字符 |
| Signal Group | 相同波形信号的批量广播 | 省列宽,但底层仍有独立内存 |
| Memory Pooling | 利用闲置内存为高需求信号服务 | 自动透明,跨 channel group 需 Xtreme Pooling(仅 PS5000、PSMLS B) |
| Virtual Pattern | 针对 IP Core 内部信号的抽象向量序列 | 不直接连 pogo pin,需序列化传输 |
| Link Scale / HSIO | 通过 USB3/PCIe4 串行传输扫描数据 | DUT 需要 DUT Scan Controller;前/后向映射由 EDA 工具完成 |
下一篇将介绍Action 与 Operating Sequence,讲清楚仪器动作的生命周期,以及如何把 Pattern 和 Action 按时序编排在一起。
