4、经典压缩方法:编码压缩(如Run-length、Huffman)、字典压缩、LFSR重播种技术
在集成电路测试中,测试数据量随设计规模急剧膨胀,而自动测试设备(ATE)的存储深度、通道带宽和测试时间均受物理成本约束。测试模式压缩的核心目标是在不损失故障覆盖率的前提下,用更少的存储位表示原始测试向量,并在片上通过解压逻辑还原。本章聚焦三类经典压缩方法:基于统计的编码压缩(Run-length、Huffman)、基于匹配的字典压缩,以及基于线性反馈移位寄存器(LFSR)的重播种技术。这三类方法分别从数据冗余消除、模式复用和伪随机序列生成三个不同维度解决测试数据量问题,是后续X容忍逻辑设计的基础。
上图展示了三类压缩方法在测试数据流中的位置与关系。编码压缩和字典压缩属于无损数据压缩范畴,在离线阶段完成压缩,在ATE或片上通过解码器还原;LFSR重播种则是一种混合策略,利用线性反馈移位寄存器以少量种子生成大量伪随机模式,并通过确定性种子修正保证故障覆盖率。下面分别深入剖析每种方法的原理、实现流程、适用场景与工程注意事项。
4.1 编码压缩:Run-length与Huffman
核心原理
编码压缩利用测试向量中存在的统计冗余。扫描链中的测试向量通常包含大量连续相同的位值(尤其是0或1的长游程),Run-length编码将连续相同位序列替换为“长度+值”的二元组。例如,原始序列0000001111100可编码为(6,0)(5,1)(2,0),显著减少存储位数。Huffman编码则基于符号出现频率分配变长码字,高频符号用短码,低频符号用长码,从而降低平均码长。在测试压缩场景中,通常将测试向量按固定块(如4位或8位)切分,统计各块出现频率后构建Huffman树。
操作流程
- 统计分析:对目标测试集进行游程长度分布或符号频率统计,确定编码参数。
- 编码表设计:对于Run-length,确定游程长度上限和定长/变长编码策略;对于Huffman,构建最优前缀码树。
- 压缩编码:将原始测试向量转换为压缩码流,并附加必要的头部信息(如编码表索引)。
- 解压电路实现:在芯片上集成解码器,将压缩码流实时还原为扫描链加载数据。
案例拆解:基于Huffman的测试向量压缩
某SoC设计包含200万门电路,扫描链总长度为480K位,原始测试集共1200个向量。统计发现,按4位切分后,符号0000出现频率为38%,1111为22%,其余14种符号合计40%。采用Huffman编码后,0000分配码字0(1位),1111分配10(2位),其余符号平均码长4.2位。压缩前数据量为480K×1200=576M位;压缩后约为576M×(0.38×1+0.22×2+0.40×4.2)/4≈576M×0.61=351M位,压缩率约1.64:1。若进一步结合差分编码(仅存储相邻向量的差异位),压缩率可提升至2.3:1。解压电路仅需约2K门,面积开销可接受。
常见误区
- 忽略编码表存储开销:Huffman编码表本身需要存储,若符号种类多,表开销可能抵消压缩收益。
- 解压延迟估计不足:变长码解码存在串行依赖,高频符号虽短但解码器需逐位判断,可能成为测试时钟瓶颈。
- 未考虑X态影响:编码压缩对X态敏感,若向量中存在大量X位,游程统计失真,压缩率下降。
4.2 字典压缩:基于匹配的模式复用
核心原理
字典压缩的核心思想是识别测试集中频繁出现的相同子向量(如64位或128位的块),将这些块存入字典表,用较短的索引码字替代原始数据。LZ77类算法通过滑动窗口查找最长匹配,而测试压缩中更常用的是静态字典方法:预先从测试集中提取高频模式构建字典,压缩时仅需存储字典索引和少量差异信息。字典压缩特别适合扫描链中存在大量重复结构的设计,例如规则排列的寄存器组或重复的功能模块。
判断方法与操作流程
| 步骤 | 操作内容 | 关键参数/工具 |
|---|---|---|
| 1. 模式挖掘 | 统计测试集中所有固定长度子块的出现频率 | 块大小(64/128/256位)、最小频率阈值 |
| 2. 字典构建 | 选取Top-N高频模式构成字典,N受索引位宽限制 | 字典大小(如256项→8位索引) |
| 3. 压缩编码 | 遍历测试向量,匹配字典项并输出索引;未匹配部分原样存储 | 匹配策略(最长匹配优先) |
| 4. 解压实现 | 片上集成字典ROM和索引查找逻辑 | ROM容量、访问延迟 |
实战场景:多核处理器测试模式压缩
某四核处理器设计,每个核心的扫描链结构相同,测试向量中约70%的子块在四个核心间完全重复。采用128位块大小构建256项字典,每个索引8位。原始测试数据量为2.1G位,压缩后为0.9G位(含字典存储0.3G位),净压缩率2.33:1。解压电路包括一个128×256位的ROM和索引译码逻辑,面积约0.15mm²(28nm工艺),测试时钟频率不受影响。该方案的关键收益在于:字典可复用,当设计版本迭代时,仅需更新字典内容而无需修改解压逻辑。
总结复盘
字典压缩适合结构化强、重复模式多的测试集,其优势在于解压逻辑简单(仅需查表),且支持随机访问(可并行解压多个块)。但字典大小与索引位宽存在折中:字典越大,命中率越高,但ROM面积和索引位宽同步增加。工程中常采用两级字典(全局+局部)或自适应字典更新策略来平衡压缩率与硬件开销。
4.3 LFSR重播种技术
核心原理
LFSR重播种技术基于线性反馈移位寄存器(LFSR)的伪随机序列生成能力。一个n位LFSR可以产生周期为2ⁿ-1的伪随机序列,且任意状态都是前一状态的线性函数。测试压缩的基本思路是:将测试向量视为LFSR序列中的一段,通过求解线性方程组找到产生该段序列的初始状态(种子)。由于LFSR的生成多项式固定,只需存储少量种子即可在片上展开生成大量测试模式。该方法特别适合伪随机测试(PRPG)与确定性测试的混合场景。
操作流程与关键计算
- 多项式选择:选择本原多项式(如x¹⁶+x⁵+x³+x²+1),确保序列周期足够长。
- 种子求解:对于每个目标测试向量,建立LFSR状态转移矩阵,求解满足输出匹配的初始种子。若向量长度为L,则需L个线性方程,种子位宽n需满足n≥L。
- 种子压缩:对求解得到的种子集合再次进行编码压缩(如Huffman),进一步降低存储量。
- 片上展开:测试时,将种子加载到LFSR,运行L个时钟周期生成测试向量,加载到扫描链。
案例拆解:确定性种子生成
某设计扫描链长度为2000位,采用32位LFSR(本原多项式x³²+x²²+x²+x+1)。对于每个测试向量,建立2000个方程求解32位种子。由于方程数远大于未知数,系统为超定方程,需使用高斯消元求最小二乘解。实际求解中,约85%的向量可找到精确种子,其余15%需通过多组种子拼接或引入辅助位(如相位偏移)解决。最终种子集合经Huffman编码后,平均每个向量存储42位(原始2000位),压缩率47.6:1。解压电路仅需一个32位LFSR和少量控制逻辑,面积约800门。
常见误区与工程建议
- 忽略X态传播:LFSR展开的伪随机序列中,X位会被具体化为0或1,可能掩盖原本的X容忍逻辑。需在种子求解时显式处理X位,或结合掩码逻辑。
- 多项式选择不当:非本原多项式会导致序列周期缩短,多个种子可能产生重叠模式,降低故障覆盖率。
- 种子位宽不足:若种子位宽小于测试向量长度,可能无法精确匹配所有向量,需引入多周期展开或可变相位技术。
在实际工程中,LFSR重播种常与内建自测试(BIST)结合,形成“确定性BIST”方案:先用LFSR生成伪随机模式覆盖大部分故障,再用少量确定性种子针对未覆盖的故障进行补充。这种混合策略在压缩率和测试时间之间取得了良好平衡,是当前工业界的主流选择之一。
4.4 三类方法综合对比与选型指南
| 维度 | Run-length/Huffman编码 | 字典压缩 | LFSR重播种 |
|---|---|---|---|
| 压缩率范围 | 1.5:1 ~ 3:1 | 2:1 ~ 5:1 | 10:1 ~ 100:1 |
| 解压硬件开销 | 低(2K~5K门) | 中(ROM+译码逻辑) | 低(LFSR+控制) |
| 解压速度 | 高(逐块解码) | 高(并行查表) | 中(逐周期展开) |
| 对X态容忍 | 差(需预处理) | 中(可保留X位) | 差(需掩码) |
| 适用场景 | 中小规模测试集、规则向量 | 多核/重复结构设计 | 大规模测试集、BIST集成 |
| 离线计算复杂度 | 低 | 中 | 高(矩阵求解) |
选型时需综合考虑测试数据量、芯片面积预算、测试时间约束和X态处理策略。对于大多数SoC设计,推荐采用混合方案:以LFSR重播种为主干,辅以Huffman编码压缩种子集合,并在扫描链插入X容忍逻辑(如掩码寄存器)以处理不确定位。这种分层压缩架构已在多个工业级测试压缩工具中得到验证,能够在保持高故障覆盖率的同时,将测试数据量降低1~2个数量级。