# Chip Cbb Decision

> 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.

- Skill: `zhaixin244-wq/chip-cbb-decision` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zhaixin244-wq/chip-cbb-decision`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhaixin244-wq/chip-cbb-decision/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zhaixin244-wq (https://skillmd.com/u/zhaixin244-wq)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zhaixin244-wq/chip-cbb-decision

---


# 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）

1. **动态范围**：搜索/迭代次数由运行时值决定
2. **位图依赖**：有效性检查依赖动态位图/掩码
3. **上下文耦合**：需要访问模块特定的上下文数组
4. **接口不兼容**：与标准 CBB 接口差异 > 3 个信号

## 执行步骤

```
读取输入 → 四维度评分 → 检查强制不抽象条件 → 输出决策
```

## 输出格式

```markdown
## 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]`

