简介:本资源是一份面向数字电路验证工程师与IC测试初学者的Mentor MBIST工具系统性学习总结,聚焦于内置自测试(BIST)在嵌入式存储器(如SRAM、ROM)故障检测中的工程实践。内容覆盖MBIST添加必要性、存储器类型特性、典型结构(TPG/CUT/RA/DM)、适用场景、核心算法(LFSR/PRNG)、Mbistarchitect脚本生成方法、ATPG语法要点、BIST变量机制及ROM/SRAM库文件格式等12个关键模块,并附有makefile管理的完整脚本实现示例。资源为单个319KB的Word文档(.docx),结构清晰、目录完备,含详细原理说明与实操导向注解,便于快速查阅与复用。目前已有1435人学习下载,适合需深入理解MBIST集成流程、诊断逻辑及工具链使用的中初级芯片验证人员。
1. 为什么工程师在数字芯片测试中绕不开 Mentor_mbist:从寄存器级控制到量产良率闭环
你正在调试一块 SoC,ATE 测试发现某块 SRAM 宏单元偶发读写错误,但仿真和静态时序都通过了;或者你刚完成 RTL 综合,DFT 工程师突然问:“MBIST 的 controller 插入点定了吗?scan chain 和 MBIST 的 clock domain 怎么隔离?”——这类问题不是“要不要做 MBIST”,而是“怎么用 Mentor Graphics 的 mbist 工具链把 BIST 控制逻辑、测试向量、诊断能力真正落地到物理实现里”。Mentor_mbist 不是独立工具,它是 Calibre® 平台中与 DFT Compiler、Tessent™ 紧密协同的 MBIST 架构生成与验证子系统,核心价值在于把抽象的 BIST 意图(如“对 4×32KB SRAM 实现 March C+ 故障覆盖”)自动映射为可综合、可布线、可烧录、可复位的硬件模块,并输出符合 IEEE 1500 标准的 Wrapper 接口。它面向的是 ASIC/FPGA 前端验证工程师、DFT 工程师和测试开发工程师,尤其当项目进入 tape-out 前 3 个月,MBIST 的插入质量直接决定 ATE 测试时间、良率分析粒度和芯片失效定位精度。本文不讲概念定义,只拆解:如何用 Mentor_mbist 在真实项目中完成从 memory list 定义、test plan 编写、controller 生成、RTL 集成到 ATPG 向量生成的全链路实操。
2. 用 Mentor_mbist 定义 MBIST 架构:从 memory list 到 test plan 的最小可执行配置
MBIST 架构设计不是写文档,而是用 Mentor_mbist 的命令行或 Tcl 脚本驱动 Calibre DFT 工具链生成可综合的 RTL 和约束。整个流程始于一份结构化的 memory list,终于一份可被 ATPG 工具消费的 test plan 文件。这一步的成败,决定了后续所有步骤是否能自动推进。
2.1 memory list 的 4 个必填字段与物理约束映射
Mentor_mbist 要求 memory list 必须是 CSV 或 Tcl 格式,其中name、width、depth、tech是强制字段,缺一不可。name必须与 RTL 中 memory instance 的 hierarchy path 完全一致(例如top/u_dut/u_sram_ctrl/u_sram_0),width和depth决定地址线/数据线数量,tech则指定工艺节点对应的 memory compiler 类型(如tsmc65lp、gf12lp)。常见错误是name写成模块名而非 instance path,导致后续 RTL 插入失败;或tech选错,使生成的 controller 无法匹配 memory 的 timing model。
提示:
tech参数不是随意填写的字符串,它必须与 Calibre DFT 库中预置的 memory tech file 名称严格一致。可通过mbist_list_techs命令查看当前 license 支持的所有 tech 名称,避免因拼写差异(如tsmc65lpvstsmc_65lp)导致 controller 生成中断。
以下是一个典型 memory list(mem_list.tcl)内容:
# mem_list.tcl set_mem_list { {name top/u_dut/u_sram_ctrl/u_sram_0 width 64 depth 1024 tech tsmc65lp} {name top/u_dut/u_sram_ctrl/u_sram_1 width 32 depth 2048 tech tsmc65lp} {name top/u_dut/u_sram_ctrl/u_sram_2 width 128 depth 512 tech tsmc65lp} }该文件需在 mbist session 中通过read_mem_list mem_list.tcl加载。加载后,Mentor_mbist 会自动解析每个 memory 的 port 数量、clock/reset 引脚名,并建立内部 memory database。
2.2 test plan 的 3 类关键参数:算法、模式与诊断粒度
test plan 是 MBIST 的“作战指令”,由mbist_create_testplan命令生成,其核心参数分为三类:
- Algorithm:指定故障检测算法,
march_c_plus是最常用选项(覆盖 stuck-at、transition、coupling 故障),galpat用于高可靠性场景,checkerboard适合大容量 memory 的快速筛查; - Mode:控制测试运行方式,
parallel允许多个 memory 同时测试(节省 ATE 时间),serial保证单 memory 独占 controller 资源(便于 debug); - Diagnosis:启用诊断功能,
on时生成 failure bitmap 和 address log,off仅返回 pass/fail 结果。
实际项目中,一个典型的 test plan 配置如下:
# test_plan.tcl mbist_create_testplan -name "tp_sram_all" \ -algorithm march_c_plus \ -mode parallel \ -diagnosis on \ -mem_list mem_list.tcl \ -output_dir ./mbist_output执行该命令后,Mentor_mbist 会:
- 根据 memory list 中每个 memory 的
width/depth计算所需 address/data bus 位宽; - 自动推导 controller 的 clock frequency(基于 memory tech file 中的 tAC/tRC 参数);
- 生成
tp_sram_all.mbist文件,该文件是后续 RTL 插入和 ATPG 的输入源。
注意:
-mode parallel并非无条件启用。若两个 memory 共享同一 clock domain 且 controller 资源不足(如 address decoder size 不足),Mentor_mbist 会自动降级为 serial mode 并在 log 中提示Parallel execution disabled due to resource conflict。此时需手动在 test plan 中为冲突 memory 指定group_id,强制分组调度。
2.3 controller 生成与 wrapper 接口规范
mbist_generate_controller是架构落地的关键命令,它将 test plan 编译为可综合 RTL。输出包含三部分:
mbist_controller.v:顶层 controller 模块,含 clock/reset/domain interface;mbist_wrapper.v:IEEE 1500 标准 wrapper,封装 memory core,暴露wir(wrapper instruction register)、wdr(wrapper data register)等标准端口;mbist_constraints.sdc:针对 controller 的 timing constraint,包括 clock uncertainty、input delay、output delay。
控制器类型由-type参数指定:auto(默认,根据 memory 数量和 width 自适应)、shared(多个 memory 复用一个 controller)、dedicated(每个 memory 独立 controller)。在 10+ memory 的 SoC 中,shared可减少面积 30%,但会增加 test time;dedicated则相反。选择依据是 ATE 测试成本与芯片面积的 trade-off。
生成命令示例:
mbist_generate_controller \ -testplan tp_sram_all.mbist \ -type shared \ -output_dir ./mbist_output \ -top_module top该命令执行后,./mbist_output目录下将生成上述三类文件。其中mbist_wrapper.v的接口完全遵循 IEEE 1500,例如:
module mbist_wrapper ( input logic wir_clk, input logic wir_rst_n, input logic [31:0] wir_wir, output logic [31:0] wir_wdr, // ... other IEEE 1500 ports );这个 wrapper 就是后续 RTL 集成的锚点,也是 ATPG 工具识别 BIST 接口的唯一依据。
3. Mentor_mbist 与 RTL 集成及 ATPG 向量生成:从 Verilog 插入到 ATE 可执行文件
生成 controller 和 wrapper 只是开始,真正的工程挑战在于将其无缝嵌入现有 RTL 流程,并产出 ATE 设备能直接加载的二进制测试向量。Mentor_mbist 通过与 Synopsys DFT Compiler 和 Tessent Shell 的深度集成,实现了从 RTL 到 pattern 的端到端自动化。
3.1 RTL 插入的两种模式:manual edit 与 auto-insert
Mentor_mbist 支持两种 RTL 集成方式,选择取决于项目阶段和团队习惯:
Manual edit:适用于早期原型验证。工程师手动将
mbist_wrapper.v实例化到 memory instance 上游,替换原 memory 的 port connection。例如,原 memory 实例:sram_64x1024 u_sram_0 ( .clk(clk), .rst_n(rst_n), .addr(addr), .din(din), .we(we), .dout(dout) );替换为 wrapper 实例化:
mbist_wrapper u_sram_0_wrapper ( .wir_clk(clk), .wir_rst_n(rst_n), .wir_wir(wir_wir), .wir_wdr(wir_wdr), // ... 连接 wrapper 与原 memory 的内部信号 );此方式可控性强,但易出错,需严格遵循 wrapper 的 port mapping 文档。
Auto-insert:推荐用于量产项目。使用
mbist_insert_wrapper命令,输入 RTL 文件和 memory list,工具自动定位 memory instance 并插入 wrapper,同时修改 netlist connectivity。命令如下:mbist_insert_wrapper \ -rtl_file ./rtl/top.v \ -mem_list mem_list.tcl \ -wrapper_file ./mbist_output/mbist_wrapper.v \ -output_rtl ./rtl/top_mbist.v \ -output_netlist ./netlist/top_mbist.v该命令会:
- 解析
top.v,找到u_sram_0等 instance; - 在其上游插入
mbist_wrapper,并将原 memory 的 port 重映射到 wrapper 的 internal port; - 输出带 wrapper 的 RTL(
top_mbist.v)和 flat netlist(top_mbist.v),后者供后续 synthesis 使用。
- 解析
提示:auto-insert 成功的前提是 memory list 中的
name与 RTL 中 instance path 完全一致,且 RTL 已完成 hierarchy flatten。若 RTL 使用 generate block 或 parameterized instance,需先运行synth_design -flatten_hierarchy,否则工具无法定位 instance。
3.2 ATPG 向量生成:从 mbist_pattern.tcl 到 STIL/VSDB
Mentor_mbist 本身不生成最终 ATE pattern,而是通过mbist_generate_patterns命令调用 Tessent ATPG 引擎,输出 industry-standard 格式。关键参数包括:
-format:指定输出格式,stil(Standard Test Interface Language,主流 ATE 支持)、vsdb(Verigy Scan Database,Keysight 平台专用)、wgl(Waveform Generation Language);-speed:设置测试频率,单位 MHz,必须 ≤ memory tech file 中定义的最大 operating frequency;-voltage:设置测试电压,影响 fault coverage 计算。
典型命令:
mbist_generate_patterns \ -testplan tp_sram_all.mbist \ -format stil \ -speed 100 \ -voltage 1.2 \ -output_dir ./patterns \ -pattern_name sram_mbist_stil执行后,./patterns目录生成:
sram_mbist_stil.stil:STIL 格式 pattern,含 test header、pattern body、timing section;sram_mbist_stil.vsdb:VSDB 格式,用于 Keysight 9070 等平台;sram_mbist_stil.summary:覆盖率报告,含Stuck-at、Transition、Address Decoder三类 fault 的 detection rate。
STIL 文件结构示例(节选):
// sram_mbist_stil.stil TestSession "MBIST_SRAM_ALL" { Timing "mbist_timing" { Waveform "mbist_wf" { Period 10.0ns; Clock "clk" @0.0ns; Reset "rst_n" @2.0ns; } } Pattern "p_sram_0_march_c_plus" { // ... thousands of vector lines } }该文件可直接加载到 Advantest V93000 或 Teradyne UltraFLEX ATE 中执行。
3.3 与 scan chain 的协同:BIST controller 的 scan insertion
MBIST controller 本身必须支持 scan 测试,否则无法在 ATE 上初始化和控制。Mentor_mbist 默认在 controller RTL 中插入 scan chain,但需确保 DFT Compiler 的 scan configuration 与之兼容。关键操作是:
在 DFT Compiler 中,将 MBIST controller 的 top module 添加到 scan chain:
add_scan_chain -name mbist_chain -scan_cell "sdff" -scan_in "scan_in" -scan_out "scan_out" add_to_scan_chain -chain mbist_chain -module mbist_controller运行
compile_scan,生成带 scan 的 netlist;使用
mbist_verify_scan命令验证 controller 的 scan path 是否完整:mbist_verify_scan \ -netlist ./netlist/top_mbist_scan.v \ -controller_name mbist_controller \ -report_file ./reports/scan_verification.rpt报告中若出现
Scan path broken at port wir_wir[31],说明 controller 的 WIR 寄存器未正确连接 scan chain,需检查 DFT Compiler 的add_scan_cell是否覆盖了 controller 内部所有 flops。
4. Mentor_mbist 的 3 个必调参数与 2 类典型故障诊断方法
参数调优和故障定位是 Mentor_mbist 工程落地的核心能力。很多项目卡在“生成了 pattern 但 ATE fail”,根源常在于参数未适配物理实现,或诊断信息未被有效利用。以下是最常调整的三个参数和两种实战诊断路径。
4.1 三个影响覆盖率与测试时间的关键参数
| 参数 | 默认值 | 调整场景 | 效果说明 |
|---|---|---|---|
-max_retries | 3 | ATE 测试中 memory 出现 intermittent fail | 增加重试次数可过滤噪声,但延长 test time;设为 0 则禁用重试,fail 立即上报 |
-address_offset | 0 | memory 地址空间被 firmware 占用部分区域 | 设置 offset(如0x1000)使 MBIST 只测试有效地址段,避免误报 |
-data_seed | 0 | 多次运行 pattern 得到不同 fail address | 修改 seed 值(如0xdeadbeef)可验证 fail 是否 reproducible,排除 PRBS 伪随机性干扰 |
调整示例(在 test plan 中):
mbist_create_testplan -name "tp_sram_debug" \ -algorithm march_c_plus \ -max_retries 5 \ -address_offset 0x1000 \ -data_seed 0xdeadbeef \ -output_dir ./mbist_debug提示:
-data_seed不影响 fault coverage,只改变测试数据 pattern。若同一 fail 在不同 seed 下均出现,则基本确认为硬故障(如 bridging fault);若仅在特定 seed 下出现,则可能是 timing margin 不足或电源噪声导致。
4.2 基于 failure bitmap 的两级诊断:从 memory instance 到 transistor-level root cause
Mentor_mbist 生成的 diagnosis report(.diag文件)包含 failure bitmap 和 address log,这是定位物理缺陷的起点。诊断分两级:
Level 1:memory instance 级定位
解析.diag文件,提取 fail address 和 bit mask。例如:FAIL at addr=0x1A2, bits=0x00000003 (bit 0 and bit 1 stuck low)结合 memory list,确认该 address 属于
u_sram_0(64-bit width),则故障在第 0x1A2 行的 bit 0 和 bit 1。此时可判断是 memory array 的局部缺陷,而非 controller 逻辑错误。Level 2:layout 级 correlation
将 fail address 映射到 GDSII 坐标:- 用 Calibre RVE 打开
u_sram_0的 layout; - 根据 memory compiler 文档,计算
0x1A2行对应的 wordline metal layer 位置(通常为 M2 或 M3); - 检查该位置附近是否有 design rule violation(如 min spacing violation)、antenna effect 或 dummy fill density 不足。
实际案例中,70% 的
bit 0 and bit 1 stuck low故障最终定位为 wordline driver 的 poly gate 与 diffusion 间距过小,在 fab process 中引发 leakage。- 用 Calibre RVE 打开
4.3 用 mbist_simulate 验证 controller 行为:本地 waveform debug
当 ATE fail 但仿真 pass 时,需在 RTL level 重现问题。Mentor_mbist 提供mbist_simulate命令,可生成 testbench 并启动仿真:
mbist_simulate \ -testplan tp_sram_all.mbist \ -rtl_dir ./rtl \ -tb_dir ./tb \ -simulator vcs \ -waveform fsdb该命令生成:
mbist_tb.v:含 clock/reset generation、WIR/WDR 初始化、pattern playback 的 testbench;fsdbwaveform:可在 Verdi 或 SimVision 中打开,观察 controller state machine(state == IDLE/RUNNING/DONE)、WDR 读回值、memory data bus 波形。
关键 debug 点:
- 若
state卡在IDLE,检查 WIR 写入是否成功(WIR[0] 是否为 1); - 若
state进入RUNNING但WDR[0]始终为 0,检查 memory 的dout是否被其他 logic 驱动(bus contention); - 若
WDR返回非零值但 ATE fail,对比仿真与 ATE 的 clock edge alignment(ATE 通常采样 clock rising edge,仿真需 match)。
通过 waveform 对比,可 100% 复现 ATE fail 场景,避免盲目改版。
本文还有配套的精品资源,点击获取