MBIST 存储器内建自测试
更新时间:2026-10-01。现代 SoC 里存储器常占一半以上面积,缺陷密度高,且扫描/ATPG 对大 SRAM 效率极低——存储器要用专门的内建自测试。已有 MBIST/BISR 概念篇,本文深入算法与控制器。
本文要回答的问题
- 为什么存储器不直接用逻辑扫描来测?
- March 算法那一串“↑↓ r/w”到底在干什么?
- 测出坏单元后怎么“修好继续用”?
一、存储器缺陷模型
SRAM 常见故障:固定故障(单元卡 0/1)、跳变故障(写不进相反值)、耦合故障(写一个单元影响相邻单元)、地址译码故障、保持故障。规则阵列 + 明确故障模型,使确定性的算法遍历成为可能。
二、MBIST 硬件结构
- 地址生成器:按顺序产生递增/递减地址。
- 数据生成器:产生 0、1、棋盘、反相等背景。
- 控制器:执行算法的读写序列(通常由工具生成 FSM)。
- 响应比较器:读回数据与期望值比对,给出 pass/fail 与失败地址。
测试时 MBIST 接管存储器接口,正常功能被旁路;可上电自动跑(后台)或由 TAP 命令触发。
三、March 算法
March 算法由若干“March 元素”组成,每个元素指定地址走向(↑递增/↓递减/↕不限)和对每个单元的读写操作。以 March C- 为例(简化表示):
↕ (w0);
↑ (r0 w1);
↑ (r1 w0);
↓ (r0 w1);
↓ (r1 w0);
↑ (r0);w0/w1写背景,r0/r1读并期望对应值。- 正向反向各跑一遍,才能激活并观测单元间耦合和地址译码故障。
- 不同 March 算法(March LR、March SS 等)用更多元素覆盖更复杂的静态/动态耦合,代价是测试时长。
四、MBIST 与修复流程
BISR(内建自修复) 预留冗余行/列,测试发现坏单元后做熔丝/寄存器重映射把坏地址替换掉;修复方案烧入 eFuse/OTP,上电加载。带冗余修复的存储器能显著提升良率。
五、常见坑
- MBIST 控制器插入后没处理好与功能路径的复用选择,引入时序问题。
- 测试时间预算不足,选的 March 算法覆盖不了动态耦合。
- 修复算法(BISR)未在最恶劣条件下验证,烧录后修错。
- 上电自检与功能启动竞争,控制器没跑完就访问存储器。
- 忽视测试时存储器峰值功耗,多块 SRAM 同时 BIST 触发 IR-drop。
小结
规则存储用 MBIST 的确定性 March 序列覆盖固定/跳变/耦合故障,BISR 用冗余行列 + eFuse 修复提良率。下一篇 JTAG TAP 与测试访问机制。
总结
存储器(现代 SoC 中常占一半以上面积、缺陷密度高)不适合逻辑扫描,要用专门的 MBIST:其硬件由地址生成器、数据背景生成器、执行算法的控制器 FSM 和响应比较器构成,测试时接管存储器接口、可上电自检或 TAP 触发;核心是 March 算法——一串“地址递增↑/递减↓、对每个单元读写 r0/w1”的 March 元素,正反向各跑一遍才能激活并观测单元间耦合故障(写一个影响相邻)、地址译码故障,以及固定和跳变故障,算法越复杂覆盖越全但测试时间越长。测出坏单元后由 BISR 内建自修复用预留的冗余行/列做地址重映射替换,修复方案烧入 eFuse/OTP、上电加载,从而显著提升良率。工程坑集中在控制器插入引入时序问题、修复算法没在恶劣条件下验证导致烧录修错、多块 SRAM 同时 BIST 的峰值 IR-drop。