2. STDF文件基础
STDF(Standard Test Data Format)是半导体测试行业最通用的数据交换格式,由Teradyne提出并逐步成为事实标准。它把ATE(自动测试设备)在晶圆测试(Wafer Sort)和成品测试(Final Test)中产生的海量结果,压缩成一种紧凑、可流式解析的二进制文件。理解STDF的底层结构,是后续做Bin分析、良率监控和自动化报表的第一块基石。
一、STDF标准概述与设计哲学
STDF的核心设计目标有三个:紧凑、可流式读取、可扩展。它不采用XML或JSON这类文本格式,而是用固定头部加变长记录的方式存储,使得一个包含数百万颗芯片测试结果的文件也能被逐条读取,而不必一次性载入内存。
STDF文件由一系列记录(Record)顺序组成,每条记录以4字节开头:2字节记录长度(REC_LEN)、1字节记录类型(REC_TYP)、1字节记录子类型(REC_SUB)。这种“长度+类型+子类型”的头部设计,让解析器可以跳过不认识的记录,从而实现向前兼容。
关键点:STDF是二进制流,不是文本文件。用记事本打开会看到乱码,必须用专用解析器或十六进制工具查看。
二、文件结构与记录类型
一个典型的STDF文件按逻辑分为若干段:文件头、测试程序信息、晶圆/批次信息、测试站点信息、每个芯片的测试结果、以及文件尾。每段由不同记录类型承载。
STDF记录类型用REC_TYP表示大类,REC_SUB表示子类。常见记录如下表所示:
| 记录类型 | REC_TYP | REC_SUB | 作用 |
|---|---|---|---|
| FAR | 0 | 10 | 文件属性记录,标识STDF版本 |
| ATR | 0 | 20 | 审计跟踪记录,记录修改历史 |
| MIR | 1 | 10 | 主信息记录,含批次、程序名、站点 |
| MRR | 1 | 20 | 主结果记录,文件结束标志 |
| PCR | 1 | 30 | 部件计数记录,统计各Bin数量 |
| HBR | 1 | 40 | 硬件Bin记录,定义硬件Bin |
| SBR | 1 | 50 | 软件Bin记录,定义软件Bin |
| PMR | 1 | 60 | 引脚映射记录 |
| PIR | 5 | 10 | 部件信息记录,开始一颗芯片 |
| PRR | 5 | 20 | 部件结果记录,结束一颗芯片 |
| PTR | 15 | 10 | 参数测试记录,含测试值 |
| MPR | 15 | 15 | 多结果参数记录 |
| TSR | 10 | 30 | 测试概要记录 |
其中,PIR/PRR成对出现,包裹一颗芯片的所有测试项;PTR记录每个参数的实测值、上下限和单位。解析时通常按“PIR → 若干PTR/MPR → PRR”的循环来提取每颗芯片的数据。
三、字节序与版本差异
STDF默认使用小端字节序(Little-Endian)。这意味着一个2字节整数0x1234在文件中存储为0x34、0x12。解析时如果按大端读取,所有数值都会错乱。Python的struct模块中应使用<前缀,例如struct.unpack('<H', data)。
STDF主要有两个版本:V4和V4-2007。V4是经典版本,字段定义稳定;V4-2007增加了部分记录和字段,例如更丰富的测试条件信息。FAR记录中的STDF_VER字段标识版本号,解析器应据此决定字段布局。
# Python 读取 STDF 记录头示例
import struct
with open('test.stdf', 'rb') as f:
header = f.read(4)
rec_len, rec_typ, rec_sub = struct.unpack('<HBB', header)
print(f'长度={rec_len}, 类型={rec_typ}, 子类型={rec_sub}')
body = f.read(rec_len)
常见误区:不要假设所有STDF文件都是小端。极少数旧设备或转换工具可能生成大端文件,解析前应先检查FAR记录中的字节序标志,或通过已知字段值做校验。
四、常见文件命名规范与场景
在量产环境中,STDF文件通常由ATE自动生成,命名遵循一定规范,便于追溯和自动化处理。常见命名模式如下:
- 批次_晶圆_站点_时间.stdf:如
LOT123_W01_S1_20240501.stdf - 产品名_工序_批次_序号.stdf:如
ABC123_FT_LOT456_001.stdf - 设备ID_日期_流水号.stdf:如
ATE07_20240501_0001.stdf
命名中通常包含批次号(Lot)、晶圆号(Wafer)、测试站点(Site)、工序(FT/WS)和时间戳。自动化脚本常按文件名中的批次和晶圆号建立索引,再解析文件内容做Bin统计。
实操建议:在解析前先建立文件清单,记录文件名、大小、修改时间和FAR版本号。对于大批量文件,建议先按批次分组,再并行解析,避免单线程处理数万个文件时耗时过长。
五、复盘与检查清单
掌握STDF基础后,建议用以下清单自查:
- 是否确认了文件的字节序?
- 是否读取了FAR记录中的版本号?
- 是否按PIR/PTR/PRR循环正确提取每颗芯片?
- 是否处理了未知记录类型的跳过逻辑?
- 是否校验了文件尾MRR记录的存在?
这些检查点能帮助你在后续Bin分析和良率监控中,避免因格式理解偏差导致的数据错误。STDF的二进制特性决定了“先解析、后分析”的基本流程,而记录类型和字节序正是这条流程中最关键的两个锚点。