L5:TestMax —— 把 SMS「插进」SoC RTL
L1~L4 学的是:macro 是什么、SMS 子系统怎么工作、Server 怎么对外。但真实芯片里,功能 RTL 最初只有一颗裸 macro(core_rtl/core.v里直接例化 TCAM),并没有 Server/Processor/Wrapper。
TestMax干的事就是:读功能 RTL +.masis_c,自动规划、生成、插入、连接整套 SMS,并做连通性检查和 BIST 仿真验证。
本 case 入口脚本:run_testmax.sh→scripts/testmax_sms.tcl,在WORK/目录下跑testmax_shell。
本篇(L5)目标:搞懂 TestMax MBIST 流程里每条命令干什么、和 L3 Integrator 的关系、本 case 输入输出是什么、以及 validate 报告怎么读。
0. L5 在全局地图里的位置
L1 .masis_c(接口合同) │ ▼ L2 Macro RTL(黑盒或全模型) │ ▼ L3 Processor + Wrapper ─┐ L4 Server(IEEE1500) ─┤ SMS 子系统(Integrator / core_prj.ish; │ generate_dft 内部也会调同一套 Compiler) │ ▼ L5 TestMax:plan → generate → connect → validate ←── 本篇(焊进 SoC RTL) │ ▼ 插 SMS 后的 core.v + SMS_constraints → 综合/STA/量产 │ ▼ L6 Verifier(validate_dft 里也会调) / L7 YA pattern一句话:L3+L4 是 SMS 子系统本身;L5 是把它插进 SoC 并做连通/BIST 验证。
1. 本 case 输入 vs 输出
输入(插 SMS 前)
core_rtl/core.v——极简功能顶层,只有时钟 + 1 颗 macro:
module core ( clk1001 ); input clk1001; sadtcs0g4l1p128x68... u_tcam128x68_inst1 ( .CLK(clk1001), ... ); endmodule另需:
| 输入 | 路径 | 作用 |
|---|---|---|
.masis_c | masis/sadtcs...masis_c | TestMax 识别 memory 类型、BIST 口 |
| RTL filelist | scripts/sms_rtl.f | 目前只含core_rtl/core.v |
| 仿真模型 | sms_sim_model/ | Verifier 仿真用 |
| 标准单元库 | $ILANE_LIB_PATH | NDM lib |
输出(connect_dft 后)
| 输出 | 路径 | 内容 |
|---|---|---|
| 插 SMS 后的 RTL | WORK/output/Verilog/core.v | 顶层冒出 IEEE1500 + SMART BIST pin |
| Stub | WORK/output/stub/ | 综合用黑盒 stub |
| SMS 约束 | WORK/SMS_constraints/ | write_dft_constraint写出 |
| 报告 | WORK/tmm_wdir/report/ | plan / connectivity / memory 等 |
| Verifier 仿真 | WORK/verifier_project_simulation/ | verify_mbist_system产物 |
插完后的顶层端口(节选)——这就是 L4 Server 要对外的口:
clk1001 vl_srv_WRCK, vl_srv_WSI, vl_srv_WSO, vl_srv_SelectWIR, ... vl_srv_smart_bist_srv, vl_srv_fast_mode_srv, ... vl_srv_ready_sms_srv, vl_srv_fail_sms_srv, ... vl_sms_dm0, vl_sms_dm1, vl_sms_dm2内部层次:core_srv_1→core_proc_1→core_wrap_...→ macro 黑盒。
2. TestMax 流程(本 casetestmax_sms.tcl)
Phase 1:读设计
analyze -format sverilog -vcs "-f ../scripts/sms_rtl.f" elaborate core set_top_module core setup_rtl_flow create_clock -name clkgrp_user_1001 -period 1 { clk1001 } # 1ns = 1GHzmacro 此时是unresolved reference(黑盒),TestMax 仍可通过.masis_c识别 memory 实例。
Phase 2:DFT 配置
set_dft_configuration -mbist enableset_dft_access_element——把 L3core_prj.ish里的参数告诉 TestMax,保证生成的 SMS 与手工一致:
| type | 本 case 参数 |
|---|---|
sub_server | srv_smart_bist_en true,enable_hard_repair true |
cam_processor | smart_bist_en true,talgo_prog_enable true,treg_algo 1 |
cam_wrapper | add_user_pins_to_builder_list false |
set_mbist_configuration——绑定 SMS 工程资源:
set_mbist_configuration -project_name core_prj set_mbist_configuration -masis_file "../masis" set_mbist_configuration -simulation_models "../sms_sim_model" set_mbist_configuration -allow_module_override on set_mbist_configuration -setup_options { extract_rcl.limited_test_pin_propagation true extract_rcl.connect_proc_clocks 1 extract_rcl.connect_proc_resets 1 extract_rcl.connect_proc_dms 1 }要点:
-masis_file:L1 的.masis_c在此被 TestMax 消费connect_proc_clocks:把 Processor 的clk_sms接到 macro 的CLK(clk1001)limited_test_pin_propagation:避免 memory 功能 pin 全部 propagate 到 chip top
Phase 3:SMS 三步走
| 步骤 | 命令 | 内部工具 | 干什么 |
|---|---|---|---|
| ① 规划 | plan_dft | STAR Planner | 读 memory、分组、时钟检查;出dft_memory_report.rpt |
| ② 生成 | generate_dft | Integrator + Builder | 生成 Server/Proc/Wrapper RTL(≈ L3core_prj.ish) |
| ③ 连接 | connect_dft | rtl_modifier | 把 SMS 层次插进core.v,连线到 macro BIST 口 |
本 caseplan_dft结果:1 个 memory 实例core.u_tcam128x68_inst1,时钟clk1001@ 1000 MHz。
Phase 4:约束 + 验证
write_dft_constraint -sms -sms_outdir SMS_constraints validate_dft -check connectivity validate_dft -check verify_mbist_system| 检查 | 干什么 |
|---|---|
| connectivity | 静态分析 Processor→Wrapper→macro 路径是否可达 |
| verify_mbist_system | 调STAR Verifier跑 BIST 仿真(bist_all、repair_verification等) |
3. 本 case 实际跑通结果
plan_dft/generate_dft/connect_dft
均成功(STAR Planner / Integrator / Builder completed successfully)。
validate_dft -check connectivity
| 统计 | 数值 |
|---|---|
| Total messages | 1884 |
| Error | 69 |
| Info(路径 OK) | 1815 |
69 个 Error 的原因:macro 是黑盒,RTL 里看不到TWE、TVBI、BISTE、Q[67:0]等内部 pin,工具报no design object found。这是blackbox 预期行为,不是 SMS 连错。
真正重要的 Info 路径都 OK,例如:
clk1001 → vl_sms_core_proc_1_sms_1_stp/clk_sms Processor/biste → Wrapper/biste Processor/WSO → Server/sms_wsovalidate_dft -check verify_mbist_system
全部PASSED:
<signature_reg_check> TEST FLOW PASSED <sms_status> TEST FLOW PASSED <bist_all> TEST FLOW PASSED <bist_all_fail> TEST FLOW PASSED <repair_verification> TEST FLOW PASSED说明:插 SMS 后的设计能跑通 VLCAM BIST 和 repair 验证(L6 Verifier 细讲)。
4. L3 Integrator vs L5 TestMax
L3(core_prj.ish) | L5(testmax_sms.tcl) | |
|---|---|---|
| 工具 | Embed-It Integrator | TestMax Shell |
| 输入 | 手工指定组件/参数 | 功能 RTL +.masis_c |
| 输出 | core_prj/compout/views/ | WORK/output/Verilog/core.v |
| 连线 | 不连 SoC | connect_dft 自动连线 |
| 验证 | QA sim args | validate_dft |
| 关系 | 可单独跑;TestMaxgenerate_dft会调同一套 Compiler | 自动化端到端 |
本 case 两者参数对齐:srv_smart_bist_en、smart_bist_en、talgo_prog_enable等完全一致。
5. 关键命令速查
| 命令 | 一句话 |
|---|---|
set_dft_configuration -mbist enable | 打开 MBIST client |
set_dft_access_element | 指定 SMS 组件类型和编译参数 |
set_mbist_configuration | 绑.masis_c、仿真模型、Integrator 选项 |
plan_dft | 规划 memory 分组和时钟 |
generate_dft | 生成 SMS IP(Server/Proc/Wrapper) |
connect_dft | 插入并连接 RTL |
write_dft_constraint -sms | 写 SMS 时序/约束 |
validate_dft -check connectivity | 静态连通性 |
validate_dft -check verify_mbist_system | Verifier BIST 系统仿真 |
Man page:man -M /global/apps/tmm_2025.06/doc/TESTMAX/man <command>
6. 和 L4/L6/L7 的衔接
L5 connect_dft 后的顶层 IEEE1500 pin ↓ L4 Server 行为(WRCK 移位 BIST_RUN) ↓ L5 validate_dft → 调 L6 Verifier 仿真 ↓ L7 YA 根据 SMS_constraints / UDS 生成 ATE pattern量产时:TestMax 插完 SMS → 约束给 DC/PT → YA 出 pattern → ATE 从vl_srv_*pin 进 Server 跑 BIST。
7. L5 小结
TestMax = 读裸 macro RTL +
.masis_c,自动 plan/generate/connect 整套 SMS 到 SoC,写出带 IEEE1500 端口的core.v,并用 Verifier 验证 BIST 能跑通。本 case 连通性 69 个 error 是黑盒 macro 所致,系统级 BIST 仿真全部 PASS。
8. 自测题
- 本 case TestMax 入口脚本?
- 插 SMS 前后的
core.v顶层端口差多少? set_mbist_configuration -masis_file指向哪?plan_dft/generate_dft/connect_dft各调什么工具?connect_proc_clocks解决什么问题?- 本 case 有几个 memory 实例?
- connectivity 69 个 Error 的主要原因?
verify_mbist_system测了哪些 flow?- L3 和 L5 生成的 SMS 参数怎么对齐?
- 插 SMS 后的 RTL 输出路径?
run_testmax.sh→scripts/testmax_sms.tcl。- 插前只有clk1001;插后增加~20 个
vl_srv_*/vl_sms_dm*DFT pin。 ../masis(含本 macro 的.masis_c)。- Planner /Integrator+Builder/rtl_modifier。
- 把 Processor
clk_sms接到 macroCLK。 - 1 个(
u_tcam128x68_inst1)。 - macro黑盒看不到
TWE、BISTE等 BIST pin。 signature_reg_check、sms_status、bist_all、bist_all_fail、repair_verification。- 通过
set_dft_access_element设与core_prj.ish相同参数。 WORK/output/Verilog/core.v。
速查(L5)
- 脚本:
run_testmax.sh·scripts/testmax_sms.tcl - 功能 RTL:
core_rtl/core.v - 插 SMS 后 RTL:
WORK/output/Verilog/core.v - 报告:
WORK/tmm_wdir/report/plan_dft/·validate_dft_connectivity/ - 约束:
WORK/SMS_constraints/ - Man page:
DOC/L5_TestMax/man_pages/*.2 - 本 case:1×128×68 XYCAM;connectivity 69 err(blackbox);verify_mbist_system 全 PASS
下一篇:L6 — Verifier 仿真验证(fault injection、+chk_bist)