2、存储器测试基础:存储器故障模型与测试算法原理
存储器在SoC芯片中占据着越来越大的面积比例,其良率与可靠性直接决定芯片整体质量。存储器测试的核心挑战在于:存储单元密度极高、内部结构不可直接观测、故障行为复杂多样。要设计高效的测试方案,首先必须理解存储器可能出现的故障类型(故障模型),其次需要掌握能够覆盖这些故障的测试算法。本章将系统讲解存储器故障模型的分类与机理,深入剖析March C、March C-、March SS等经典测试算法的原理、复杂度与适用场景,并结合Tessent MBIST的实际工程应用给出算法选择建议。
2.1 存储器故障模型:从物理缺陷到逻辑行为
核心原理:存储器故障模型是连接物理缺陷与测试算法之间的桥梁。在实际制造过程中,存储器可能因颗粒污染、光刻偏差、氧化层击穿、金属桥接等原因产生物理缺陷。这些缺陷在逻辑层面表现为特定的故障行为。建立准确的故障模型,意味着我们能够用有限的逻辑描述来覆盖绝大多数物理缺陷,从而指导测试算法设计。
根据故障对存储器行为的影响范围和机理,业界将存储器故障分为以下几大类:
| 故障类型 | 英文缩写 | 故障行为描述 | 典型物理成因 |
|---|---|---|---|
| 固定故障 | SAF | 存储单元或数据线恒为0或恒为1,无法写入相反值 | 金属桥接、晶体管短路/断路 |
| 转换故障 | TF | 单元能写入0和1,但0→1或1→0的跳变无法完成 | 驱动管驱动能力不足、电容泄漏 |
| 耦合故障 | CF | 一个单元的跳变或状态影响另一个单元的逻辑值 | 位线间电容耦合、字线串扰 |
| 地址译码故障 | AF | 地址译码器无法正确选中目标单元,可能选错、多选或不选 | 译码器逻辑错误、地址线短路 |
| 读破坏故障 | RDF | 读操作过程中存储值被意外翻转 | 读放大器灵敏度不足、电荷共享 |
| 数据保持故障 | DRF | 单元无法在指定时间内保持数据,发生自发翻转 | 漏电流过大、电容退化 |
判断方法:在工程实践中,故障模型的建立通常采用"缺陷注入-行为观察-模型归纳"的流程。设计团队首先通过TCAD仿真或实际缺陷分析确定物理缺陷类型,然后在存储器电路级仿真中注入对应缺陷,观察其逻辑行为表现,最终归纳为标准的故障模型。例如,当位线BL与BLB之间发生桥接时,可能表现为相邻单元的耦合故障;当存储单元的下拉管驱动能力不足时,可能表现为转换故障。
2.2 March测试算法原理:从March C到March SS
核心原理:March算法是存储器测试中最常用的测试序列。一个March序列由若干March元素组成,每个March元素包含一个地址遍历方向(升序↑、降序↓或任意⇑)和一组读写操作。March算法的核心思想是:通过精心设计的读写序列,使得每个故障模型至少被激活并观察到一次。
以最经典的March C-算法为例,其完整序列为:
March C- = { ⇑ (w0); ⇑ (r0, w1); ⇑ (r1, w0); ⇓ (r0, w1); ⇓ (r1, w0); ⇓ (r0) }
该序列共包含6个March元素,总操作数为10N(N为存储单元总数)。其中:
- 元素1:⇑ (w0) — 将所有单元初始化为0,为后续测试建立初始状态。
- 元素2:⇑ (r0, w1) — 升序读取0(验证SAF和AF),写入1(为转换测试做准备)。
- 元素3:⇑ (r1, w0) — 升序读取1(验证0→1转换),写回0。
- 元素4:⇓ (r0, w1) — 降序读取0(验证1→0转换),写入1。
- 元素5:⇓ (r1, w0) — 降序读取1,写回0。
- 元素6:⇓ (r0) — 降序读取0,验证最终状态。
算法比较:不同March算法在故障覆盖能力和测试复杂度之间存在权衡。下表对比了常用March算法的关键特性:
| 算法名称 | 复杂度 | 覆盖故障类型 | 特点与适用场景 |
|---|---|---|---|
| March C | 10N | SAF, TF, AF, CFin | 经典算法,覆盖基本故障,适合早期工艺 |
| March C- | 10N | SAF, TF, AF, CFin, CFid | 改进写恢复条件,工业界最广泛使用 |
| March SS | 22N | SAF, TF, AF, CFin, CFid, CFst | 覆盖静态耦合故障,适合高可靠性场景 |
| March LR | 14N | SAF, TF, AF, CFin, CFid, RDF | 覆盖读破坏故障,适合DRAM测试 |
| March RAW | 26N | SAF, TF, AF, CFin, CFid, CFst, RDF, WDF | 覆盖写干扰故障,适合先进工艺SRAM |
操作流程:在Tessent MBIST中配置March算法时,通常遵循以下步骤:
- 根据存储器类型和工艺节点确定需要覆盖的故障模型集合。
- 在Tessent工具中通过
add_memory_test_algorithm命令选择或自定义March算法。 - 配置地址遍历顺序(升序/降序/伪随机)和背景数据模式(全0、全1、棋盘格、反棋盘格等)。
- 设置数据背景的翻转策略,以覆盖数据线间的耦合故障。
- 运行故障仿真验证,确认故障覆盖率满足要求。
2.3 故障模型与测试算法的映射关系
核心原理:理解故障模型与测试算法之间的映射关系,是选择合适测试策略的关键。每种March算法通过特定的读写序列组合来激活和观察特定故障。例如,要检测固定故障SAF,算法必须对每个单元分别写入0和1并读取验证;要检测转换故障TF,算法必须确保每个单元经历0→1和1→0的完整跳变,并在跳变后立即读取。
耦合故障的检测更为复杂。以耦合故障CFin(反相耦合)为例,当单元j发生跳变时,会导致单元i的值翻转。要检测此类故障,March算法需要在访问单元j的同时,对单元i进行读取验证。这就是为什么March SS算法需要22N的复杂度——它通过增加额外的读写操作来确保每个单元在多种邻接条件下被验证。
判断方法:在实际项目中,判断算法是否充分覆盖目标故障模型,通常采用故障仿真(Fault Simulation)方法。Tessent Memory BIST工具内置了故障仿真引擎,可以自动注入各类故障模型并评估算法的覆盖率。设计团队可以根据仿真报告中的未覆盖故障类型,决定是否需要升级算法或增加测试模式。
2.4 工程实践中的算法选择与优化
核心原理:在Tessent MBIST流程中,算法选择不是孤立的决策,而是需要综合考虑测试时间、硬件开销、故障覆盖率和量产良率等多方面因素。Tessent提供了灵活的算法配置接口,允许设计团队针对不同存储器实例配置不同的测试算法,甚至可以在同一存储器上分时执行多种算法。
操作流程:以下是基于Tessent的算法选择与优化推荐流程:
- 存储器分类:根据容量、用途、冗余策略将存储器分为关键类和普通类。
- 算法初选:关键类存储器默认选择March SS或March RAW,普通类选择March C-。
- 故障仿真验证:运行Tessent故障仿真,获取各类故障的覆盖率报告。
- 覆盖率分析:针对未覆盖故障,分析其物理成因和实际风险等级。
- 算法调优:通过增加数据背景、调整地址顺序、增加保持等待周期等方式优化覆盖率。
- 硬件开销评估:综合评估BIST控制器的面积开销和测试时间开销。
案例拆解:某汽车电子芯片项目包含12个SRAM实例,容量从4KB到512KB不等。设计团队在Tessent中进行了如下配置:
- 对512KB的ADAS缓存(关键数据)配置March SS + 4种数据背景,测试时间28ms。
- 对64KB的配置寄存器(普通数据)配置March C- + 2种数据背景,测试时间3ms。
- 对4KB的FIFO(非关键数据)配置March C,测试时间0.2ms。
通过分级策略,整体测试时间控制在31.2ms,相比全部使用March SS节省了约40%的测试时间,同时关键存储器的故障覆盖率保持在98%以上。该方案通过了AEC-Q100 Grade 2可靠性认证。
常见误区:部分设计团队认为只要选择了高复杂度算法就能保证测试质量,忽略了故障仿真验证环节。实际上,算法覆盖率与存储器物理布局、位线结构、译码器设计密切相关。同一算法在不同存储器设计上的覆盖率可能有显著差异。务必在Tessent中运行故障仿真,用数据驱动算法选择决策。
此外,对于具有BISR(内建自修复)功能的存储器,测试算法还需要与冗余行/列替换策略配合。Tessent支持在测试过程中实时记录故障地址,并在测试完成后触发冗余分析。此时,算法的诊断能力(即精确定位故障单元的能力)与覆盖率同等重要。March类算法天然具备良好的诊断能力,因为其读写操作可以精确关联到具体地址。
综上所述,存储器故障模型与测试算法是MBIST设计的理论基础。工程师需要深入理解各类故障的物理机理和逻辑表现,掌握March算法的设计原理和覆盖能力,并结合具体项目需求在Tessent中做出合理的算法配置决策。通过"故障模型驱动、仿真验证闭环"的方法论,可以确保存储器测试方案在覆盖率、测试时间和硬件开销之间达到最优平衡。