4、经典压缩方法:编码压缩(如Run-length、Huffman)、字典压缩、LFSR重播种技术

在集成电路测试中,测试数据量随设计规模急剧膨胀,而自动测试设备(ATE)的存储深度、通道带宽和测试时间均受物理成本约束。测试模式压缩的核心目标是在不损失故障覆盖率的前提下,用更少的存储位表示原始测试向量,并在片上通过解压逻辑还原。本章聚焦三类经典压缩方法:基于统计的编码压缩(Run-length、Huffman)、基于匹配的字典压缩,以及基于线性反馈移位寄存器(LFSR)的重播种技术。这三类方法分别从数据冗余消除、模式复用和伪随机序列生成三个不同维度解决测试数据量问题,是后续X容忍逻辑设计的基础。

经典测试压缩方法分类与原理 原始测试向量 ATE存储/传输 编码压缩 Run-length / Huffman 字典压缩 LZ77 / LZW变体 LFSR重播种 确定性/伪随机混合 压缩后数据 存储于ATE或片上ROM 字典索引表 码字→模式映射 种子集合 少量种子+多项式 片上解压逻辑(Decompressor) 解码器 / 字典查找 / LFSR展开 → 恢复原始测试向量 → 扫描链加载 压缩率 = 原始数据量 / 压缩后数据量 | 解压硬件开销需在面积与功耗预算内

上图展示了三类压缩方法在测试数据流中的位置与关系。编码压缩和字典压缩属于无损数据压缩范畴,在离线阶段完成压缩,在ATE或片上通过解码器还原;LFSR重播种则是一种混合策略,利用线性反馈移位寄存器以少量种子生成大量伪随机模式,并通过确定性种子修正保证故障覆盖率。下面分别深入剖析每种方法的原理、实现流程、适用场景与工程注意事项。

4.1 编码压缩:Run-length与Huffman

核心原理

编码压缩利用测试向量中存在的统计冗余。扫描链中的测试向量通常包含大量连续相同的位值(尤其是0或1的长游程),Run-length编码将连续相同位序列替换为“长度+值”的二元组。例如,原始序列0000001111100可编码为(6,0)(5,1)(2,0),显著减少存储位数。Huffman编码则基于符号出现频率分配变长码字,高频符号用短码,低频符号用长码,从而降低平均码长。在测试压缩场景中,通常将测试向量按固定块(如4位或8位)切分,统计各块出现频率后构建Huffman树。

操作流程

  1. 统计分析:对目标测试集进行游程长度分布或符号频率统计,确定编码参数。
  2. 编码表设计:对于Run-length,确定游程长度上限和定长/变长编码策略;对于Huffman,构建最优前缀码树。
  3. 压缩编码:将原始测试向量转换为压缩码流,并附加必要的头部信息(如编码表索引)。
  4. 解压电路实现:在芯片上集成解码器,将压缩码流实时还原为扫描链加载数据。

案例拆解:基于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门,面积开销可接受。

工程经验:Run-length编码对含有大量连续0的测试向量(如总线测试模式)效果显著,但对随机性强的向量压缩率有限。Huffman编码的压缩率更稳定,但需要额外存储编码表。实际设计中常将两者结合:先做差分预处理,再对差分结果进行Huffman编码。

常见误区

  • 忽略编码表存储开销: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工艺),测试时钟频率不受影响。该方案的关键收益在于:字典可复用,当设计版本迭代时,仅需更新字典内容而无需修改解压逻辑。

风险提示:字典压缩的压缩率高度依赖测试向量的规律性。若测试向量由自动测试模式生成(ATPG)工具产生且随机化程度高,字典命中率可能低于40%,此时压缩率甚至不如Huffman。建议在压缩前先对向量做重排序或差分预处理,提升模式重复性。

总结复盘

字典压缩适合结构化强、重复模式多的测试集,其优势在于解压逻辑简单(仅需查表),且支持随机访问(可并行解压多个块)。但字典大小与索引位宽存在折中:字典越大,命中率越高,但ROM面积和索引位宽同步增加。工程中常采用两级字典(全局+局部)或自适应字典更新策略来平衡压缩率与硬件开销。

4.3 LFSR重播种技术

核心原理

LFSR重播种技术基于线性反馈移位寄存器(LFSR)的伪随机序列生成能力。一个n位LFSR可以产生周期为2ⁿ-1的伪随机序列,且任意状态都是前一状态的线性函数。测试压缩的基本思路是:将测试向量视为LFSR序列中的一段,通过求解线性方程组找到产生该段序列的初始状态(种子)。由于LFSR的生成多项式固定,只需存储少量种子即可在片上展开生成大量测试模式。该方法特别适合伪随机测试(PRPG)与确定性测试的混合场景。

操作流程与关键计算

  1. 多项式选择:选择本原多项式(如x¹⁶+x⁵+x³+x²+1),确保序列周期足够长。
  2. 种子求解:对于每个目标测试向量,建立LFSR状态转移矩阵,求解满足输出匹配的初始种子。若向量长度为L,则需L个线性方程,种子位宽n需满足n≥L。
  3. 种子压缩:对求解得到的种子集合再次进行编码压缩(如Huffman),进一步降低存储量。
  4. 片上展开:测试时,将种子加载到LFSR,运行L个时钟周期生成测试向量,加载到扫描链。

案例拆解:确定性种子生成

某设计扫描链长度为2000位,采用32位LFSR(本原多项式x³²+x²²+x²+x+1)。对于每个测试向量,建立2000个方程求解32位种子。由于方程数远大于未知数,系统为超定方程,需使用高斯消元求最小二乘解。实际求解中,约85%的向量可找到精确种子,其余15%需通过多组种子拼接或引入辅助位(如相位偏移)解决。最终种子集合经Huffman编码后,平均每个向量存储42位(原始2000位),压缩率47.6:1。解压电路仅需一个32位LFSR和少量控制逻辑,面积约800门。

关键参数对比:LFSR重播种的压缩率远高于编码压缩和字典压缩,但其代价是解压时间较长(需逐周期展开),且种子求解的计算复杂度高(矩阵运算)。对于超大规模测试集,种子求解时间可能达到数小时,需在离线阶段完成。

常见误区与工程建议

  • 忽略X态传播:LFSR展开的伪随机序列中,X位会被具体化为0或1,可能掩盖原本的X容忍逻辑。需在种子求解时显式处理X位,或结合掩码逻辑。
  • 多项式选择不当:非本原多项式会导致序列周期缩短,多个种子可能产生重叠模式,降低故障覆盖率。
  • 种子位宽不足:若种子位宽小于测试向量长度,可能无法精确匹配所有向量,需引入多周期展开或可变相位技术。

在实际工程中,LFSR重播种常与内建自测试(BIST)结合,形成“确定性BIST”方案:先用LFSR生成伪随机模式覆盖大部分故障,再用少量确定性种子针对未覆盖的故障进行补充。这种混合策略在压缩率和测试时间之间取得了良好平衡,是当前工业界的主流选择之一。

4.4 三类方法综合对比与选型指南

维度Run-length/Huffman编码字典压缩LFSR重播种
压缩率范围1.5:1 ~ 3:12:1 ~ 5:110:1 ~ 100:1
解压硬件开销低(2K~5K门)中(ROM+译码逻辑)低(LFSR+控制)
解压速度高(逐块解码)高(并行查表)中(逐周期展开)
对X态容忍差(需预处理)中(可保留X位)差(需掩码)
适用场景中小规模测试集、规则向量多核/重复结构设计大规模测试集、BIST集成
离线计算复杂度低中高(矩阵求解)

选型时需综合考虑测试数据量、芯片面积预算、测试时间约束和X态处理策略。对于大多数SoC设计,推荐采用混合方案:以LFSR重播种为主干,辅以Huffman编码压缩种子集合,并在扫描链插入X容忍逻辑(如掩码寄存器)以处理不确定位。这种分层压缩架构已在多个工业级测试压缩工具中得到验证,能够在保持高故障覆盖率的同时,将测试数据量降低1~2个数量级。

实践建议:在项目早期阶段,使用真实测试集对三类方法进行基准测试,记录压缩率、解压面积和测试时间三个指标。不要仅依赖理论压缩率,因为实际效果受ATPG工具版本、扫描链结构、X态比例等因素影响显著。建议保留至少20%的测试向量作为验证集,确保压缩后的解压结果与原始向量在故障仿真中完全一致。