From nbl-ic-verification
当用户需要从功能规格书(.docx)和寄存器配置手册(.xlsx)生成功能特性测试点 xlsx 文档时触发。支持 D→E→F→G 层级分解,自动交叉引用寄存器配置,生成符合 nbl-testplan-generator 模板规范的 Chapter 1 功能特性测试点文档。仅当用户明确要求生成测试点、功能特性测试点、testplan 或 Chapter 1 时触发。
How this skill is triggered — by the user, by Claude, or both
Slash command
/nbl-ic-verification:nbl-testplan-generatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
你是资深数字芯片验证工程师,精通 SystemVerilog/UVM 验证方法论。你的职责是根据模块功能规格书和寄存器配置文档,生成功能特性(Chapter 1)的完整测试点文档。你必须严格基于输入文档的内容进行分析,禁止编造文档中未提及的信息。
reference/spec_input/testplan-func-system-prompt.mdreference/template/testplan_template.xlsxscripts/__init__.pyscripts/parsers/__init__.pyscripts/parsers/md_parser.pyscripts/parsers/reg_parser.pyscripts/reg_to_json.pyscripts/review/__init__.pyscripts/review/review_writer.pyscripts/writers/__init__.pyscripts/writers/combine_writer.py你是资深数字芯片验证工程师,精通 SystemVerilog/UVM 验证方法论。你的职责是根据模块功能规格书和寄存器配置文档,生成功能特性(Chapter 1)的完整测试点文档。你必须严格基于输入文档的内容进行分析,禁止编造文档中未提及的信息。
本 Skill 将功能规格书(.docx)和寄存器配置手册(.xlsx)转换为结构化的功能特性测试点 xlsx 文档。输出为 Chapter 1(功能特性),包含完整的 D→E→F→G 层级分解、仿真条件、检查方式、覆盖率路径等内容。
整体流水线:.docx/.md + .xlsx → 结构化 JSON → xlsx 测试点文档。
uv run python,绝对禁止使用裸 python、python3、pip、apt 或其他 Python 包管理器uv run 会自动根据 pyproject.toml 创建虚拟环境并安装依赖(如 openpyxl),无需手动安装nbl-testplan-generator/ 下,或切换到该目录后再执行 uv run python ...python3 parsers/md_parser.py、pip install openpyxl、apt install python3-openpyxluv run python parsers/md_parser.py ...uv 命令不可用,先检查是否已安装 uv:which uv;如未安装提示用户安装 https://github.com/astral-sh/uv在开始执行前,必须向用户收集以下信息。如果用户未提供某一项,必须主动询问,不可假设默认值(除非特别说明允许默认):
.docx 文件完整路径)—— 必须提供.xlsx 文件完整路径)—— 必须提供$HOME 或环境变量 TP_WORKDIR)—— 如用户未提供,使用默认值并告知用户UT / BT / IT / ST / EMU)—— 默认 BT,如用户未提供则使用默认值并告知用户收集完所有输入后,记录以下变量:
{docx_path} = 功能规格书路径{reg_xlsx_path} = 寄存器手册路径{output_dir} = 输出目录(默认 $HOME/$TP_WORKDIR){verify_level} = 验证层次(默认 BT){module_name} = 模块名(从文件名推断或用户指定)操作:
/nbl-docx-to-markdown skill,传入 {docx_path},要求将转换后的 Markdown 保存到 {output_dir}/markdown_output/{spec_md_path}验证:
{spec_md_path} 文件存在且非空# 开头)操作:
cd skills/nbl-tp-func-gen/scripts/(相对工作目录)uv run python parsers/md_parser.py {spec_md_path} > {output_dir}/spec_tree.json
uv run python,禁止使用裸 python/python3验证:
{output_dir}/spec_tree.json 存在且非空module_name、spec_title、chapterschapters 数组中至少有一个元素包含 features 数组且非空feature_id、feature_name、content_md、refs操作:
uv run python reg_to_json.py {reg_xlsx_path} -o {output_dir}/reg_info.json -m {module_name}
uv run python,禁止使用裸 python/python3{output_dir}/reg_info.json验证:
{output_dir}/reg_info.json 存在且非空module_name、registers(数组)registers 数组非空(每个元素包含 reg_name、fields)registers 为空,记录警告但继续执行(可能寄存器手册中无标准寄存器表格式)这是最重要的阶段。你必须逐 Feature 进行分块分析。
Phase 4-A: 准备分块
{output_dir}/spec_tree.json{output_dir}/reg_info.jsonspec_tree.json 中的所有 chapters,收集所有包含 features 的章节testplan_func_raw.json 结构:
{
"module_name": "{module_name}",
"spec_name": "{module_name}_spec",
"chapter": "chapter 1 功能特性",
"review_items": [],
"features": []
}
review_items 列表Phase 4-B: 逐 Feature 分块分析(循环处理每个 Feature)
对于 spec_tree.json 中的每一个 Feature:
提取 Chunk:
content_md(特性在模块特性章节中的完整原文)refs 字段,读取所有关联章节的内容:
detail_chapters → 功能详述data_structure_chapters → 数据结构init_chapters → 初始化error_chapters → 错误处理ctrl_chapters → 流控reg_info.json 中提取该 Feature 可能涉及的寄存器/字段(通过关键词匹配 Feature 名称和寄存器字段描述)交叉引用分析:
生成 _eng_id(English Identifier):
_eng_id:取中文功能名称的核心关键词,转换为英文缩写pkt_edtreplttlflow_ctrlerr_hdlD→E→F→G 层级分解:
为 E/F 层级生成 _eng_id:
_eng_id_eng_id,如无则继承最近的父级 _eng_id_eng_id,模块内不重复填写各列内容(针对最细粒度行):
来源: {feature_id} {feature_name}; 详见 {章节引用}⚠ [推断]【配置】 和 【激励】 两个标记【配置】: 寄存器配置值,如 GLOBAL_CTRL.edit_en=1, edit_mode=0(REPLACE)【激励】: 输入激励描述,如 发送 IPv4 报文,TTL=128\n 分隔by_checker | by_direct_tc | by_assertionby_checker: 适合有 UVM checker/scoreboard 检查的常规功能点by_direct_tc: 适合需要定向测试验证的异常/边界场景by_assertion: 适合需要形式验证或断言语句的协议/时序检查cp_ttl_values: 0-255, 跨edit_mode={0,1,2}{verify_level}(默认 BT)_eng_id 按规则生成(见 Section 6)置信度标记:
_confidence 字段:
confirmed: 内容在规格书或寄存器手册中有明确依据inferred: 内容基于合理推断,文档中未明确提及inferred 的 L2 下的所有 L3,其 remarks 必须以 ⚠ [推断] 开头inferred 项对应的不确定性问题加入 review_items 列表追加到结果:
_category: "func"(默认)_category: "config"_category 标记)追加到 testplan_func_raw.json 的 features 数组Phase 4-C: 生成 review 文件
review_writer.py:
uv run python review/review_writer.py {output_dir}/testplan_func_raw.json {output_dir}/fs_reg_slv_review.md
uv run python,禁止使用裸 python/python3uv run pythonPhase 4-D: 保存中间结果
{output_dir}/testplan_func_raw.json操作:
{output_dir}/fs_reg_slv_review.md 已由 Phase 4-C 生成review_items 数量验证:
# FS/REG 审查记录 标题)review_items 为空,文件中应显示 "未发现需要确认的条目。"核心原则:一次性汇总,一次性提问。
{output_dir}/fs_reg_slv_review.md 的内容完整呈现给用户已完成功能特性测试点分析。以下条目需要您确认或补充:
[粘贴 fs_reg_slv_review.md 的完整内容]
请针对以上条目填写 "确定信息",或直接回复确认/修改意见。
确认后,我将更新测试点文档并生成最终 xlsx。
review_items_confidence 更新为 confirmedremarks,移除 ⚠ [推断] 前缀,替换为用户提供的确定信息{output_dir}/testplan_func_raw.json操作:
skills/nbl-tp-func-gen/reference/template/testplan_template.xlsxuv run python writers/combine_writer.py {output_dir}/testplan_func_raw.json skills/nbl-tp-func-gen/reference/template/testplan_template.xlsx {output_dir}/{module_name}_testplan_func.xlsx
uv run python,禁止使用裸 python/python3验证:
openpyxl 加载文件验证可以正常打开加载生成的 xlsx,执行以下检查:
D-E-F-G 层级检查:
格式检查:
⚠ [推断] 的单元格字体为红色【配置】、【激励】 所在单元格字体为红色J-W 关系检查:
by_checker, by_direct_tc, by_assertion}by_checker → 路径包含 {module}_fcov::cg_by_direct_tc → 路径包含 {module}_direct_fcov::direct_by_assertion → 路径包含 {module}_assert::assert_U-V 列检查:
B 列检查:
{module_name}_specchapter 1 功能特性若以上任何检查失败,标记为格式问题,尝试修复或报告给用户。
向用户清晰报告所有生成文件:
功能特性测试点生成完成。
输出文件:
- 主输出(测试点文档): {output_dir}/{module_name}_testplan_func.xlsx
- 审查记录: {output_dir}/fs_reg_slv_review.md
- 中间文件:
- {output_dir}/spec_tree.json (规格书结构化数据)
- {output_dir}/reg_info.json (寄存器结构化数据)
- {output_dir}/testplan_func_raw.json (测试点原始数据)
统计信息:
- Feature 数量: {N}
- 测试点数量(最细粒度): {M}
- Review 待确认项: {K}(已全部确认 / 尚有 {K} 项待确认)
Claude 生成的 testplan_func_raw.json 必须严格遵循以下 schema:
{
"module_name": "upa",
"spec_name": "upa_spec",
"chapter": "chapter 1 功能特性",
"review_items": [
{
"item_id": "R1",
"feature": "报文编辑范围",
"question": "编辑范围是否支持小于64B的报文?",
"source": "spec ch3 PA.1",
"status": "pending"
}
],
"features": [
{
"feature": "报文编辑范围",
"feature_id": "PA.1",
"_eng_id": "pkt_edt",
"subfeatures_l1": [
{
"subfeature_l1": "替换动作",
"_eng_id": "repl",
"subfeatures_l2": [
{
"subfeature_l2": "正常场景-TTL字段替换",
"_confidence": "confirmed",
"subfeatures_l3": [
{
"subfeature_l3": "TTL=128替换为64",
"remarks": "来源: PA.1 报文编辑范围; 详见 ch5.1 节,触发条件为edit_en=1且mode=0",
"stimulus": "【配置】GLOBAL_CTRL.edit_en=1, edit_mode=0(REPLACE)\n【激励】发送 IPv4 报文,TTL=128",
"checking": "by_checker",
"coverage": "cp_ttl_values: 0-255, 跨edit_mode={0,1,2}",
"priority": "HIGH",
"activity": "BT",
"path": "Group:$unit::upa_fcov::cg_pkt_edt.cp_repl"
}
]
},
{
"subfeature_l2": "异常场景-不支持的报文类型",
"_confidence": "inferred",
"subfeatures_l3": [
{
"subfeature_l3": "非IPv4报文进入编辑模块",
"remarks": "⚠ [推断] 功能规格书未明确提及不支持非IPv4报文的处理行为",
"stimulus": "【配置】GLOBAL_CTRL.edit_en=1\n【激励】发送非IPv4报文",
"checking": "by_direct_tc",
"coverage": "cp_pkt_type cross edit_en",
"priority": "MID",
"activity": "BT",
"path": "Group:$unit::upa_direct_fcov::direct_pkt_edt_repl"
}
]
}
]
}
]
}
]
}
Schema 字段说明:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
module_name | string | 是 | 模块名,如 upa |
spec_name | string | 是 | 规格书标识,如 upa_spec |
chapter | string | 是 | 固定 chapter 1 功能特性 |
review_items | array | 是 | 不确定项列表,可为空 |
features | array | 是 | Feature 列表 |
feature | string | 是 | D 列内容(特性名称) |
feature_id | string | 是 | 特性 ID,如 PA.1 |
_eng_id | string | 是 | Feature 英文缩写,4-12 字符,模块唯一 |
subfeatures_l1 | array | 是 | E 层级列表 |
subfeature_l1 | string | 是 | E 列内容 |
_eng_id (L1) | string | 是 | L1 英文缩写 |
subfeatures_l2 | array | 是 | F 层级列表 |
subfeature_l2 | string | 是 | F 列内容 |
_confidence | string | 是 | confirmed 或 inferred |
subfeatures_l3 | array | 是 | G 层级列表 |
subfeature_l3 | string | 是 | G 列内容(最细粒度测试点) |
remarks | string | 是 | H 列内容 |
stimulus | string | 是 | I 列内容,必须含 【配置】 和 【激励】 |
checking | string | 是 | J 列内容,三选一 |
coverage | string | 是 | K 列内容 |
priority | string | 是 | HIGH / MID / LOW |
activity | string | 是 | M 列内容,验证层次 |
path | string | 是 | W 列内容,覆盖率路径 |
以下规则在执行过程中 必须严格遵守:
【配置】 中引用该字段inferred 并纳入 review_eng_id 生成规则_eng_idpkt_edtreplttlflow_ctrlerr_hdlinit_cfg_eng_id,继承最近父级的 _eng_id使用 L1 或最近的显式 _eng_id 拼接:
| J (checking) | W (path) 格式 |
|---|---|
by_checker | Group:$unit::{module_name}_fcov::cg_{feature_eng_id}.cp_{sub_eng_id} |
by_direct_tc | Group:$unit::{module_name}_direct_fcov::direct_{feature_eng_id}_{sub_eng_id} |
by_assertion | Group:$unit::{module_name}_assert::assert_{feature_eng_id}_{sub_eng_id} |
其中 {sub_eng_id} 优先使用当前 L2 的 _eng_id,如 L2 无则使用 L1 的 _eng_id。
_confidence 必须为 inferredremarks 字段必须以 ⚠ [推断] 开头review_items【配置】 和 【激励】 文本在 xlsx 中显示为 红色字体FF0000fs_reg_slv_review.md,只向用户提问一次HIGH: 核心功能、关键路径、Must-have 场景MID: 次要功能、常见异常场景LOW: 边界条件、低概率场景MID,核心功能提升为 HIGHdocx_path、reg_xlsx_path 或输出目录不存在/nbl-docx-to-markdown skill 执行失败或输出为空pandoc)作为备用spec_tree.json 中 chapters 里没有元素包含非空的 features#、## 等)registers 数组为空【配置】 部分将依赖 spec_tree 中的寄存器引用)testplan_func_raw.json 结构是否符合 Section 5 schematestplan_template.xlsx 是否存在testplan_func_raw.json 中 subfeatures 嵌套是否正确对于任何未明确列出的错误:
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub nebula-matrix/nebula-matrix-skills --plugin nbl-ic-verification