| name | chip-cbb-decision |
| description | Use when deciding whether to abstract RTL logic as a reusable CBB module. Triggers on 'CBB', '复用', '抽象', '可复用模块', 'CBB决策', 'reuse', 'abstraction'. Evaluates interface standardization, parameterization, self-containment and reuse value. |
| tools | ["Read","Grep","Glob"] |
CBB 抽象决策器
评估 RTL 逻辑是否应该抽象为 CBB 模块。chip-code-writer 在模块结构规划阶段调用。
输入
| 参数 | 类型 | 必需 | 说明 |
|---|
| logic_description | string | 是 | 待评估逻辑的功能描述 |
| interface_signals | object[] | 是 | 接口信号列表(名称、方向、位宽) |
| reuse_scenarios | string[] | 是 | 潜在复用场景描述 |
| param_candidates | string[] | 否 | 可参数化的候选参数 |
输出
| 参数 | 类型 | 说明 |
|---|
| decision | string | abstract_to_cbb / keep_inline |
| score | object | 四维度评分 |
| reason | string | 决策理由 |
| cbb_spec | object | 如决定抽象,输出 CBB 规格建议 |
四维度评估
维度 1:接口标准化(权重 30%)
| 分值 | 条件 |
|---|
| 3 | 输入输出格式可在 3+ 场景完全复用,无需修改 |
| 2 | 输入输出格式可在 2 场景复用,需少量参数调整 |
| 1 | 接口高度定制化,仅当前场景适用 |
维度 2:参数可配置(权重 25%)
| 分值 | 条件 |
|---|
| 3 | 核心参数(位宽、深度、通道数等)全部可通过 parameter 化 |
| 2 | 部分参数可配置,部分硬编码 |
| 1 | 核心逻辑依赖运行时值,无法参数化 |
维度 3:功能自包含(权重 25%)
| 分值 | 条件 |
|---|
| 3 | 不依赖外部上下文或状态,纯组合/时序逻辑 |
| 2 | 依赖少量外部信号(如时钟、复位、使能) |
| 1 | 依赖模块特定的上下文数组或状态 |
维度 4:复用价值(权重 20%)
| 分值 | 条件 |
|---|
| 3 | 至少 3 处使用,或代码量 > 100 行 |
| 2 | 2 处使用,或代码量 50~100 行 |
| 1 | 仅 1 处使用,且代码量 < 50 行 |
决策规则
总分 = Σ(维度分值 × 权重)
总分 ≥ 2.4 → abstract_to_cbb
总分 < 2.4 → keep_inline
强制不抽象条件(任一满足直接 keep_inline)
- 动态范围:搜索/迭代次数由运行时值决定
- 位图依赖:有效性检查依赖动态位图/掩码
- 上下文耦合:需要访问模块特定的上下文数组
- 接口不兼容:与标准 CBB 接口差异 > 3 个信号
执行步骤
读取输入 → 四维度评分 → 检查强制不抽象条件 → 输出决策
输出格式
## CBB 抽象决策报告
**逻辑描述**:{logic_description}
### 四维度评分
| 维度 | 分值 | 权重 | 加权分 | 理由 |
|------|------|------|--------|------|
| 接口标准化 | {N}/3 | 30% | {N} | {理由} |
| 参数可配置 | {N}/3 | 25% | {N} | {理由} |
| 功能自包含 | {N}/3 | 25% | {N} | {理由} |
| 复用价值 | {N}/3 | 20% | {N} | {理由} |
| **总分** | - | - | **{N}** | - |
### 强制不抽象检查
{逐项检查结果}
### 决策结论
**决策**:{abstract_to_cbb / keep_inline}
**理由**:{reason}
### CBB 规格建议(仅 abstract_to_cbb 时输出)
| 字段 | 内容 |
|------|------|
| 建议模块名 | `{module}_{type}_cbb` |
| 参数列表 | `{param1}`, `{param2}`, ... |
| 接口定义 | {端口列表概要} |
| 复用场景数 | {N} |
工具列表
Read:读取现有 CBB 文档和 RTL
Grep:搜索复用场景和 CBB 引用
Glob:查找现有 CBB 模块文件
实战案例
| 场景 | 决策 | 总分 | 原因 |
|---|
| rr_arbiter (4ch RAM 仲裁) | abstract_to_cbb | 2.8 | 接口固定(req_vec→grant_idx)、参数可配(CH_NUM)、4处复用 |
| dqid 映射 RR | keep_inline | 1.2 | 动态范围(sqinfo_dqid_map_num)、位图依赖(dqid_full_bitmap) |
| sync_fifo | abstract_to_cbb | 3.0 | 标准接口、完全参数化、10+ 处复用 |
| debubble buffer | keep_inline | 1.5 | 接口定制化、仅 1 处使用 |
使用示例
示例 1:评估仲裁器是否抽象为 CBB
用户:4 通道 RR 仲裁器,接口是 req_vec/grant_idx,有 4 处用到,帮我判断要不要抽象成 CBB
预期行为:接口标准化(3) + 参数可配(3) + 功能自包含(2, 依赖 clk/rst_n) + 复用价值(3) = 总分 2.75 ≈ 2.8 → abstract_to_cbb
示例 2:评估是否抽象为 CBB
用户:dqid 映射逻辑,依赖动态位图,只有 1 处用到
预期行为:命中强制不抽象条件(位图依赖)→ keep_inline
异常处理
| 场景 | 触发条件 | 处理动作 |
|---|
| 输入信息不完整 | 缺少接口信号或复用场景 | 使用默认评分(各维度 2 分),标注 [INPUT-INCOMPLETE] |
| Wiki 无 CBB 文档 | 无法查到现有 CBB | 基于通用知识判断,标注 [WIKI-MISSING] |
| 评分边界值 | 总分恰好 2.4 | 列出两种决策的利弊,用户选择 |
| 复用场景不明确 | 用户无法列出具体场景 | 基于接口标准化和参数化评分,降低复用价值权重 |
检查点
- 检查前:展示逻辑描述和接口信号列表,确认输入完整
- 检查后:展示四维度评分和决策结论,用户确认后输出 CBB 规格建议
降级策略
- 输入信息不完整 → 使用默认评分(各维度 2 分),标注
[INPUT-INCOMPLETE]
- Wiki 无 CBB 文档 → 基于通用知识判断,标注
[WIKI-MISSING]