1. 项目背景与整体设计思路
1.1 为什么需要MBIST Pattern Spec
芯片流片回来第一次上电,最怕的不是功能跑不通,而是存储器阵列里那些看不见的物理缺陷——一个bit的耦合故障、一个单元的保持失效,都可能让整颗芯片在量产测试阶段大批量报废。MBIST(Memory Built-In Self-Test)就是用来在芯片内部自动完成存储器测试的硬件机制,而Tessent作为业界主流的DFT工具链,它生成的MBIST Pattern Spec文件,本质上就是告诉测试机台"怎么测、测什么、测到什么程度算合格"的一份完整说明书。
我接触过的项目中,很多团队在MBIST这块的流程是割裂的:前端设计工程师只管把Memory接上MBIST控制器,DFT工程师只管跑Tessent生成pattern,测试工程师拿到pattern之后发现覆盖率不够又回头找DFT,来回扯皮。问题的根源在于Pattern Spec这个中间产物没有被认真对待——它既是Tessent工具配置的输出,又是后续ATPG和机台测试的输入,承上启下的位置决定了它必须被精确控制。
这篇文章面向的是已经对DFT有基本概念、正在或者即将上手Tessent MBIST流程的工程师。我会从配置文件的组织方式讲起,一步步拆到Pattern Spec的生成、验证和交付,把每个环节的"为什么这么选"和"踩过什么坑"都摊开来说。不管你是第一次跑Tessent MBIST,还是已经跑过几轮但总觉得哪里不对劲,应该都能从下面的内容里找到可以直接复用的东西。
1.2 整体流程的架构拆解
Tessent MBIST的完整流程可以拆成四个阶段:Memory模型准备、MBIST控制器插入、Pattern Spec配置、Pattern生成与验证。这四个阶段不是简单的线性关系,而是有多次迭代反馈的。
Memory模型准备阶段,你需要把代工厂提供的Memory lib文件转换成Tessent能识别的格式。这一步看似简单,但Memory的端口定义、时序参数、物理布局信息如果转换不准确,后面所有步骤都是空中楼阁。我见过最离谱的案例是一个双端口SRAM的读写冲突检测逻辑没配对,导致MBIST跑出来的pattern在仿真阶段全部pass,上了机台却大面积fail。
MBIST控制器插入阶段,Tessent会根据你的配置自动生成控制器逻辑并连接到Memory周围。这里的关键决策是测试算法的选择——March C-、March SS、Checkerboard、Walking 1/0,不同算法覆盖的故障模型不同,运行时间也差很多。一个经验法则是:对于面积敏感的消费类芯片,March C-够用;对于车规或工业级芯片,March SS甚至更复杂的算法才能满足DPPM要求。
Pattern Spec配置阶段是这篇文章的重点。Tessent通过一个或多个配置文件来定义Pattern的生成规则,包括测试算法的具体参数、数据背景模式、地址顺序、失败停止条件等。这些配置最终会被Tessent编译成Pattern Spec文件,里面包含了每个Memory实例的测试序列、预期数据、时序信息。
Pattern生成与验证阶段,Tessent根据Pattern Spec生成仿真用的Verilog Testbench和机台用的STIL/WGL文件。仿真验证是最后一道防线,必须覆盖所有Memory实例和所有测试算法。
1.3 方案选型的核心考量
在实际项目中,MBIST Pattern Spec的配置方式有两种主流选择:基于Tessent Shell的交互式配置和基于配置文件的批处理模式。
交互式配置适合调试阶段,你可以一条命令一条命令地试,实时看到Tessent的反馈。但问题是不可复现——你今天调通了,明天换个项目又得重来。批处理模式通过一个或多个配置文件(通常是.tcl或.dof格式)来驱动整个流程,好处是版本可控、可复现、可自动化。
我的建议是:调试用交互式,交付用批处理。具体做法是先在Tessent Shell里把关键配置调通,然后把命令历史整理成配置文件,再用批处理模式跑一遍确认结果一致。这样既保证了调试效率,又保证了交付质量。
另一个关键选型是Pattern Spec的粒度。Tessent支持为每个Memory实例单独生成Pattern Spec,也支持为整个Memory组生成统一的Spec。前者灵活但文件数量多,后者管理方便但不够精细。对于Memory数量超过50个的设计,我通常建议按Memory类型分组,同一类型的Memory共享一份Pattern Spec模板,再根据实例差异做微调。
2. 核心配置细节与实操要点
2.1 Memory模型准备的关键参数
Memory模型是MBIST流程的起点。Tessent需要从Memory的lib文件中提取以下关键信息:地址位宽、数据位宽、端口类型(单端口/双端口/双端口带读写冲突)、时序参数(建立时间、保持时间、读写延迟)、物理布局(行列地址映射)。
地址位宽和数据位宽直接决定了MBIST控制器需要生成多少地址和数据信号。这里有一个容易忽略的点:地址的物理映射顺序。很多Memory的lib文件里地址是逻辑顺序,但实际物理布局是蛇形走线或者分bank的。如果MBIST的地址生成顺序和物理顺序不一致,某些耦合故障可能测不出来。
# 典型的Memory模型定义示例 add_memory -name "SRAM_1024x32" \ -type sram \ -address_width 10 \ -data_width 32 \ -ports 1 \ -write_mask 4 \ -physical_mapping "row_col_interleaved"时序参数的提取需要特别注意。Tessent默认会使用lib文件中的时序值,但如果你的设计在Memory周围加了额外的逻辑(比如地址译码器、数据多路选择器),这些逻辑的延迟必须被计入。我通常的做法是在Memory模型里加一个-access_time参数,把外围逻辑的延迟手动加上去。
注意:Memory模型的验证不能只看Tessent是否报错。必须用一个小规模的仿真用例,手动写入已知数据再读出,确认读写功能正常。这一步花10分钟,能省掉后面10小时的调试。
2.2 MBIST控制器的配置策略
MBIST控制器的配置决定了测试的并行度和调度方式。Tessent支持三种模式:串行测试、并行测试、混合测试。
串行测试是一个Memory接一个Memory地测,控制器面积小但测试时间长。并行测试是所有Memory同时测,测试时间短但控制器面积大、功耗高。混合测试是把Memory分组,组内并行、组间串行。
选择哪种模式,核心看两个指标:测试时间预算和功耗预算。测试时间预算通常由测试成本决定——机台每小时多少钱,芯片出货量多大,算一下就知道能接受多长的测试时间。功耗预算更关键,并行测试时所有Memory同时翻转,瞬时电流可能超过芯片的供电能力。
# 混合测试配置示例:4组,每组8个Memory并行 set_mbist_mode -type hybrid \ -group_count 4 \ -parallel_per_group 8 \ -group_order "sequential"这里有一个实操心得:并行测试的Memory最好来自不同的物理区域。如果两个相邻的Memory同时进行写操作,它们之间的耦合电容可能导致数据翻转。Tessent的-physical_aware选项可以自动根据Memory的物理坐标做分组,建议开启。
控制器的时钟配置也容易出问题。MBIST控制器通常跑在功能时钟上,但测试时可能切换到测试时钟。如果两个时钟的频率差异很大,Pattern Spec里的时序参数必须相应调整。我遇到过测试时钟比功能时钟快3倍的情况,Pattern Spec里的等待周期没改,导致仿真通过但机台fail。
2.3 Pattern Spec的配置项详解
Pattern Spec的配置项可以分成四类:算法配置、数据配置、地址配置、控制配置。
算法配置决定用哪种March算法。Tessent内置了March C-、March SS、March LR、Checkerboard、Walking 1/0等常用算法,也支持自定义算法。March C-的复杂度是10N(N是Memory深度),March SS是22N。对于1Mbit的Memory,March C-需要10M个周期,按100MHz算就是100ms。如果芯片有100个这样的Memory,串行测试就是10秒,并行测试可以降到1秒以内。
# 算法配置示例 set_pattern_algorithm -memory "SRAM_1024x32" \ -algorithm "march_c_minus" \ -data_background "checkerboard" \ -address_order "fast_row"数据配置包括背景模式(全0、全1、棋盘、反棋盘)和写数据模式。棋盘模式对耦合故障最敏感,但全0和全1模式对固定故障更有效。实际项目中通常组合使用,先跑全0/全1快速筛掉硬故障,再跑棋盘模式查耦合故障。
地址配置决定地址的递增顺序。fast_row是行地址先变,fast_col是列地址先变。这个选择跟Memory的物理布局有关——如果Memory的行解码器有缺陷,fast_row更容易暴露问题。
控制配置包括失败停止条件、循环次数、超时设置。-stop_on_fail建议在调试阶段开启,量产阶段关闭。-loop_count通常设为1,除非你要做老化测试。
提示:Pattern Spec的配置项有优先级顺序。命令行参数的优先级高于配置文件,配置文件高于默认值。调试时如果发现配置没生效,先检查是不是被更高优先级的设置覆盖了。
2.4 配置文件的组织与管理
一个中等规模的项目,MBIST配置文件通常有3-5个:全局配置、Memory组配置、算法配置、时序配置、输出配置。这些文件通过source命令串联起来。
# 主配置文件 main_mbist.tcl source ./config/global_config.tcl source ./config/memory_groups.tcl source ./config/algorithms.tcl source ./config/timing.tcl source ./config/output.tcl # 执行MBIST流程 run_mbist_flow文件组织的关键原则是分层管理。全局配置放所有Memory共享的参数,比如时钟频率、测试模式、输出格式。Memory组配置按类型分组,比如所有单端口SRAM一组、所有双端口SRAM一组。算法配置独立出来,方便不同项目复用。
版本控制是另一个重点。MBIST配置文件必须纳入Git管理,每次修改都要有commit记录。我见过因为配置文件被误改导致整批芯片测试失败的案例,追溯起来花了整整两天。
3. 完整实操流程与核心环节实现
3.1 环境准备与工具启动
Tessent的安装和授权配置是第一步。通常Tessent会安装在Linux服务器的/tools/tessent目录下,授权文件通过环境变量LM_LICENSE_FILE指定。
# 环境变量配置 export TESSENT_HOME=/tools/tessent/2023.1 export PATH=$TESSENT_HOME/bin:$PATH export LM_LICENSE_FILE=27000@license_server export TESSENT_TMPDIR=/tmp/tessent_work启动Tessent Shell的命令是tessent -shell。启动后先确认版本和授权状态:
# 检查Tessent版本和授权 puts "Tessent version: [get_version]" puts "License status: [check_license]"工作目录的组织建议如下:
project/ ├── config/ # 配置文件 ├── memory_models/ # Memory模型 ├── patterns/ # 生成的Pattern ├── reports/ # 报告 ├── logs/ # 日志 └── scripts/ # 脚本3.2 Memory模型的导入与验证
导入Memory模型是第一个实操环节。Tessent支持多种格式的Memory模型:lib、lef、def、verilog。最常用的是lib格式,因为代工厂通常会提供。
# 导入Memory模型 read_memory_model -format lib -file ./memory_models/sram_1024x32.lib read_memory_model -format lib -file ./memory_models/dpram_512x64.lib # 列出已导入的Memory list_memory_models导入后必须验证模型的正确性。Tessent提供了一个verify_memory_model命令,它会检查模型的完整性、时序参数的合理性、端口定义的一致性。
# 验证Memory模型 verify_memory_model -name "SRAM_1024x32" -verbose验证报告会列出所有警告和错误。常见的警告包括:时序参数缺失、端口方向不明确、地址位宽不匹配。这些警告不能忽略,必须逐一确认。
我个人的经验是:Memory模型的验证要配合一个小规模的仿真。写一个简单的Verilog Testbench,实例化Memory模型,写入一组已知数据,再读出比对。这个仿真不需要综合,纯行为级仿真就行,几分钟就能跑完。
3.3 MBIST控制器的插入与配置
控制器插入是MBIST流程的核心步骤。Tessent会根据Memory模型和配置参数,自动生成控制器逻辑并连接到Memory。
# 插入MBIST控制器 insert_mbist -module "mbist_top" \ -clock "clk" \ -reset "rst_n" \ -test_mode "test_mode" \ -memory_instances {SRAM_1024x32_0 SRAM_1024x32_1 DPRAM_512x64_0} \ -controller_type "shared" \ -algorithm "march_c_minus"-controller_type参数决定控制器的共享方式。shared是所有Memory共享一个控制器,dedicated是每个Memory独立控制器。共享控制器面积小但调度复杂,独立控制器面积大但简单可靠。
控制器插入后,Tessent会生成一个网表文件和一个报告文件。报告文件里包含了控制器的面积估算、时序路径、连接关系。必须仔细检查这个报告,确认没有未连接的端口、没有时序违例。
# 检查控制器插入报告 report_mbist_controller -module "mbist_top" -detail full这里有一个实操心得:控制器插入后先跑一遍Lint检查。Tessent生成的RTL代码质量通常不错,但偶尔会有未驱动信号或者多驱动的情况。用SpyGlass或者Verilator跑一遍Lint,能提前发现很多问题。
3.4 Pattern Spec的生成与配置
Pattern Spec的生成是这篇文章的核心。Tessent通过generate_pattern_spec命令来生成Pattern Spec文件。
# 生成Pattern Spec generate_pattern_spec -module "mbist_top" \ -output "./patterns/mbist_pattern_spec.stil" \ -format "stil" \ -algorithm "march_c_minus" \ -data_background "checkerboard" \ -address_order "fast_row" \ -stop_on_fail "off" \ -loop_count 1生成的Pattern Spec文件是STIL格式,里面包含了每个Memory实例的测试序列。文件结构通常如下:
STIL 1.0; Header { Title "MBIST Pattern Spec for mbist_top"; Date "2026-01-15"; Source "Tessent 2023.1"; } Signals { clk In; rst_n In; test_mode In; mbist_en In; mbist_done Out; mbist_fail Out; } Timing { WaveformTable default { Period '100ns'; Waveforms { clk { 0ns U; 50ns D; } rst_n { 0ns D; 90ns U; } } } } Pattern "march_c_minus_SRAM_1024x32_0" { // 测试序列 W default; // 初始化 V { rst_n=0; test_mode=1; mbist_en=0; } // 启动MBIST V { rst_n=1; mbist_en=1; } // 等待完成 V { mbist_done=1; } // 检查结果 V { mbist_fail=0; } }Pattern Spec生成后,必须做三件事:语法检查、仿真验证、覆盖率分析。
语法检查用Tessent自带的check_pattern_spec命令:
# 检查Pattern Spec语法 check_pattern_spec -file "./patterns/mbist_pattern_spec.stil" -verbose仿真验证是生成一个Verilog Testbench,把Pattern Spec转换成仿真激励,跑一遍RTL仿真。Tessent可以自动生成Testbench:
# 生成仿真Testbench generate_testbench -pattern_spec "./patterns/mbist_pattern_spec.stil" \ -output "./patterns/tb_mbist.v" \ -format "verilog"覆盖率分析是确认Pattern Spec是否覆盖了所有Memory实例和所有测试算法。Tessent的report_pattern_coverage命令会生成一个覆盖率报告:
# 生成覆盖率报告 report_pattern_coverage -pattern_spec "./patterns/mbist_pattern_spec.stil" \ -output "./reports/coverage.rpt"覆盖率报告里会列出每个Memory实例的测试状态、每个算法的执行次数、每个故障模型的覆盖情况。必须确认覆盖率是100%,否则需要调整配置重新生成。
3.5 Pattern的机台适配与输出
Pattern Spec生成后,还需要转换成机台能识别的格式。常用的机台格式有STIL、WGL、VCD。Tessent支持多种输出格式:
# 输出机台格式 write_pattern -pattern_spec "./patterns/mbist_pattern_spec.stil" \ -format "wgl" \ -output "./patterns/mbist_pattern.wgl" \ -tester "ultraflex"不同机台的格式要求不同。比如UltraFLEX用WGL,J750用STIL,V93000用VCD。转换时需要指定-tester参数,Tessent会根据机台类型自动调整时序格式和信号命名。
机台适配的关键是时序参数的匹配。Pattern Spec里的时序是基于仿真时钟的,机台的实际时钟频率可能不同。必须根据机台的实际频率重新计算等待周期。
# 时序参数调整示例 set_timing -pattern_spec "./patterns/mbist_pattern_spec.stil" \ -clock_period "10ns" \ -wait_cycles 100 \ -setup_time "2ns" \ -hold_time "1ns"这里有一个实操心得:机台适配后必须做一次回仿真。把机台格式的Pattern再转回仿真格式,跑一遍RTL仿真,确认结果一致。这一步能发现很多时序转换的问题。
4. 常见问题与排查技巧实录
4.1 Pattern Spec生成失败的原因分析
Pattern Spec生成失败是最常见的问题。根据我的经验,失败原因可以分成四类:Memory模型问题、控制器配置问题、算法配置问题、输出路径问题。
Memory模型问题通常表现为read_memory_model报错或者verify_memory_model失败。常见原因包括:lib文件格式不兼容、时序参数缺失、端口定义冲突。解决方法是先用-verbose选项看详细报错,然后对照lib文件逐项检查。
控制器配置问题通常表现为insert_mbist报错。常见原因包括:Memory实例名拼写错误、时钟信号未定义、测试模式信号冲突。解决方法是先用list_memory_models确认Memory实例名,再用check_design确认信号定义。
算法配置问题通常表现为generate_pattern_spec报错。常见原因包括:算法名拼写错误、数据背景模式不支持、地址顺序参数非法。解决方法是查阅Tessent的算法手册,确认参数取值范围。
输出路径问题通常表现为文件写入失败。常见原因包括:目录不存在、权限不足、磁盘空间不够。解决方法是先mkdir -p创建目录,再用df -h检查磁盘空间。
下面是一个常见问题速查表:
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| read_memory_model报错 | lib格式不兼容 | 查看报错详情 | 转换lib格式或手动修正 |
| verify_memory_model失败 | 时序参数缺失 | 查看验证报告 | 补充时序参数 |
| insert_mbist报错 | Memory实例名错误 | list_memory_models | 修正实例名 |
| generate_pattern_spec报错 | 算法名错误 | 查阅算法手册 | 修正算法名 |
| 文件写入失败 | 目录不存在 | ls目录 | mkdir创建目录 |
| 仿真结果与预期不符 | 时序参数不匹配 | 对比仿真波形 | 调整时序参数 |
4.2 仿真验证中的典型故障排查
仿真验证是Pattern Spec的最后一道防线。仿真中常见的故障可以分成三类:功能故障、时序故障、覆盖率故障。
功能故障表现为仿真结果与预期不符。比如MBIST应该报pass但报了fail,或者应该报fail但报了pass。排查方法是先看仿真波形,确认MBIST控制器的状态机是否正常跳转,再检查Memory的读写数据是否正确。
时序故障表现为仿真中出现setup/hold违例。排查方法是看时序报告,确认关键路径的延迟是否满足要求。如果违例,需要调整时钟频率或者插入流水线。
覆盖率故障表现为覆盖率报告显示某些Memory实例或算法未被覆盖。排查方法是检查Pattern Spec的配置,确认所有Memory实例都被包含,所有算法都被执行。
我遇到过一个典型的时序故障:MBIST控制器的时钟和Memory的时钟不同步,导致读写操作在时钟边沿附近发生,仿真中出现亚稳态。解决方法是加一个时钟同步器,或者调整时钟相位。
注意:仿真验证必须用带时序信息的网表,不能用纯行为级模型。行为级模型没有延迟信息,很多时序问题暴露不出来。
4.3 机台测试中的常见问题与解决
机台测试是MBIST流程的最后一公里。机台测试中常见的问题可以分成三类:接触问题、时序问题、电源问题。
接触问题表现为测试结果不稳定,同一颗芯片有时pass有时fail。排查方法是检查探针卡的接触电阻,确认接触良好。解决方法是清洁探针卡或者更换探针。
时序问题表现为测试结果与仿真不符。排查方法是对比机台的时序参数和仿真的时序参数,确认一致。解决方法是调整机台的时序参数,或者重新生成Pattern Spec。
电源问题表现为测试时芯片发热严重或者电流过大。排查方法是检查电源的供电能力,确认能满足并行测试的电流需求。解决方法是降低并行度,或者增加电源的滤波电容。
这里有一个实操心得:机台测试前先跑一遍小批量。拿10-20颗芯片先跑一遍,确认测试程序没问题再上大批量。这一步能避免大批量测试失败导致的损失。
4.4 独家避坑技巧与经验总结
第一个避坑技巧:Memory模型的地址映射必须和物理布局一致。很多代工厂提供的lib文件里地址是逻辑顺序,但实际物理布局是分bank的。如果MBIST的地址生成顺序和物理顺序不一致,某些耦合故障可能测不出来。解决方法是手动修改Memory模型里的地址映射参数。
第二个避坑技巧:并行测试的Memory要物理隔离。如果两个相邻的Memory同时进行写操作,它们之间的耦合电容可能导致数据翻转。Tessent的-physical_aware选项可以自动根据Memory的物理坐标做分组,建议开启。
第三个避坑技巧:Pattern Spec的时序参数要留余量。仿真时的时序是理想的,机台的实际时序有抖动。建议在Pattern Spec里把等待周期增加10%-20%的余量,避免机台测试时的时序违例。
第四个避坑技巧:覆盖率报告要人工复核。Tessent的覆盖率报告是自动生成的,但有时候会有误报。比如某个Memory实例被标记为已覆盖,但实际上测试序列里没有包含它。建议人工复核一遍覆盖率报告,确认每个Memory实例都被真正测试到。
第五个避坑技巧:配置文件要版本控制。MBIST配置文件必须纳入Git管理,每次修改都要有commit记录。我见过因为配置文件被误改导致整批芯片测试失败的案例,追溯起来花了整整两天。
第六个避坑技巧:仿真验证要用带时序的网表。行为级模型没有延迟信息,很多时序问题暴露不出来。建议用综合后的网表做仿真,虽然慢一点但更可靠。
第七个避坑技巧:机台适配后要回仿真。把机台格式的Pattern再转回仿真格式,跑一遍RTL仿真,确认结果一致。这一步能发现很多时序转换的问题。
第八个避坑技巧:测试程序要小批量验证。拿10-20颗芯片先跑一遍,确认测试程序没问题再上大批量。这一步能避免大批量测试失败导致的损失。
4.5 性能优化与调试效率提升
MBIST Pattern Spec的生成时间通常不是瓶颈,但仿真验证和机台测试的时间可能很长。优化方向主要有三个:减少Pattern数量、提高并行度、优化时序参数。
减少Pattern数量的方法是合并测试算法。比如March C-和Checkerboard可以合并成一个Pattern,先跑March C-再跑Checkerboard。这样能减少Pattern切换的开销。
提高并行度的方法是增加并行测试的Memory数量。但要注意功耗预算,并行度太高可能导致电源问题。建议先做功耗分析,确认电源能满足要求再提高并行度。
优化时序参数的方法是减少等待周期。等待周期太长会浪费时间,太短可能导致时序违例。建议根据Memory的实际访问时间设置等待周期,留10%-20%的余量。
调试效率提升的关键是日志管理。Tessent的日志文件通常很大,排查问题时需要快速定位关键信息。建议用grep和awk过滤日志,只保留关键信息。
# 过滤Tessent日志中的错误信息 grep -E "ERROR|WARNING" ./logs/tessent.log > ./logs/errors.log # 统计错误类型 awk '{print $2}' ./logs/errors.log | sort | uniq -c | sort -rn另一个调试效率提升的方法是分步执行。不要一次性跑完整个流程,而是分步执行,每步确认结果正确再继续。这样能快速定位问题所在的步骤。
# 分步执行示例 read_memory_model -format lib -file ./memory_models/sram_1024x32.lib verify_memory_model -name "SRAM_1024x32" -verbose # 确认无误后继续 insert_mbist -module "mbist_top" -clock "clk" -reset "rst_n" report_mbist_controller -module "mbist_top" -detail full # 确认无误后继续 generate_pattern_spec -module "mbist_top" -output "./patterns/mbist_pattern_spec.stil" check_pattern_spec -file "./patterns/mbist_pattern_spec.stil" -verbose我在实际项目中还发现一个技巧:用Tessent的交互式模式做快速原型。在Tessent Shell里一条命令一条命令地试,实时看到反馈,快速找到正确的配置组合。然后再把命令历史整理成配置文件,用批处理模式跑一遍确认结果一致。这样既保证了调试效率,又保证了交付质量。
最后再分享一个小技巧:Pattern Spec的注释要写清楚。STIL格式支持注释,建议在每个Pattern的开头写清楚这个Pattern测的是哪个Memory、用的什么算法、预期结果是什么。这样后面排查问题时能快速定位。
// Pattern: march_c_minus_SRAM_1024x32_0 // Memory: SRAM_1024x32_0 // Algorithm: March C- // Data Background: Checkerboard // Expected Result: Pass Pattern "march_c_minus_SRAM_1024x32_0" { // ... }这个内容后续还可以这样扩展:把MBIST Pattern Spec的生成流程集成到CI/CD流水线里,每次RTL更新后自动跑一遍MBIST流程,自动生成Pattern Spec和覆盖率报告。这样能尽早发现Memory相关的问题,避免流片后才发现。