Files
CGA-bench/TBgen_App/README.md
2026-05-22 10:02:42 +08:00

10 KiB
Raw Permalink Blame History

TBgen_App - 自动化 Testbench 生成工具

基于 CorrectBench 的多阶段自动化 Testbench 生成工具,支持根据 DUT 和项目描述生成 Verilog Testbench。

功能特性

  • 多阶段流程: TBgen → TBsim → TBcheck → CGA → TBeval
  • 多种模型支持: Qwen, GPT, Claude 等主流 LLM
  • 自动化评估: 支持覆盖率评估和 Mutant Kill 检测
  • 灵活配置: 通过 YAML 配置文件自定义各项参数

目录结构

TBgen_App/
├── config/                  # 配置文件夹
│   ├── config.py            # 配置加载模块
│   ├── default.yaml         # 默认配置
│   └── key_API.json         # API密钥需用户填写
├── autoline/                 # 核心流程模块
│   ├── TB_autoline.py       # 主流程编排
│   ├── TB1_gen.py           # TB生成
│   ├── TB2_syncheck.py      # 语法检查
│   ├── TB3_funccheck.py     # 功能检查
│   ├── TB4_eval.py          # 评估
│   └── TB_cga.py            # CGA优化
├── prompt_scripts/           # Prompt脚本
├── data/                    # 数据集管理
├── utils/                   # 工具函数
├── LLM_call.py              # LLM调用
├── loader_saver.py          # 文件加载保存
├── main.py                  # 命令行入口
├── run_tbgen.py             # Python API
├── requirements.txt
└── README.md

使用前配置

1. 安装依赖

cd TBgen_App

# 创建虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt
pip install matplotlib

2. 配置 API 密钥(必须)

编辑 config/key_API.json,填入您的 API 密钥:

{
    "OPENAI_API_KEY": "your-openai-key",
    "ANTHROPIC_API_KEY": "your-anthropic-key",
    "dashscope": "your-dashscope-key"
}

注意: 当前工具主要使用 dashscope (Qwen模型)请确保填入有效的阿里云API密钥。

3. 选择模型

配置文件位置: config/custom.yaml

支持的模型:

  • Qwen: qwen-max, qwen-plus, qwen-cursor
  • GPT: gpt-4o, gpt-4o-mini, gpt-4-turbo
  • Claude: claude-3-5-sonnet, claude-3-opus

修改位置 (第6行):

gpt:
    model: "qwen-max"  # 修改这里选择模型

例如使用 GPT-4o:

gpt:
    model: "gpt-4o"

注意: 当前工具主要使用 dashscope (Qwen模型),请确保在 config/key_API.json 中填入有效的阿里云API密钥。


使用方法

方式一:配置文件运行(推荐)

  1. 修改配置文件 config/custom.yaml
autoline:
    probset:
        path: "/home/zhang/CorrectBench/data/HDLBits/HDLBits_data.jsonl"
        only: ['fsm_ps2']  # 指定要运行的题目
gpt:
    model: "qwen-max"  # 指定模型
save:
    root: "./output/fsm_ps2/"  # 指定输出目录
  1. 运行
cd /home/zhang/CorrectBench/TBgen_App
source venv/bin/activate
./venv/bin/python -c "
import sys
sys.path.insert(0, '.')
from autoline.TB_autoline import run_autoline
run_autoline()
"

输入说明

1. dut_code / -d DUT文件

必需。DUT的完整Verilog代码包括

  • module声明
  • 所有端口定义
  • 实现逻辑

2. description / -w 描述文件

必需。项目需求描述,应该包含:

  • 功能说明
  • 输入输出规格
  • 端口定义
  • 特殊要求或边界条件

示例:

一个8位无符号乘法器
- 输入: a[7:0], b[7:0] (8位无符号数)
- 输出: y[15:0] (16位乘积)
- 复位: rst (同步高有效)
- 时钟: clk (上升沿触发)

3. header / --header

必需。DUT的module声明行用于提取端口信息。

格式: module module_name(端口列表);

示例:

module multiplier(input clk, input rst, input [7:0] a, input [7:0] b, output reg [15:0] y);

输出说明

1. 主输出目录

output/{task_id}/
└── {task_id}/
    ├── final_TB.v          # 最终Verilog Testbench
    ├── final_TB.py         # Python校验脚本
    ├── run_info.json       # 运行信息
    └── run_info_short.json # 简化运行信息

2. 完整输出目录(含中间文件)

output/{task_id}/{task_id}/
├── final_TB.v              # 最终TB
├── final_TB.py             # Python Checker
├── run_info.json           # 详细运行信息
├── 1_TBgen/                # TB生成阶段
│   ├── stage_0.txt         # LLM对话 (Circuit Type检测)
│   ├── stage_1.txt         # LLM对话 (Spec生成)
│   ├── stage_2.txt         # LLM对话 (Scenario生成)
│   ├── stage_3.txt         # LLM对话 (Python规则生成)
│   ├── stage_4.txt         # LLM对话 (TB代码生成)
│   ├── stage_4b.txt        # LLM对话 (SEQ优化)
│   ├── stage_5.txt         # LLM对话 (Pychecker代码)
│   ├── stage_checklist.txt # Checklist检查
│   └── TBgen_codes/        # 生成的TB代码
│       ├── {task_id}_tb.v  # TB Verilog代码
│       └── {task_id}_tb.py # TB Python Checker
└── ...

3. 返回结果字典

{
    "TB_code_v": "...",      # TB Verilog代码
    "TB_code_py": "...",      # TB Python代码
    "run_info": {...},        # 详细运行信息
    "cga_coverage": 0.0,      # CGA覆盖率
    "full_pass": None         # 是否全部通过
}

配置文件详解

配置文件位于 config/custom.yaml,所有参数修改在此文件中进行。

1. 指定要运行的题目

autoline:
    probset:
        path: "/home/zhang/CorrectBench/data/HDLBits/HDLBits_data.jsonl"
        only: ['fsm_ps2']  # 只运行 fsm_ps2 题目

如需运行多个题目:

only: ['fsm_ps2', 'rule110', 'lemmings3']

2. 指定模型

编辑 config/custom.yaml,修改 gpt.model 字段:

gpt:
    model: "qwen-max"  # 可选: qwen-max, qwen-plus, gpt-4o, gpt-4o-mini, claude-3-5-sonnet 等

支持的模型列表:

模型 model 参数值
Qwen Max qwen-max
Qwen Plus qwen-plus
GPT-4o gpt-4o
GPT-4o Mini gpt-4o-mini
Claude 3.5 Sonnet claude-3-5-sonnet
Claude 3 Opus claude-3-opus

3. 指定输出目录

save:
    root: "/home/zhang/CorrectBench/TBgen_App/output/fsm_ps2/"

4. 运行模式

autoline:
    onlyrun: "TBgensimeval"  # 生成+检查+评估(不含CGA)
    # onlyrun: null           # 完整流程 (gen→sim→check→cga→eval)
    # onlyrun: "TBgen"        # 仅生成TB
    # onlyrun: "TBgensim"     # 生成+语法检查

5. CGA 覆盖率优化

autoline:
    cga:
        enabled: True           # 是否启用 CGA
        max_iter: 10            # 最大迭代次数
        target_coverage: 100.0  # 目标覆盖率

6. API 密钥配置

编辑 config/key_API.json:

{
    "OPENAI_API_KEY": "your-openai-key",
    "ANTHROPIC_API_KEY": "your-anthropic-key",
    "dashscope": "your-dashscope-key"
}

然后在 config/custom.yaml 中指定密钥路径:

gpt:
    key_path: "config/key_API.json"

注意: 当前工具主要使用 dashscope (Qwen模型)请确保填入有效的阿里云API密钥。


注意事项

1. 必须配置项

修改文件 config/custom.yaml

  • gpt.key_path - API密钥文件默认为 config/key_API.json
  • config/key_API.json - 填入有效的 API 密钥
  • autoline.probset.only - 指定要运行的题目
  • gpt.model - 选择使用的模型(在 config/custom.yaml 第6行

2. Header格式要求

必须与DUT代码中的module声明一致:

// 正确
header = "module foo(input clk, output [7:0] y);"

// 错误 - 缺少分号
header = "module foo(input clk, output [7:0] y)"

3. 时序逻辑DUT

如果DUT是时序逻辑always块header中必须使用 output reg 而非 output wire:

header = "module foo(input clk, input rst, output reg [7:0] y);"

4. 关于CGA优化

CGA (Coverage-Guided Agent) 优化可以提升测试覆盖率,但会增加运行时间。

config/custom.yaml 中设置:

autoline:
    cga:
        enabled: True    # 启用 CGA
        # enabled: False # 禁用 CGA快速测试

5. 运行时间

完整流程运行时间取决于:

  • LLM模型响应速度
  • DUT复杂度
  • 是否启用CGA优化

6. 常见错误

错误信息 原因 解决方法
API Key not found key_API.json配置错误 检查并填入有效密钥
ModuleNotFoundError 依赖未安装 pip install -r requirements.txt
AutoLogger...AttributeError 初始化顺序问题 确保使用正确的运行命令
timeout LLM响应超时 降低复杂度或切换模型

运行示例

方式一:使用配置文件运行(推荐)

通过 config/custom.yaml 配置题目,然后运行:

cd /home/zhang/CorrectBench/TBgen_App
source venv/bin/activate
./venv/bin/python -c "
import sys
sys.path.insert(0, '.')
from autoline.TB_autoline import run_autoline
run_autoline()
"

方式二Python API

cd /home/zhang/CorrectBench/TBgen_App
source venv/bin/activate
./venv/bin/python -c "
import sys
sys.path.insert(0, '.')
from run_tbgen import generate_tb

dut_code = '''module multiplier(
    input clk,
    input rst,
    input [7:0] a,
    input [7:0] b,
    output reg [15:0] y
);
    always @(posedge clk) begin
        if (rst) y <= 16'b0;
        else y <= a * b;
    end
endmodule'''

description = '一个8位乘法器'

header = 'module multiplier(input clk, input rst, input [7:0] a, input [7:0] b, output reg [15:0] y);'

tb_path, result = generate_tb(
    dut_code=dut_code,
    description=description,
    header=header,
    task_id='multiplier_test',
    model='qwen-max',
    enable_cga=True
)
print(f'TB saved to: {tb_path}')
print(f'Coverage: {result.get(\"cga_coverage\", 0)}')
"

配置文件说明

编辑 config/custom.yaml 中的 autoline.probset.only 指定要运行的题目:

autoline:
    probset:
        path: "/path/to/HDLBits_data.jsonl"
        only: ['fsm_ps2', 'rule110']  # 指定题目列表

运行结果保存在 save.root 指定的目录下。


License

本项目基于 CorrectBench 构建。