数字测试基础:电平、时序、格式与 Pattern

数字测试听上去就是给芯片灌 0 和 1,对吧?可到了物理世界,这个 0 和 1 是靠电压高低、时间窗口、波形形状来定义的。我刚开始做 test 时总觉得“数字嘛,非黑即白”,结果被一个电平配置坑了大半个月。从那时起我就明白——数字测试的基础,就是搞懂电平、时序、波形格式,以及它们怎么拼成一个完整的 Pattern。

电平的世界——VIH、VIL、VOH、VOL

先聊电平。你给 DUT 发一个“1”,驱动电压必须大于 VIH(输入高电平阈值);发一个“0”,必须小于 VIL。反过来 DUT 输出“1”时,至少要达到 VOH;输出“0”时,最多只能到 VOL。这四个参数撑起了整个数字接口的逻辑判定。

参数含义典型约束
VIH输入高电平最小值比如 2.0 V(3.3V 逻辑)
VIL输入低电平最大值比如 0.8 V
VOH输出高电平最小值比如 2.4 V
VOL输出低电平最大值比如 0.4 V

这里有个坑。我曾经遇到过一块芯片在常温下所有测试都 OK,到了高温就不 pass。查了半天发现是 VIH 设得太接近 spec 下限,高温下驱动器的输出能力下降,DUT 刚好判定不到“1”。后来我把 VIH 调高了 0.5 V 再跑,问题就消失了。所以我的习惯是:只要 spec 允许,驱动电平尽量留够余量,别卡在边界上。

注意:电平参数不是对称的!VIH 和 VIL 之间有一个“噪声容限”区域,驱动电压落在里面会导致逻辑判决不确定。测试时千万别让驱动电平掉进那个灰色地带。

时序——建立时间、保持时间、测试周期

电平对了,时序不对照样白搭。每一个时钟周期里,DUT 需要一段稳定的时间读取输入(建立时间),还要一段稳定的时间保持输入不变(保持时间)。测试周期(T)决定了你能跑多快的频率。

  • 建立时间 (tsu):数据在时钟沿之前必须稳定的最短时间。
  • 保持时间 (th):数据在时钟沿之后必须稳定的最长时间。
  • 测试周期 (T):相邻两个时钟沿之间的时间间隔。

你想想看,如果 DUT 的建立时间要求是 2 ns,而 ATE 在时钟沿前只给了 1.5 ns 的稳定窗口,那采样到的数据可能是上一拍的残影。我调试一个 DDR 接口时遇到过类似的麻烦——保持时间窗口只有 50 ps,ATE 的通道间 skew 都比这大。那会儿我花了两天把每条通道的延迟校准到皮秒级,才终于让测试稳定下来。

小技巧:在 ATE 上做时序 margin 测试时,我通常会让 Timing Generator 在 spec 基础上左右各扫一遍,看 DUT 什么时候失效。那个边界值就是真正的时序预算,比 datasheet 上的数字有用多了。

波形格式——NRZ、RZ、RO、SBC

电平定了,时序定了,下一步就是决定每个 bit 长什么样。ATE 里常见的波形格式有这么几种:

格式全称波形特征典型用途
NRZNon-Return to Zero整个周期保持高或低,不归零标准数字功能测试
RZReturn to Zero前半周期输出有效电平,后半周期归零时序敏感的信号,如时钟
ROReturn to One前半周期输出有效电平,后半周期归到“1”某些外设接口,如 SPI
SBCSurrounded by Complement有效脉冲前后各有一个反相位的 guard bitNAND Flash 等信号质量要求高的场景

我个人习惯把 NRZ 作为默认选项,因为它最简单、占用的 Tester Memory 最少。但做 NAND Flash 测试时我就换 SBC 了——SBC 的 guard bit 能把信号边沿的过冲和振铃隔离掉,避免误触发。我曾经因为格式选错,一块 Flash 的读操作始终报错,换成 SBC 之后一次过。格式这东西,说白了就是给信号穿件“衣服”,合身最重要。

经验之谈:如果你的 DUT 对信号边沿特别敏感(比如高速 SerDes 的配置接口),优先考虑 RZ 或 SBC,它们能让每个脉冲的宽度和位置更精确。别省那点 pattern 内存,测试良率比内存贵多了。

Pattern 的组成与类型

电平、时序、波形格式都配齐了,把它们打包成一个一个的向量(Vector),就组成了 chip 认识的“语言”——Pattern。在一个 vector 里,你要指定:

  1. 每个管脚在这一拍是什么逻辑值(0/1/Z/X);
  2. 这个值的电平在哪里(引用 Level Set);
  3. 这个值什么时候出现(引用 Timing Set);
  4. 这个值用什么波形格式发出(比如 NRZ/RZ)。

所以一个完整的 Pattern 其实是下面四者的组合:

Vector = Pattern_Data + Level_Set + Timing_Set + Waveform_Format

我在教学时经常遇到新人问:“哪种 Pattern 最好?”我一般会反问:“你的 DUT 最怕什么?”

  • Scan Pattern:专门给 DFT 用的,控制 scan chain 的 shift 和 capture。稳定、好调试。
  • Function Pattern:模拟真实工作流程,跑一遍完整的读/写/配置。覆盖率最广,但调试难度也最大。
  • BIST Pattern:DUT 自己产生并检查结果,ATE 只负责触发和读结果。测试时间最短,但需要 DUT 支持。
  • Algorithmic Pattern:用数学算法实时生成向量,适合内存测试(March 算法等)。能省大量 Pattern 存储空间。

我通常的做法是:先用 Scan Pattern 快速筛掉结构缺陷,再用 Function Pattern 打一遍真实场景,最后根据问题加 BIST 或 Algorithmic 做精定位。你想想看,要是一上来就跑复杂的 Function Pattern,出问题了你都不知道是逻辑错还是 timing 错——这种教训我吃过两次后就老实了。

避坑指南:在做 Pattern 合并时,记得检查不同 vector 的 Level Set 和 Timing Set 是否冲突。我曾经把两套不同电压域的 Pattern 拼到一起,结果某根 pin 的驱动电平在同一个测试周期里变了两次,ATE 直接报了 Drive Conflict。从那以后我每次合并都会手动对一遍 Level/Timing 的分配表。
数字测试基础核心关系 数字测试基础 电平 VIH / VIL / VOH / VOL 噪声容限 时序 建立 / 保持 / 周期 时序余量 波形格式 NRZ / RZ / RO / SBC 脉冲形状 Pattern Vector + Level + Timing + Format Scan / Functional / BIST 核心关系: 电平决定0/1的电压,时序决定何时采样, 波形格式决定每个bit的脉冲形状,三者组合成一个Pattern向量。

这张图把四块东西串起来了——电平、时序、波形格式是零件,Pattern 是成品。你搞懂它们各自干什么,再搞懂它们怎么拼,数字测试就算入了门。后面我们会拿具体的 Pattern 文件,一行一行拆开看,到时候你就知道这四样东西在 ATE 里是怎么落地实现的。