chip-impl-self-check

star 19

Use when performing final self-check on RTL implementation before delivery. Triggers on '自检', 'self-check', 'self check', '实现自检', 'quality checklist', 'IC-01', 'IM-01', '检查清单'. Runs IC-01~39 + IM-01~08 implementation quality checklist.

zhaixin244-wq By zhaixin244-wq schedule Updated 5/18/2026

name: chip-impl-self-check description: "Use when performing final self-check on RTL implementation before delivery. Triggers on '自检', 'self-check', 'self check', '实现自检', 'quality checklist', 'IC-01', 'IM-01', '检查清单'. Runs IC-0139 + IM-0108 implementation quality checklist."

自检 Skill

任务

工具化检查通过后,按 quality-checklist-impl.md 执行三阶段自检。

输入

  • rtl_files: RTL 文件列表
  • lint_report: Lint 报告
  • synth_report: 综合报告
  • microarch_doc: 微架构文档

三阶段自检

  1. 文件发现:用 Glob 搜索 {module}_work/ds/rtl/*.v 获取 RTL 文件列表,确认 .claude/shared/quality-checklist-impl.md 存在。若文件不存在,暂停并提示用户

  2. 第一阶段(自动化 — 可脚本化)

以下检查项均有对应 Grep 脚本模式,可批量执行。

IC 检查项 Grep 脚本模式
IC-06 无不可综合结构 grep -n 'initial|#.*delay|force|release|\$display|\$finish' {file}.v
IC-07 位宽匹配 grep -n "= [0-9]*'[bdh]" {file}.v + 人工核对位宽前缀
IC-13 无 casex/casez grep -n 'casex|casez' {file}.v → 命中即 FAIL
IC-22 子模块名称关联 grep -n '^\s*\w\+\s\+\w\+\s*(' {file}.v → 检查是否用 . 开头
IC-34 扫描使能路径 grep -n 'CKLNQD1|ICG|scan_en' {file}.v → 检查 scan_en 端口
IC-35 注释覆盖率 >30% total=$(grep -c '.' {file}.v); comment=$(grep -c '//' {file}.v); echo "$comment*100/$total"
IC-36 always 行数 ≤100 awk '/always.*begin/{start=NR} /end/{if(start)print NR-start+1; start=0}' {file}.v

自动化 Grep 脚本模板

#!/bin/bash
# chip-impl-self-check: 第一阶段自动化检查
# 用法: bash self_check_phase1.sh {file}.v

FILE=$1
FAIL=0

echo "=== IC-06: 不可综合结构 ==="
if grep -qn 'initial\|#.*delay\|force\|release\|\$display\|\$finish' "$FILE"; then
    echo "FAIL: 发现不可综合结构"
    grep -n 'initial\|#.*delay\|force\|release\|\$display\|\$finish' "$FILE"
    FAIL=1
else
    echo "PASS"
fi

echo "=== IC-13: 无 casex/casez ==="
if grep -qn 'casex\|casez' "$FILE"; then
    echo "FAIL: 发现 casex/casez"
    grep -n 'casex\|casez' "$FILE"
    FAIL=1
else
    echo "PASS"
fi

echo "=== IC-22: 子模块名称关联 ==="
# 检查实例化行是否以 .port_name 格式连接
INST_LINES=$(grep -n '^\s*[a-zA-Z_]\+\s\+[a-zA-Z_]\+\s*(' "$FILE" | grep -v 'module\|function\|task')
if [ -n "$INST_LINES" ]; then
    # 检查下一行是否以 . 开头
    echo "WARN: 请人工确认以下实例化是否使用名称关联:"
    echo "$INST_LINES"
fi

echo "=== IC-35: 注释覆盖率 ==="
TOTAL=$(grep -c '.' "$FILE")
COMMENT=$(grep -c '//' "$FILE")
if [ "$TOTAL" -gt 0 ]; then
    RATIO=$((COMMENT * 100 / TOTAL))
    if [ "$RATIO" -lt 30 ]; then
        echo "FAIL: 注释覆盖率 ${RATIO}% < 30%"
        FAIL=1
    else
        echo "PASS: 注释覆盖率 ${RATIO}%"
    fi
fi

echo "=== IC-36: always 块行数 ==="
awk '/always.*begin/{start=NR} /end/{if(start && NR-start+1>100) print "FAIL: always块行数="NR-start+1" > 100 (行"start"-"NR")"; start=0}' "$FILE"

echo "=== 组合逻辑默认值检查 ==="
# 检查 always @(*) 块开头是否有默认赋值
awk '/always @\(\*\)/{found=1; next} found && /begin/{block=1; next} block && /\w+\s*=\s*/{if(!default_set){print "WARN: always @(*) 可能缺少默认赋值 (行"NR")"} default_set=1; block=0; found=0} block && /end/{block=0; found=0}' "$FILE"

echo "=== case default 检查 ==="
# 检查 case 是否有 default
awk '/case\s*\(/{case_start=NR; in_case=1} in_case && /default/{has_default=1} in_case && /endcase/{if(!has_default && case_start) print "WARN: case 可能缺少 default (行"case_start")"; in_case=0; has_default=0; case_start=0}' "$FILE"

echo "=== generate 标签检查 ==="
# 检查 generate 块是否有标签
awk '/generate/{gen=1} gen && /begin\s*:/{} gen && /begin\s*$/{if(gen) print "WARN: generate 块可能缺少标签 (行"NR")"} gen && /endgenerate/{gen=0}' "$FILE"

exit $FAIL
  1. 第二阶段(编码规范)

    IC 检查项 检查方法
    IC-01 寄存器有复位值 grep always @(posedge clk 检查 reset 分支
    IC-02 无 latch always @(*) 所有输出有默认值
    IC-03 赋值规则 时序 <=,组合 =,不混用
    IC-04 case 有 default grep case 检查 default
    IC-05 无门控时钟 仅使用标准 ICG
    IC-08 SVA 在 ifdef 内 所有 SVA 在 ifdef ASSERT_ON
    IC-09 Interface 不含逻辑 无 always/assign/initial
    IC-10 参数化位宽 无硬编码 [31:0]
    IC-11 generate 有标签 所有 generate 块有 begin/end 标签
    IC-12 文件头完整 Module/Function/Author/Date/Revision
    IC-14 无组合环路 valid 不依赖 ready
    IC-15 if-else 补全 所有 if 有 else
    IC-16 异步信号已同步 跨域信号经同步链
    IC-17 低有效极性 if (!rst_n)
    IC-18 FIFO 深度为 2 的幂 深度 = 2^n
    IC-19 无未连接端口 所有端口已连接
    IC-20 task/function 规范 禁止 task
    IC-21 always 敏感列表完整 组合用 @(*)
  2. 第三阶段(设计模式+DFT+矛盾检测)

    IC/IM 检查项 检查方法
    IC-23 Credit 流控合规 credit 归零立即反压
    IC-24 流水线每级有 valid 无省略的流水级
    IC-25 SRAM 写冲突仲裁 同地址同周期写有优先级
    IC-26 flush 可清除所有级 flush 高于 stall
    IC-27 多通道无耦合 通道间无耦合
    IC-28 握手稳定性 valid 保持稳定
    IC-29 数据稳定性 valid&&ready 时数据稳定
    IC-30 寄存器可入扫描链 无不可扫描结构
    IC-31 无异步置位 仅异步复位
    IC-32 无门控时钟 仅标准 ICG
    IC-33 无组合反馈环 lint 无反馈环警告
    IC-37 always 信号数 <5 单块生成信号 <5
    IC-38 信号分组 语义相近同块
    IC-39 总线分域赋值 按功能域分段赋值
    IM-01 端口位宽一致 RTL 与微架构 §4.1 一致
    IM-02 FSM 状态完整 微架构 §5.3 状态在 RTL 中存在
    IM-03 FIFO 深度一致 RTL 与微架构 §5.5 一致
    IM-04 CBB 参数一致 RTL 与微架构 §5.6 一致
    IM-05 背压链路完整 微架构 §5.2 反压路径在 RTL 中存在
    IM-06 SVA 完整 微架构 §10 验证场景已实现
    IM-07 SDC 时钟一致 RTL SDC 与微架构 §6 一致
    IM-08 CBB 引用标注 使用 CBB 有 // CBB Ref

输出

  • self_check_report: 自检报告(通过/失败项列表)

Gate

IC-0139 + IM-0108 全部通过。

Metrics

执行完成后记录到 {work_dir}/ds/report/metrics/self_check.json

{"stage_id": "self_check", "duration_ms": 0, "iteration_count": 1}

iteration_count 记录自检修复循环实际迭代次数。

失败处理

  • 逐项修复后重新执行对应阶段
  • 第一阶段失败 → 修复后重新执行第一阶段
  • 第二阶段失败 → 修复后重新执行第二阶段
  • 第三阶段失败 → 修复后重新执行第三阶段

使用示例

示例 1

  • 用户:「data_adpt RTL 已通过 Lint 和综合,执行自检」
  • 行为:第一阶段自动化 Grep 检查(IC-06 不可综合结构、IC-13 casex/casez、IC-35 注释覆盖率等),第二阶段编码规范逐项检查,第三阶段设计模式+DFT 检查,输出自检报告

示例 2

  • 用户:「帮我检查 buf_mgr 的 always 块是否超过 100 行」
  • 行为:执行第一阶段 IC-36 检查,用 awk 分析每个 always 块行数,超过 100 行的标注 FAIL 并列出位置

异常处理

场景 触发条件 处理动作
RTL 文件不存在 文件路径无效 暂停,提示先完成 RTL 实现
自检全部通过但 Lint 失败 自检与 Lint 结果矛盾 以 Lint 报告为准,标注差异项
修复循环超限 反复修复仍不通过 暂停,输出失败项历史,等待人工介入
微架构文档缺失 无法执行 IM-01~08 检查 跳过第三阶段 IM 检查,标注 [IM-SKIPPED]

检查点

检查前

  • 确认 RTL 文件列表非空
  • 确认 Lint 报告和综合报告已生成
  • 确认微架构文档存在(用于 IM-01~08)

检查后

  • 确认 IC-01~39 全部通过
  • 确认 IM-01~08 全部通过(微架构文档存在时)
  • 确认自检报告已输出
  • 确认 metrics 已写入 {work_dir}/ds/report/metrics/self_check.json
Install via CLI
npx skills add https://github.com/zhaixin244-wq/fnw --skill chip-impl-self-check
Repository Details
star Stars 19
call_split Forks 7
navigation Branch main
article Path SKILL.md
More from Creator
zhaixin244-wq
zhaixin244-wq Explore all skills →