ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SmarTest 8 中 Data Logging 机制与 STDF 解析实践

SmarTest 8 中 Data Logging 机制与 STDF 解析实践 做芯片测试这行只要你跟过产线、调过测试程序就一定绕不开 Data Logging。SmarTest 8 作为 V93000 测试机的上层软件平台最让新人头疼的往往不是测试项本身怎么写而是“测试跑完了数据到底去哪了、格式对不对、能不能直接拿来分析”。这篇东西我不讲手册里的流水账直接从运行机制讲起把 Data Logging 从触发、采集、格式化到落盘的完整链路拆开再给你一套可以直接抄作业的配置流程和解析脚本。适合刚接手 SmarTest 8 的测试程序工程师也适合被良率分析追着要数据的产线同事。1. Data Logging 到底在记录什么整体运行机制拆解1.1 从一次测试到一条记录Datalog 的数据源头先明确一个概念在 SmarTest 8 里Data Logging 不是一个独立悬空的“录数据”开关它是从测试程序执行结果里抽取数据的一个环节。芯片测试的核心是“向 DUT 管脚施加激励然后测量响应”每个测量动作完成后测试机内部会生成一个测试结果。这个结果至少包含三块信息测了哪个测试项Test Name / Test Number、测的是哪个管脚Pin以及测量值和判定结果Pass / Fail / 具体参数值。这一块我强烈建议你把它当成“数据模型”来理解。SmarTest 8 的测试结果不是简单的一行字符串它是有结构的记录对象。比如一个电压测试项内部会有一个 result 对象里面挂着测试名、上下限、单位、实测值、判定标志、时间戳甚至还有这个结果是在哪个 Site同一个测试板上的第几个 DUT上测出来的。Data Logging 干的事就是把这些内存里散落的结果对象按照你配置的格式逐条抽取出来写入外部文件。很多新人会误以为“只要测试跑了Datalog 就一定自动有”实际上并不是。SmarTest 8 里的 Datalog 是一个显式启用的机制。你需要告诉系统要不要记录、记录哪些测试、用什么格式写、写到哪个文件。这就是为什么同样一套测试程序有的人跑完能拿到完整的 STDF 数据有的人却一个日志文件都找不到多半是 Datalog 配置环节没打通。1.2 数据流管线采集、判定、格式化、落盘我习惯把这套机制拆成四段流水线结果采集、判定过滤、格式封装、文件落盘。第一段是结果采集。测试程序里执行了测量动作比如调用了测量函数产生了一个原始测量结果。这里要特别注意测量结果不一定都进 Datalog——SmarTest 8 里你可以通过配置来决定是“所有测试都记录”还是“只记录失败项”或“按测试项类型选择性记录”。最常见的配置是 Fail Only也就是只在 fail 的时候把数据记下来这样文件小、分析快但代价是 pass 的良品数据丢了后续做分布统计就没依据。所以我个人的建议是调试阶段记录 All Tests量产阶段再按需改成 Fail 或按 Bin 记录。第二段是判定过滤。测量结果出来后系统会把实测值和上下限做比较打上 Pass / Fail 的标签同时把这个标签跟 Bin 映射关联起来。这一步看似简单实际是后期分析最容易出问题的部位——比如你 Datalog 里看到了 fail但 Bin 却是好的或者反过来大概率不是 Datalog 的问题而是测试程序里 limit 设置和 Bin 判断逻辑不一致。记录一下这个现象后面排查章节我会专门说。第三段是格式封装。SmarTest 8 支持把数据封装成不同格式最常见的是 STDF、XML、Text。STDF 是半导体测试行业的事实标准格式工厂的良率系统、数据分析软件普遍认它XML 和 Text 则适合工程阶段人工查看和脚本处理。封装过程会按照格式规范把第一步的结果对象转成字节流或文本节点。第四段是文件落盘。格式化好的数据并不会立刻写进磁盘通常先进内存缓冲到达一定量或者测试批次结束时统一 flush。这里就涉及一个很重要的参数Datalog 文件路径以及文件名规则。SmarTest 8 允许你在文件名里嵌入变量比如测试程序名、日期、批次号这样每个 lot 跑完就能自动生成独立文件避免互相覆盖。文件名配置不合理是产线上常见的“数据找不到”的元凶之一。1.3 为什么 SmarTest 8 要把 Datalog 做成独立机制我经常被新同事问为什么不直接让测试程序 printf 打印结果非要搞一套 Datalog 机制原因在于芯片测试对性能和一致性的要求。先说性能。量产测试一个 DUT 可能包含几百上千个测试项如果每条结果都同步写磁盘测试节拍会被磁盘 IO 卡死。SmarTest 8 把 Datalog 做成异步管线测量结果先进入内存队列后台线程负责格式化、缓冲、批量写入测试主流程不会等磁盘。这个设计在测试时间压缩得很紧的量产阶段尤其重要。再说一致性。芯片测试的数据要能追溯、能复现、能进统计系统。printf 打出来的散乱文本没有固定结构后期脚本解析要写一堆正则还容易漏数据。Datalog 机制强制规定了记录结构保证每次跑出来的数据字段一致分析工具可以直接消费。理解这一点你就明白为什么配置 Datalog 时系统会反复问“格式、站点、记录范围”——它不是给你添麻烦而是在帮你建立一条从测试机到良率系统的标准化通道。2. 关键配置与格式选择STDF、XML 还是 Text2.1 三种输出格式的取舍格式选择这个问题几乎每次带新人都会遇到。先说结论真正进量产分析我首选 STDF工程调试阶段用 XML 或 Text 都行主要看你后续用什么脚本工具。STDFStandard Test Data Format是行业标准二进制格式里面用记录类型做区分比如 PTRParametric Test Record存参数测试结果PRRProgram Result Record存程序级结果MRRMaster Result Record存批次结束信息。它的好处是信息完整、解析性能高、能被几乎所有商用良率分析软件直接读取坏处是二进制格式不可读想看一眼内容必须用解析工具。XML 的优势是结构清晰、标签语义化测试项名称、上下限、测试值、判定结果一眼就能对得上。适合调程序的时候打开文件人工检查“这个测试项为什么 fail”。Text 最灵活SmarTest 8 里可以自定义输出字段的顺序和内容也最小巧适合产线快速巡检时用。但 Text 有个天然问题没有强制的结构约束字段一多就容易对不齐解析脚本稍微写得不严谨就出错。我的经验是开发测试程序时先用 Text 或 XML 快速验证 Datalog 逻辑确认每一条记录都对等程序稳定、要开始小批量试产了再切到 STDF把数据喂给良率分析系统。不要一上来就在调试阶段用 STDF不然每次想肉眼看一下数据都得专门写脚本效率很低。2.2 记录粒度与多 Site 数据的处理这一节是 Datalog 配置里比较容易翻车的地方。记录粒度指的是你按什么维度记录数据SmarTest 8 里常见的有按测试项记录和按管脚记录。比如一个电源电压测试项你关心的是这一个测试项整体结果那按 Test 粒度就够了如果你要看到比如 32 个 pin 各自的电压值那就得开 Per Pin 级别的记录。粒度开得越细数据量增长得越快文件体积可能差出几十倍这个账一定要先算清楚。多 Site多工位并行测试的数据处理更要小心。量产时一片测试板上经常同时放 4 个、8 个甚至更多 DUT一次测试动作会同时产生多份数据。Datalog 里的每个记录必须带 Site Number否则分析端根本分不清哪条是哪颗芯片的数据。SmarTest 8 的配置界面里一般会有 Site 相关的过滤选项你可以选择只记录部分 Site 的数据——调试单站问题时非常有用。实际产线上我见过一个典型的错误配置 Datalog 时没有勾选“按 Site 拆分文件”或“记录 Site 字段”导致跑完一批货分析系统里所有数据都归到 Site 0 头上良率图看起来好得异常最后查了半天才发现是 Datalog 少记了站点信息。所以配置完之后强烈建议先拿几颗已知好坏的样品试跑确认每个 Site 的记录数量和顺序都正确再放量跑。2.3 从 TestFlow 到 Datalog 配置的联动SmarTest 8 里的测试流程TestFlow是决定测试顺序和跳转逻辑的而 Datalog 配置跟 TestFlow 之间有非常强的联动关系。一个容易忽略的点是TestFlow 里可以插入 Datalog 控制节点用来在流程中途改变 Datalog 的状态。比如某个测试项做完后你希望后面的数据都不记录可能是校准项数据量大且没有分析意义就可以在 TestFlow 里插入一个关闭 Datalog 的节点等需要记录的部分开始时再打开。这种粒度控制比“全程记录再后期过滤”要高效得多也能显著缩小日志文件。另外测试程序里如果调用了dlog_init()一类的初始化函数它往往会读取你在 SmarTest 8 环境里配置好的 Datalog 参数格式、路径、文件名规则。也就是说你在 GUI 里配置的 Datalog setting和程序里的调用是协作关系不是二选一。我见过同事把 GUI 里的格式设为 STDF、但程序里硬编码写成 Text结果两边不一致文件后缀和实际内容对不上浪费了半天排查时间。所以记住一条铁律GUI 配置和程序内写入的格式参数必须保持一致。3. 实操把一套 Datalog 从配置到落盘完整跑通3.1 GUI 里配置 Datalog 的基本动作这里我用一个典型的 SmarTest 8 配置流程来说明。具体菜单名可能因为版本不同略有差异但逻辑是通用的。第一步打开 DataLogging 配置窗口通常位置在系统设置或测试程序设置里。选择你要的输出格式。调试期我会选 XML 或 Text量产期选 STDF。第二步设置文件名规则和输出目录。文件名规则里可以引用测试程序标题Title、日期、时间等变量。注意输出目录要提前建好并且确保运行测试机的操作系统账号对该目录有写权限。产线上的 Datalog 服务器目录经常是网络映射盘权限和网络稳定性都得验证过不然跑量产中途写着写着就断。第三步选择记录范围。默认可能是 All Tests按需改成 Fail Only 或按 Bin 记录。判断标准很简单你要做良率分析、画分布图就用 All Tests只是盯异常、做 debug就用 Fail Only。第四步配置 Site 过滤器。如果测试板上有多个 DUT先确认是否每个 Site 都要记录。调试单颗芯片时可以只保留一个 Site减少干扰。第五步保存配置然后在 TestFlow 里检查是否有 Datalog 控制节点。确保整条流程里 Datalog 是开启状态没有被中途关掉。3.2 测试程序里的 Datalog 调用与记录控制除了 GUI 配置测试程序里通常也会出现 Datalog 相关的初始化、记录、结束动作。以我熟悉的 C TestClass 为例逻辑大致是这样的// 初始化 Datalog指定输出文件与格式 dlog_init(lot_lot123_stdf, DLOG_FORMAT_STDF); // 执行某个测量并把结果写入 Datalog double vout measure_pin_voltage(VOUT, 10); // 测量 VOUT 管脚采样 10 次 dlog_record(VOUT_TEST, VOUT, vout, 3.0, 3.6, V, DLOG_PASS); // 所有测试结束后收尾 dlog_end();上面这段只是为了表达核心逻辑不同版本里接口名可能有别。重点是它展示了 Datalog 跟“测量”和“判定”的关系dlog_record里除了传实测值vout还要带上上下限3.0和3.6以及判定结果DLOG_PASS。也就是说Datalog 记录的不是一个孤立数字而是“测试项 管脚 实测值 上下限 判定”的完整组合。很多时候测试程序里并不会手动调dlog_record而是由 SmarTest 8 的测试方法库自动记录。比如你用的电压测试方法、频率测试方法内部已经封装好了记录逻辑。这种情况下你只需要控制记录范围即可。手动记录主要用于自定义算法测试项或者某些特殊逻辑里你想额外存一段中间数据。调试期我还习惯在 Datalog 之外另加一个运行时日志Runtime Log把程序执行的关键分支打出来这样 Datalog 负责存“测了什么结果”运行时日志负责记“程序走过了哪条路”两者对照排查问题效率非常高。3.3 数据出来之后用 Python 解析 STDF 和 XML跑完一个 lot拿到 STDF 文件接下来就是解析。我自己最常用的解析工具是 Python 的stdf库配合 Pandas 做后续分析。下面是一个读取 STDF 并汇总测试结果的示例from stdf import StdfReader reader StdfReader(lot_lot123_stdf.stdf) records [] for rec in reader: # 参数测试记录包含测试项名、实测值、上下限和判定 if rec.typ PTR: records.append({ test_name: rec.tnam, value: rec.result, low_limit: rec.lolim, high_limit: rec.hilim, unit: rec.units, site: rec.sitenum, }) # 程序结果记录包含 bin 信息和测试程序名 elif rec.typ PRR: records.append({ bin: rec.hardbin, soft_bin: rec.softbin, program: rec.prgnam, } ) # 转成 DataFrame 方便统计和画图 import pandas as pd df pd.DataFrame(records) print(df.head())如果你拿到的是 XML 格式更简单直接用标准库的xml.etree.ElementTree解析。我经常写的工具函数就是遍历TestResult节点把测试名、值和判定抽出来再拼成 CSV几秒钟就能出一个测试汇总表。这里分享一个实用技巧解析脚本不要只输出“测了哪些项、结果多少”最好同时输出“这个测试项在 Datalog 里出现了多少次”。因为数据缺失问题往往比数据错误更隐蔽——比如你预期一个 DUT 有 200 条 PTR 记录但实际只有 190 条那缺失的 10 条可能是被测试流程跳过了也可能是 Datalog 丢记录了。把这个校验逻辑写进脚本每次解析自动检查一次能省下大量排查时间。4. 常见问题与排查技巧实录4.1 文件没生成或内容为空先别急着改测试程序严格按照下面这个顺序排查。第一确认 Datalog 配置窗口里的格式和路径是否正确路径是否可写。第二确认 TestFlow 里 Datalog 控制节点是开启状态尤其注意 flow 中是否有某个节点把 Datalog 关了后面又没开回来。第三检查测试程序初始化时是否调用了 Datalog 初始化函数并且没有在后面被异常分支跳过。第四看 SmarTest 8 的运行时日志里有没有 Datalog 相关的报错比如“file open failed”或“invalid format”。我见过一个非常隐蔽的案例测试程序在某段代码里对 Datalog 做了多次初始化第二次初始化还把输出文件指向了一个已经关闭的网络目录结果前半段测试数据全写进了“虚空”后半段因为目录不存在直接没有文件生成。这种问题从现象看是“文件没生成”根子却是初始化被重复调用。所以排查时一定要翻运行时日志不要只看最后的文件输出。还有一种“文件有了但内容空”的情况通常是记录范围设置成了 Fail Only而这一批芯片恰好全 Pass或者记录粒度和测试项类型不匹配。改成 All Tests 再跑一遍基本能定位。4.2 重复记录、卡顿与磁盘空间问题我遇到过 Datalog 记录数量翻倍的情况本该记录一次的测试项记录了两次而且两次的数据完全相同。排查发现是程序里手动调用dlog_record的同时测试方法库内部又自动记录了一遍。也就是说同一测试项被两条路径写入了 Datalog。解决方法是分清“自动记录”和“手动记录”的分工——能用自动记录就不要手动再调一次手动调用的前提是你已经关闭了该测试项的自动记录。卡顿则是另一个高发问题。当数据记录粒度开到 Per Pin、并行 Site 又很多时Datalog 产生的数据量会非常恐怖。如果 Datalog 配置的是同步写入每次记录都等磁盘 IO测试节拍会被明显拖慢。解决思路是把 Datalog 输出到本地高速磁盘不要直接写到网络盘同时合理放宽缓冲刷盘策略让数据积累到一定量后再批量写。另外要盯紧磁盘空间我吃过一次亏量产跑了一半Datalog 服务器的盘满了文件写入失败而测试机直到批次结束才发现不对那一整批数据全废了。从那以后我养成了两个习惯一是 Datalog 落盘目录至少保留 20% 余量二是配置一个空间告警脚本低于阈值就报警。4.3 多 Site 数据错位与 Bin 丢失多 Site 并行测试时最怕的就是“数据错位”——Site 0 的测试结果被记录到 Site 1 头上。查这种问题的第一件事不是去翻 Datalog 文件而是先核对 Site Map 配置。SmarTest 8 里每个 Site 对应测试板上哪个 DUT 位置是由映射关系决定的。如果映射关系配错测出来的数据再准确记录的 Site 字段也是张冠李戴。另一个常见问题是 Bin 丢失。Datalog 里有 PTR 记录但看不到 PRR 记录说明测试流程结束时 Bin 更新逻辑没有执行或者 Bin 信息在记录之前就被覆盖了。我的建议是把 Bin 记录的位置放在 TestFlow 的末端并且确认 Bin 判断逻辑和 Datalog 记录节点在同一个流程分支里避免出现“测试失败跳转后 Bin 更新节点被跳过”的情况。下面把高频问题整理成一张速查表方便你贴在工位上。现象可能原因处理方向Datalog 文件没生成TestFlow 里 Datalog 未开启 / 路径无权限 / 初始化异常检查 flow 节点、目录权限、运行时日志文件生成了但是空的记录范围设成 Fail Only 而全 Pass临时改成 All Tests 验证数据条数翻倍自动记录和手动记录同时生效关闭其中一路记录逻辑测试明显变慢同步写入磁盘 / 网络盘 IO 慢本地落盘、增大缓冲批量写入Site 数据错位Site Map 配置错误核对映射关系Bin 信息缺失Bin 更新节点被跳过了调整 TestFlow 放置位置文件内容与格式不符GUI 配置与程序内参数不一致统一两处格式配置5. 让 Data Logging 真正产生价值的经验之谈5.1 从 Datalog 反查出厂测试程序里的问题Datalog 不只是给良率系统喂数据的它本身是调试测试程序的一把好手。我印象最深的一次是一批芯片在某道测试项上偶发 fail但 fail 率很低、每次测试的 fail 管脚还不一样。用 Datalog 把所有 fail 项的信息记录下来后我发现了一个规律出问题的总是靠近测试板边缘的某个 Site而且这个 Site 的驻留电流测量值明显比其它 Site 偏大。顺着这个线索排查最后发现是测试板的某个去耦电容虚焊导致电源纹波偏大。如果不开 Datalog这种偶发性问题光靠时域波形去看可能要折腾好几个工作日。这就是 Datalog 的价值——它把看不见的偶发事件变成了可量化、可筛选的数据集。所以我的习惯是量产程序里即使测的是 pass 项也会以较低频次做一次 All Tests 的 Datalog 记录作为日常健康巡检。哪天良率异常下降这份全量数据就是第一手的排查素材。5.2 批量分析与良率看板脚本Datalog 用久了你会发现手头最有价值的资产不是测试机而是积累下来的解析脚本和分析模板。我现在每个新项目都会做一套固定的数据处理流程第一步用 Python 把 STDF 或 XML 解析成统一的 CSV 中间格式。第二步做一个分布统计脚本输出每个测试项的均值、标准差、最小值、最大值和 spec margin。第三步把 Bin 数据和测试项数据关联起来生成一个良率汇总表按 Site、按批次、按时间段都算一遍。第四步把这些结果发到团队内部看板。这个流程跑通之后新项目的良率分析几乎可以做到“测试一跑完报告就出来”。而且脚本是通用的换项目只需改测试项名称和 limit 配置文件。我强烈建议你把解析脚本做成独立于项目的公共工具库而不是每个项目都从零写一遍。如果你所在的团队数据分析能力比较弱至少要做一件事把每个 lot 的 Datalog 文件按固定目录结构归档。不要用完就删芯片测试的数据是回头客几个月后做 yield trend、查批次问题时归档完整的历史数据能救你一次大的。5.3 我踩过的一些坑和习惯最后说几个我自己的习惯不用记笔记记住就行。第一个习惯改配置前后各跑一次 Datalog并保存两份配置截图。Datalog 配置改错了测试机不会报错只有数据异常。有前后对照你才知道是哪次改动引入的问题。第二个习惯文件名里带 lot id 和日期但不要带时间到秒。带秒会导致同一 lot 在不同 run 之间产生大量文件后期合并麻烦。带日期和 lot id 足够定位了。第三个习惯多 Site 数据记录永远先验证 Site 字段再放量。验证方法很简单——拿几颗已知好坏的 DUT分别放在不同 Site 上测一遍确认 Datalog 里记录的数据跟实际放置位置一一对应。第四个习惯Datalog 的落盘路径用本地固态盘跑量产再用后台任务把文件同步到服务器。直接网络盘写性能损耗和断连风险都不值得冒。Datalog 说到底是测试程序和测量数据之间的一层标准化接口。你把它理解成一个数据管道把“测了什么、结果如何、发生在哪个 DUT 上”完整记录下来后面的良率分析、异常追溯、程序调试就都有了根基。每次配置和排查时多想想这条管道里数据是怎么流过的很多问题还没踩就能预先避开了。
返回列表