SmarTest 8入门:V93000测试程序开发与调试实战指南
干这行十年从最开始对着测试机一脸懵到处问人抄配置到后来能给新同事讲清楚SmarTest 8的整套逻辑中间踩过的坑、翻过的文档整理出来其实也就几条主线。如果你是刚接触爱德万V93000测试机或者正在为SmarTest 8的入门发愁这篇文章就是按我当年“要是有人能这么给我讲一遍就好了”的心态写的。不讲太虚的架构理论直接告诉你V93000这套系统在干什么、SmarTest 8这个软件是怎么组织测试程序的、你拿到一个测试任务后该按什么顺序往下做以及最要命的是——做完之后出了问题该怎么定位。适合正在学习或刚接触V93000/SmarTest 8的测试工程师、转行入门的应届生也适合那些一直用别的机台、突然被调来用爱德万的老手。文中涉及的具体参数和配置方式我尽量写得贴近实际操作你可以直接对照你手头的机台版本去摸索。1. V93000这套系统的底子硬件在SmarTest 8里是怎么“映射”的很多第一次用SmarTest 8的人上来就想打开软件写程序结果被界面上一堆名词搞晕。其实你写的每一条配置最后都要落到机台的物理硬件上去执行。所以搞懂这套系统得先从“软件怎么看待硬件”说起。1.1 测试头里的板卡和资源V93000的测试头里插着各种板卡最常见的数字通道板卡是按速率和通道密度区分的。你在SmarTest 8里配置引脚时其实就是在把这些逻辑引脚映射到某个板卡上的某个物理通道。这个过程叫引脚映射Pin Mapping。如果不清楚自己这台机台装了哪些板卡、每个板卡有多少通道、最高支持多快的速率那后面的所有配置都是空中楼阁。通常在服务器的资源配置文件里比如tester_config能看到当前机台支持的板卡类型。比如老一代的P1000系列数字板卡单板卡通道数有限速率上限也低一点到了后面的高压板卡比如P8000系列支持的电压范围和速率又有不同。你在SmarTest 8的Project Browser里可以查看系统扫描到的板卡资源确认每个板卡的通道编号范围和能力。这个步骤别嫌烦我第一次用的时候没核对板卡类型把一个需要高速信号的引脚映射到了低速通道上跑功能测试时波形就是一坨乱的还以为是pattern写错了。还有一个容易忽略的资源是PMUPer-Pin Measurement Unit和系统电源。有些测试项需要精确测量微安级的漏电流你用的那个通道如果没有对应的PMU能力SmarTest 8可能会自动改用系统测量单元SMU去做串联测量但这样测试时间会变长。你要是做量产程序这种资源分配的问题会直接影响测试效率和精度。1.2 SmarTest 8里的“软件通道”和“物理通道”如何对应SmarTest 8的工程文件结构里最关键的就几个东西引脚配置Pin Config、测试流程Test Flow、测试方法Test Method、以及模式/向量Pattern。你打开一个已有的工程会看到类似这样的目录结构Project/ ├── PinConfig/ ├── Levels/ ├── Timings/ ├── Patterns/ ├── TestMethods/ ├── TestFlows/ └── Datelogs/其中PinConfig里有一个引脚映射文件定义了每个逻辑引脚比如CLK、DATA0、VDD对应到哪个通道。这个文件通常是TML格式或者通过Pin Editor工具去编辑。你在这个界面里拖拖拽拽改的不只是软件配置还决定了哪个物理通道的驱动器、比较器和负载开关被使能。这里有个原理要记住SmarTest 8里对引脚电平的设置实际上是在配置通道板卡上的驱动器和比较器的阈值电压。比如你把CLK引脚的高电平设成1.8VSmarTest 8就会让该通道的驱动器在输出高电平时把电压拉到1.8V同时比较器的高阈值VIH和低阈值VIL也按你设的值去判断DUT返回的信号。所以遇到波形不对、判断不准先看看Level设置和Pin Config是否对得上往往比一头扎进pattern里查更快。2. 从零开始建立一个工程先搞清楚哪些该先设很多培训手册喜欢按“硬件介绍-软件安装-写代码”这种顺序来但实战中你拿到一个新项目更合理的顺序是“先理清测试需求-再搭工程骨架-然后一级一级往下填细节”。SmarTest 8里所有配置都不是孤立的它有前置依赖关系。2.1 建立工程前的“三张表”准备我实际写程序前一定要先在纸上或者Excel里把三张表列出来引脚表这个DUT有哪些引脚哪些是电源、哪些是输入、哪些是输出、哪些是双向口每个引脚的工作电压范围是多少时序表接口协议里有哪些时钟周期约束建立时间、保持时间是多少用的是什么时钟模式单沿、双沿测试项目表你要做哪些测试开短路、漏电流、功能、输出高/低电平、静态功耗每个项目的判定规格是多少这三张表就是你在SmarTest 8里配置Pin Config、Timing和Level的输入依据。没有这三张表你打开软件也是对着空白工程发呆。这三种表做完之后心里就有底了。比如要做开短路测试你要知道DUT的每个引脚是否有保护二极管如果完全没有那接触测试该怎么判定就要灵活处理。2.2 在SmarTest 8里创建工程按住操作习惯来SmarTest 8的老版本是基于Unix工作站的图形界面现在很多机台也支持Linux版本的SmarTest 8。打开SmarTest 8后主窗口会显示当前的Project Browser你右键可以新建工程也可以加载已有的.prj文件。新建工程时有几个东西需要选好Device Type有些版本会让你选择DUT类型影响后续模板生成选项里可能有Logic/ASIC、Memory、RF等。Tester Configuration选择你当前连接的测试机台配置。Multi-site数量你要做并行测试同时测试多个DUT还是单工位测试这个会影响后续的站点Site配置和Pattern的复用方式。第一次进来的新手常常会忽略Multi-site的设定。如果你打算做4工位并行但工程里只配置了1个Site后面再改结构会很麻烦。建议一开始就算好最终的量产配置哪怕是开发阶段先只打开1个Site也要把4个Site的映射关系建好。3. 测试程序的两大支柱Level和Timing是怎么协调工作的测试程序本质上就是在每个管脚上按一定的时序施加一定的电平然后判断DUT的反应。所以Level和Timing是测试程序最底层的两个支柱理解透了后面学Test Method和Flow就是水到渠成的事情。3.1 电平Level设置不是设完就完事的在SmarTest 8里Level设置通常有这样一个界面对每一个Pin或每一组Pin设定VIH输入高电压、VIL输入低电压、VOH输出高电压判定阈值、VOL输出低电压判定阈值、VTERM端接电压等等。实际使用中要注意电平分组一个DUT可能有多组不同的I/O电压比如核心电压域和I/O电压域不同。在SmarTest 8里可以用不同的电平组Level Set来管理然后在Test Flow的不同测试项里按需要切换。驱动电流能力有些板卡的驱动器输出电流有限如果DUT上有大容性负载设定的高电平电压可能实际拉升不到目标值。这时候需要检查板卡配置或者增加缓冲时间Settling Time。比较器电压范围不是每个通道板卡都支持很宽的比较器电压范围。比如你在高压板卡上跑1.2V的低压逻辑虽然电性能上可能没问题但要注意量程和分辨率是否满足规格需求。3.2 时序Timing设置跟Pattern是配合着用的Timing里定义的是每一个测试周期的时钟沿位置、驱动沿位置、比较沿位置。在SmarTest 8里你会看到类似“D0驱动沿在周期的40%位置比较沿在60%位置”这样的定义。这里特别容易犯迷糊的是Timing负责定义“每个周期里的沿在哪”Pattern负责定义“哪个周期里哪个信号是高、是低、还是Z”。两者是正交的。你可以在不变动Pattern的情况下只调整Timing里的沿位置来做Shmoo图后面会讲也可以在不变动Timing的情况下修改Pattern来改变测试向量序列。实际调试时经常需要把Timing窗口和Waveform窗口波形查看器对着看。SmarTest 8里可以生成总线波形图观察每个通道在当前Timing下的波形形状。这里有一个很容易踩坑的问题沿对齐Edge Align。在Fast、Slow、Typical等不同Process Corner下DUT的时序行为不同但机台的驱动沿和比较沿是固定的。你在仿真时踩得很准的沿位置到硅片上去跑可能就hold不住。解决办法是先用典型的Timing去跑功能测试如果margin不足再用Shmoo去找边界最后把参数固化到Level/Timing配置里。3.3 变量和搜索在Timing里的用处SmarTest 8支持把Timing里的某些参数设置成变量比如把比较沿位置定义为变量t_comp然后在测试流程里对变量进行Search操作。这是做AC时序特性测试的重要手段。比如你要测某个信号的最快工作频率可以把周期设成变量从高到低搜索直到功能测试Fail记录下边界频率。这个“变量化”的思想在Level里同样适用。比如输出电压测试你可以把负载电流设成变量分几步依次测量得到一条负载调整率的曲线。4. Test Method和Test Flow测试程序的“肉身”和“骨架”有了Level和Timing等于有了测试的物理条件。但真正执行测试逻辑、判定Pass/Fail的是Test Method和Test Flow。很多人分不清这两者的关系我打个比方Test Flow是流水线Test Method是流水线上每道工序的机器Level/Timing是给这些机器供应的水电气。4.1 内置Test Method与用户自定义MethodSmarTest 8自带了很多标准的Test Method比如dc_contact接触测试通过强制电流测电压判断探针或测试座接触是否良好dc_idd静态电源电流测试多用于IDD/IDDQ测试dc_leakage漏电流测试Force电压Measure电流func_test功能测试执行Pattern并判断结果dc_volt输出电压测试Force电流Measure电压这些Test Method的实例通常是在Test Method库里配置好参数生成的。你可以在SmarTest 8的Test Method Editor里新建一个实例、填参数。这里要强调一点很多人只学会填参数不知道怎么自己写Method。当你需要做特殊的协议转换、或者需要根据前一测试结果决定后一测试参数时就需要写自定义Test Method。SmarTest 8支持用C/C写扩展通过编译成动态库然后挂到Test Flow里调用。在培训手册里这一块通常只是一笔带过但实战中却是拉开新手和老手差距的地方。建议至少学会读现成的模板代码改一改内部的计算逻辑和判定条件。4.2 Test Flow的上下文与执行顺序Test Flow在SmarTest 8里是一个树状结构每个节点是一个Test Method。Flow从上往下执行每个节点执行后的结果Pass/Fail会决定下一步走哪个分支。SmarTest 8里甚至还支持在同一层级做循环和条件跳转。Flow里有一个重要概念叫Test Context测试上下文。每个节点在执行时SmarTest 8会把当前的Level、Timing、Pattern、以及前面测试项产出的变量值打包成一个上下文。所以你在Flow里切换不同的Level Set本质上是把当前上下文里的电平参数替换掉。实际做量产程序时我喜欢在Flow里把整体结构分成这几段上电Power On与接触测试基本的Level/Timing巡检先跑短向量确认DUT基础功能DC参数测试功能测试与交流参数测试特殊模式Trim/校准/加密等下电Power Off每一段之间用“测试项注释”标清楚方便维护。项目多了以后你会感谢自己当初留下的这些注释。4.3 并行测试中Site的坑并行测试Multi-site的Test Flow在SmarTest 8里不是简单地复制几份而是需要考虑站点间资源共享的问题。比如你在一台V93000上同时测4颗DUT但有些资源比如交流测量单元、特定的时钟模块是共享的那么同一时刻只能有一个Site在调用。SmarTest 8会对这类资源做仲裁但仲裁会导致测试时间变长。一个比较有效的做法是把耗时长的DC测试错开在不同Site上或者把资源独占型测试放到流程最后集中运行。我见过新人在4个Site全部FAIL之后第一反应是怀疑被测芯片坏了结果查了半天发现是其中某一个Site的探针接触不良导致所有Site数据异常因为并行测试有共享的结果汇总逻辑。建议先在Single Site模式下跑通再开Multi-site这是铁律。5. Pattern测试向量的基础与调试技巧Pattern是告诉机台在每个周期往哪个引脚发什么数据的文件。SmarTest 8支持WGL、STIL等常用向量格式也支持自己用Pattern Editor直接编写简单的向量序列。绝大部分情况下你拿到的是设计部门或ATE工程师从仿真环境里导出的STIL文件。5.1 Pattern的几类基本动作在SmarTest 8的Pattern里每个Pin在每个周期最基本的动作就是0、1、Z、X不关心。还有一些特殊的命令比如NOP空操作、VCLK向量时钟控制、Jump和Call跳转和调用。这些底层指令了解即可真正常用的是在Pattern里嵌入Label和Loop方便做重复性的测试序列。功能测试里最常用的调试手段就是在Test Method里设置“失败时抓取向量地址”。SmarTest 8可以在DUT输出与预期不符时把当前向量地址记录下来然后你在Waveform窗口里跳到那个地址附近看波形。这个流程非常高效。但要注意Pattern文件里有些循环块Loop会让“向量地址”和“实际执行次数”不是一个线性关系你需要理解Pattern的循环结构才能正确地用失败地址反推回DUT内部状态。5.2 STIL文件的导入与常见报错从仿真工具导出的STIL文件在导入SmarTest 8时经常会出现几种问题时序定义缺失或不匹配STIL里的时序块和你在SmarTest 8里建的Timing Set对不上。解决办法是提前在Timing里建好标准定义把STIL里的时序部分转换成SmarTest 8支持的格式。信号名不一致STIL里的引脚名和你在Pin Config里定义的名字大小写不同或者多了前缀。SmarTest 8对信号的匹配是精确的大小写不一致就会报错。多域Pattern有些复杂DUT有多个时钟域Pattern里会有不同频率的波形定义。导入时要注意机台的能力是否支持多域同时工作。如果机台只有一个主时钟源可能导致某些跨域Pattern无法运行。5.3 功能测试的失败定位思路做功能测试Fail时不要急着去翻Pattern。第一步是用SmarTest 8的工具确认失败发生在哪个Cycle、哪一根Pin上。第二步对比一下这个失败是否在多个测试频率/电压下都出现——如果只在某个电压下出现优先查Level设置和DUT的电源稳定性如果只在某个频率下出现优先查Timing的沿位置。我还遇到过一种比较隐晦的情况Pattern本身没问题但板卡上某个通道的负载开关Load没打开导致比较器根本没有判断到DUT输出。这时候Fail信息会显示“很多Pin全Fail”且Fail地址非常随机。所以遇到大面积随机Fail先回硬件和配置上找原因而不是去改Pattern。6. 从调试到量产Shmoo图、Datelog和“人手一份”的经验库调试阶段跑通一个程序还不够你要把它磨成一个稳定、高效、能上量产的版本。这里涉及到几个SmarTest 8常用的辅助工具。6.1 Shmoo图找边界的利器也是讲道理的依据Shmoo图是把一个或两个参数比如VDD和频率作为X/Y轴按不同值组合去跑功能测试然后把Pass/Fail的结果画成一张图。SmarTest 8里可以很方便地设置Shmoo扫描的起止值和步进。这张图有非常大的实用价值找测试条件如果你不知道规格书给的时序是紧是松用Shmoo跑一遍能看到目前的测试点落在“整片Pass区域”的哪个位置。跟设计/产品部门沟通芯片Fail时贴一张Shmoo图比贴100行Fail Log都有说服力。产品工程师一看就知道是低压还是高速导致的边角失效。判断良率瓶颈如果Shmoo图的Pass区域很小或形状诡异说明这个DUT的工艺角或设计存在系统性风险需要反馈给设计团队。Shmoo图跑得慢是很多人的痛点。合理的做法是调试阶段用粗步进快速扫描锁定边界后再用细分步进精扫。别一上来就全范围精扫一跑就是几个小时。6.2 Datelog里藏着的量产秘密量产时每一个测试项的数据都会记录在Datelog里。SmarTest 8的Datelog支持自定义格式你可以把测试条件、测量值、判定结果、时间戳、Site信息都记录下来。我的做法是每次调试改完测试程序先跑一组小批量数据把Datelog用脚本整理成直方图或趋势图看看测量值的分布是不是有长尾。比如做漏电流测试发现大部分芯片都在nA级别但有少数在1uA附近——这就要警惕是否有封装污染或板卡漏电的问题而不是简单去Pin Limit。6.3 花时间建一个“经验库”这一条可能不在任何培训手册里但我强烈建议每个团队都做把日常遇到的问题、排查过程、最终解决方案整理成一个经验库。比如“TCK引脚接触测试FAIL——原来是因为探针卡该清洗了”“功能测试低频Pass高频Fail——最后发现是Level的建立时间不够给电源加了Settling Time就好了”“并行测试4个Site只有Site 3 Fail——发现是Site 3对应的通道板卡坏了”这个经验库是团队的真正资产。SmarTest 8的很多问题其实不是软件本身的问题而是“人怎么用”的问题。很多坑第一次踩要花半天第二次踩只需要十分钟。但如果你完全不记录下次还得从头查起。7. 一个完整实例从拿到芯片到出数据的完整步骤为了让这篇看起来不像纸上谈兵我用一个最简单的逻辑芯片比如一个8位Buffer来完整走一遍流程。下面的操作步骤在SmarTest 8的图形界面里几乎都能对上号你照着这个思路去套自己的芯片基本是通用的。7.1 建工程、配Pin、设Level/Timing先假设DUT有8个输入、8个输出、1个VDD、1个GND、1个OE输出使能。新建Project命名LOGIC_8BIT_BUFFER。在Pin Config里新建PINS定义所有引脚名字、方向、I/O类型。把输入引脚设为Input输出设为OutputOE设为Input。打开Level Editor新建Level Set。设VDD3.3V输入高电平VIH2.0V输入低电平VIL0.8V输出比较阈值VOH2.0VVOL0.8V。打开Timing Editor新建Timing Set。设周期100ns10MHz输入驱动沿在10ns输出比较沿在50ns。7.2 做接触测试确认通道与DUT连通在Test Method库里选择dc_contact配置强制电流-100uA拉电流钳位电压-0.5V然后对每个引脚执行接触测试。原理是如果探针接触正常电流通过保护二极管到地电压会被钳位在一个二极管压降附近约-0.7V。如果接触不良电压会被拉到很负从而Fail。注意不同DUT的ESD结构不同有些芯片的引脚没有上拉二极管接触测试的设计要相应调整否则接触测试本身就会Fail。7.3 写一个最简单的Pattern跑功能测试用Pattern Editor新建一个Pattern长度为10个周期。每个周期里在驱动沿处给输入引脚赋一组值比如从00000000到11111111变化在比较沿处判断输出引脚的值是否等于预期值把OE设为0使能输出。然后在Test Flow里挂一个func_test的Test Method选用这个Pattern执行。Pass说明基础逻辑功能正常Fail的话就进入前文说的失败定位流程。7.4 增加DC测试项测静态功耗和输出电压在Test Flow里接触测试过后、功能测试之后再加上dc_iddVDD电源串联测量VDD设为3.3V测量电流判定上限比如1mA。dc_volt对每个输出引脚强制一下拉电流比如1mA测输出电压判定VOL是否小于0.4V。这一套跑下来你已经完成了一个最简单的量产测试流程的雏形。后面要加AC参数、要加多工位、要加Shmoo扫描就是在骨架上不断填肉的事情。7.5 导出Datelog和分析在Datelog设置里把每次测试的Pass/Fail结果和测量值输出到文件。用Python或Excel拉一下数据看看分布确认没有异常长尾就可以进入小批量验证了。8. 写在最后给新手的五条实在建议文章最后不讲空话直接把我自己带人时反复讲的几条建议列出来。别一上来就折腾复杂功能先把最简单的一条路径跑通再增加复杂度。一条Case跑通了整个框架就活了。做任何改动之前先备份工程和Datelog。SmarTest 8的工程文件多是文本格式改坏了很难追溯。我习惯每次改动前复制一份带日期的工程副本。区分“软件问题”和“硬件问题”。大面积随机Fail多半是接触、板卡、探针卡的问题个别Pin固定Fail优先查Pin Config和Level设置高低频表现不一致优先查Timing和电源稳定性。这个顺序能省下大量瞎猜的时间。多读SmarTest 8自带的示例工程和模板。软件安装目录下通常有大量官方示例覆盖常见测试类型。很多时候你要的东西官方模板里已经有了改一改参数就能用。定期校准机台。这一点最不起眼却最容易导致数据失真。Level、Timing、电流表、电压表都有校准周期。别等到客户审核或良率异常时才想起来。V93000和SmarTest 8这套工具上手确实有一定门槛但它的逻辑是通的只要你愿意耐着性子一步步摸下来后面会越来越顺。希望这篇东西能让你少走点弯路把时间花在真正有挑战的测试开发上。