OpenClaw帮我做了件我一直想做的事情。
一直想串一下基于全开源EDA flow的芯片设计流程,但其中有大量的工具的安装和工具flows的使用,需要耗费大量的精力,OpenClaw用了一天时间帮我串了整个流程。
🎯设计目标
- 基于 PicoSoC 架构的增强版 RISC-V SoC
- 集成多种常用外设 (UART, GPIO, I2C, PWM, Timer, SPI)
- 适用于嵌入式控制和物联网应用
- 目标频率: 100 MHz
- 工艺节点: SkyWater 130nm (sky130hd)
📄芯片SPEC
顶层规格
| 参数 | 规格 | 备注 |
|---|---|---|
| 处理器架构 | RISC-V RV32IM | 32位整数+乘除法 |
| 指令集 | RV32I + M + C | 基础整数+乘除+压缩 |
| 系统时钟 | 100MHz | PLL从20MHz倍频 |
| 复位方式 | 异步复位,同步释放 | 低电平有效 |
| 工作电压 | 1.8V (数字) | SkyWater 130nm |
| 工艺节点 | 130nm | SkyWater开源PDK |
| 标准单元 | sky130_fd_sc_hd | 高密度单元库 |
性能规格
| 指标 | 目标 | 实测/估计 |
|---|---|---|
| DMIPS/MHz | >1.0 | ~1.2 (估计) |
| CoreMark/MHz | >2.0 | ~2.5 (估计) |
| 功耗 | 待测量 | |
| 门数 | 381,865 | |
| 面积 | - |
系统架构
(OpenClaw自己瞎画的,看个乐就行)

模块清单
| 模块名称 | 描述 | 来源 | 状态 |
|---|---|---|---|
| riscv_soc | 顶层模块 | 自定义 | ✅ |
| picorv32 | RISC-V CPU 核心 | 开源 | ✅ |
| picosoc_mem | 片上 RAM | 开源 | ✅ |
| simpleuart | UART 控制器 | 开源 | ✅ |
| spimemio | SPI Flash 接口 | 开源 | ✅ |
| crg | 时钟复位生成 | 自定义 | ✅ |
| pll | 锁相环 | 自定义 | ✅ |
| gpio_apb | GPIO 控制器 | 自定义 | ✅ |
| timer_apb | 定时器 | 自定义 | ✅ |
| i2c_apb | I2C 控制器 | 自定义 | ✅ |
| pwm_apb | PWM 控制器 | 自定义 | ✅ |
处理器规格
CPU 核心 (PicoRV32)
| 参数 | 规格 |
|---|---|
| 架构 | RV32IMC (32位 RISC-V) |
| 指令集 | RV32I + M (乘法) + C (压缩) |
| 流水线 | 单周期执行 |
| 寄存器 | 32个通用寄存器 |
| 乘法器 | 硬件乘法 (单周期) |
| 除法器 | 硬件除法 (多周期) |
| Barrel Shifter | 硬件移位器 |
| 压缩指令 | 支持 (RVC) |
| 中断 | 支持 32 个中断源 |
| 计数器 | 支持 (MCYCLE, MINSTRET) |
内存规格
片上 RAM
| 参数 | 规格 |
|---|---|
| 类型 | SRAM (触发器实现) |
| 容量 | 16 KB (4096 × 32-bit) |
| 字宽 | 32-bit |
| 字节使能 | 4-bit (支持字节/半字/字访问) |
| 地址范围 | 0x0000_0000 - 0x0000_3FFF |
物理规格
工艺信息
| 参数 | 规格 |
|---|---|
| 工艺节点 | SkyWater 130nm |
| 库类型 | sky130hd (高密度) |
| 电压 | 1.8V (数字), 3.3V (IO) |
| 温度 | 25°C (典型) |
物理规格
| 参数 | 数值 | 单位 |
|---|---|---|
| 芯片尺寸 | 3.14 × 3.14 | mm |
| 芯片面积 | 9.86 | mm² |
| 利用率 | 51 | % |
| 标准单元数 | 381,865 | 个 |
| 触发器数 | 133,682 | 个 |
| 金属层数 | 5 | 层 (met1-met5) |
| 引脚数 | 54 | 个 |
| 主要单元类型 | DFF, AOI, NAND, NOR, BUF | - |
🔧 完整工具链
RTL的开发和集成:根据指令下载开源IP或自研IP
安装工具:开源工具的安装由OpenClaw自己安装,碰到问题再干预
各种工具的flow:OpenClaw接收指令自动去写脚本,执行并纠错
┌─────────────────────────────────────────────────────────────────────────────┐│ RTL 设计阶段 (Design) │├─────────────────────────────────────────────────────────────────────────────┤│ 1. 架构设计 ││ ├── 规格定义 (Excel/Word) ││ ├── 架构图 (Draw.io/Visio) ││ └── 微架构文档 (Markdown) ││ ││ 2. RTL 编码 ││ ├── 编辑器: Vim / VSCode ││ ├── 语言: Verilog-2001 / SystemVerilog ││ └── 版本控制: Git ││ ││ 3. Lint 检查 ⭐ 新增 ││ ├── 工具: Verilator --lint-only ││ ├── 工具: svlint ││ └── 检查项: 语法/可综合性/命名规范/风格 ││ ││ 4. 代码审查 ││ ├── 工具: GitHub/GitLab PR ││ └── 检查项: 功能/时序/面积/功耗 │└─────────────────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────────────────┐│ 功能验证阶段 (Verification) │├─────────────────────────────────────────────────────────────────────────────┤│ 5. 测试平台搭建 ││ ├── 仿真器: Icarus Verilog ││ ├── 波形查看: GTKWave ││ └── 测试框架: cocotb (可选) ││ ││ 6. 单元测试 ││ ├── 模块级测试 (Module Test) ││ ├── 集成测试 (Integration Test) ││ └── 系统测试 (System Test) ││ ││ 7. 回归测试 ││ ├── 工具: Makefile自动化 ││ └── 覆盖率: 代码覆盖率/功能覆盖率 ││ ││ 8. 形式验证 (Formal Verification) ⭐ 可选 ││ ├── 工具: SymbiYosys ││ └── 检查: 属性检查/等价性检查 │└─────────────────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────────────────┐│ 逻辑综合阶段 (Synthesis) │├─────────────────────────────────────────────────────────────────────────────┤│ 9. RTL 综合 ││ ├── 工具: Yosys ││ ├── 库: sky130_fd_sc_hd ││ └── 输出: 门级网表 (synth.v) ││ ││ 10. 逻辑优化 ││ ├── 工具: ABC (集成在Yosys中) ││ ├── 优化: 面积/时序/功耗 ││ └── 输出: 优化后门级网表 ││ ││ 11. DFF 映射 ││ ├── 工具: dfflibmap (Yosys) ││ └── 映射: 标准单元DFF ││ ││ 12. 综合后仿真 ⭐ 新增 ││ ├── 工具: Icarus Verilog + 标准单元库 ││ └── 验证: 综合后网表功能正确性 │└─────────────────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────────────────┐│ 物理设计阶段 (Physical Design) │├─────────────────────────────────────────────────────────────────────────────┤│ 13. 导入设计 ││ ├── 工具: OpenROAD (init) ││ ├── 输入: 综合网表 + 约束文件(SDC) ││ └── 输出: 初始数据库 (1_1_yosys.odb) ││ ││ 14. 布局 (Floorplan) ││ ├── 工具: OpenROAD (floorplan) ││ ├── 步骤: ││ │ ├── 芯片尺寸定义 ││ │ ├── IO引脚布局 ││ │ ├── 宏单元布局 (如果有) ││ │ └── 电源环规划 ││ └── 输出: 2_floorplan.odb ││ ││ 15. 电源网络 (PDN) ││ ├── 工具: OpenROAD (pdn) ││ ├── 步骤: ││ │ ├── 电源环生成 ││ │ ├── 电源条带生成 ││ │ └── 电源连接 ││ └── 输出: 2_4_floorplan_pdn.odb ││ ││ 16. 放置 (Placement) ││ ├── 工具: OpenROAD (place) ││ ├── 步骤: ││ │ ├── 全局放置 (Global Placement) ││ │ ├── 详细放置 (Detailed Placement) ││ │ ├── 时序优化 ││ │ └── 拥塞优化 ││ └── 输出: 3_place.odb ││ ││ 17. 时钟树综合 (CTS) ││ ├── 工具: OpenROAD (cts) ││ ├── 步骤: ││ │ ├── 时钟树综合 ││ │ ├── 时钟缓冲器插入 ││ │ ├── 时钟网格生成 ││ │ └── 时钟偏斜优化 ││ └── 输出: 4_cts.odb ││ ││ 18. 布线 (Routing) ││ ├── 工具: OpenROAD (route) ││ ├── 步骤: ││ │ ├── 全局布线 (Global Route) ││ │ ├── 详细布线 (Detailed Route) ││ │ ├── 布线优化 ││ │ └── 天线修复 ││ └── 输出: 5_route.odb, 6_final.odb ││ ││ 19. 寄生参数提取 (PEX) ⭐ 新增 ││ ├── 工具: OpenROAD (rcx) 或 Magic ││ ├── 输出: SPEF文件 ││ └── 用途: 时序分析/功耗分析 │└─────────────────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────────────────┐│ 签核验证阶段 (Signoff) │├─────────────────────────────────────────────────────────────────────────────┤│ 20. 静态时序分析 (STA) ││ ├── 工具: OpenSTA (集成在OpenROAD中) ││ ├── 输入: 最终网表 + SPEF + SDC ││ ├── 检查: ││ │ ├── 建立时间 (Setup) ││ │ ├── 保持时间 (Hold) ││ │ ├── 时钟偏斜 (Skew) ││ │ └── 转换时间 (Transition) ││ └── 输出: 时序报告 ││ ││ 21. 物理验证 (Physical Verification) ││ ├── 21.1 DRC (设计规则检查) ││ │ ├── 工具: Magic ││ │ ├── 输入: GDS文件 ││ │ ├── 检查: 间距/宽度/面积/密度等 ││ │ └── 输出: DRC报告 ││ │ ││ ├── 21.2 LVS (版图vs原理图) ││ │ ├── 工具: Netgen ││ │ ├── 输入: GDS + 网表 ││ │ ├── 步骤: ││ │ │ ├── GDS提取网表 (Magic) ││ │ │ └── 网表对比 (Netgen) ││ │ └── 输出: LVS报告 ││ │ ││ └── 21.3 ERC (电气规则检查) ⭐ 新增 ││ ├── 工具: Magic ││ └── 检查: 开路/短路/浮空节点等 ││ ││ 22. 功耗分析 ⭐ 新增 ││ ├── 工具: OpenROAD (power) ││ ├── 输入: 最终网表 + 活动文件(VCD) ││ └── 输出: 功耗报告 ││ ││ 23. 可靠性分析 ⭐ 新增 ││ ├── 23.1 电迁移分析 (EM) ││ │ └── 工具: OpenROAD ││ ├── 23.2 压降分析 (IR Drop) ││ │ └── 工具: OpenROAD ││ └── 23.3 天线检查 ││ └── 工具: Magic │└─────────────────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────────────────┐│ 流片准备阶段 (Tapeout) │├─────────────────────────────────────────────────────────────────────────────┤│ 24. GDS 生成 ││ ├── 工具: OpenROAD 或 Magic ││ ├── 输入: 最终布局数据库 ││ └── 输出: 6_final.gds ││ ││ 25. 流片文档 ││ ├── 25.1 设计文档 ││ │ ├── 规格说明书 ││ │ ├── 架构设计文档 ││ │ └── 验证报告 ││ ├── 25.2 物理文档 ││ │ ├── 版图数据 (GDS) ││ │ ├── LEF文件 ││ │ └── 时序库 (LIB) ││ └── 25.3 签核报告 ││ ├── DRC报告 ││ ├── LVS报告 ││ └── STA报告 ││ ││ 26. 流片检查清单 (Tapeout Checklist) ││ ├── ✅ 功能验证通过 ││ ├── ✅ 时序收敛 ││ ├── ✅ DRC清洁 ││ ├── ✅ LVS通过 ││ ├── ✅ 功耗满足规格 ││ └── ✅ 文档完整 ││ ││ 27. 提交流片 (Tapeout) ││ ├── 提交GDS到代工厂 ││ ├── 提交文档到代工厂 ││ └── 等待流片完成 │└─────────────────────────────────────────────────────────────────────────────┘
项目的目录结构甚至有模有样,doc、rtl、tb、flow、sw、netlist齐全。
riscv_soc/ # 项目根目录│├── 📂 rtl/ # RTL源代码│ ├── riscv_soc_picosoc.v│ ├── crg.v│ ├── pll.v│ └── ...│├── 📂 constraints/ # 时序约束│ ├── constraint_final.sdc│ └── constraint_obfuscated.sdc│├── 📂 ips/ # 第三方IP│ ├── picorv32/ # RISC-V CPU│ └── picosoc_integration/ # SoC集成│├── 📂 tb/ # Testbench├── 📂 tests/ # 测试用例├── 📂 software/ # 软件代码│├── 📂 synthesis/ # 综合结果├── 📂 pr/ # 物理设计│ ├── floorplan/│ ├── placement/│ ├── cts/│ ├── routing/│ └── final/│├── 📂 signoff/ # 签核检查│ ├── drc/│ ├── lvs/│ └── erc/│├── 📂 docs/ # 文档│ ├── reports/ # 分析报告│ ├── images/ # 图片│ └── specs/ # 规格书│├── 📂 scripts/ # 脚本工具│ ├── synthesis/ # 综合脚本│ ├── pr/ # 物理设计脚本│ └── verification/ # 验证脚本│├── 📂 results/ # 设计结果├── 📂 outputs/ # 最终输出(GDS)│├── 📂 tools/ # EDA工具配置│ ├── openlane/│ ├── orfs/│ └── magic/│├── 📂 configs/ # 配置文件│└── 📄 README.md # 项目说明
✅ 验证报告
验证自动搭建测试平台,构造case,测试通过,并收集覆盖率,随便打开一个波形看了下,是真的有点东西

测试用例汇总
| 测试类别 | 用例数 | 通过 | 失败 |
|---|---|---|---|
| 基础功能测试 | 6 | 6 | 0 |
| 完整功能测试 | 4 | 4 | 0 |
| 覆盖率测试 | 13 | 13 | 0 |
| SPI Flash测试 | 4 | 4 | 0 |
| 总计 | 27 | 27 | 0 |
| 通过率 | 100% |
⏳代码覆盖率 (Code Coverage)
测量工具: Icarus Verilog + GTKWave
| 模块 | 当前覆盖率 | 目标 | 状态 |
|---|---|---|---|
| picorv32 | 78% | 90% | ⏳ 提升中 |
| picosoc_mem | 95% | 95% | ✅ 达标 |
| simpleuart | 85% | 90% | ⏳ 提升中 |
| gpio_apb | 90% | 90% | ✅ 达标 |
| timer_apb | 88% | 90% | ⏳ 提升中 |
| i2c_apb | 70% | 85% | ⏳ 提升中 |
| pwm_apb | 75% | 85% | ⏳ 提升中 |
| spimemio | 60% | 80% | ⏳ 提升中 |
| crg | 95% | 95% | ✅ 达标 |
总体覆盖率: 78% → 目标: 90%+
⏳功能覆盖率 (Functional Coverage)
测试平台: tb_riscv_soc_coverage.v
| 功能点 | 测试状态 | 覆盖率 |
|---|---|---|
| 复位测试 | ✅ 已测试 | 100% |
| 内存边界 | ✅ 已测试 | 90% |
| UART中断 | ✅ 已测试 | 95% |
| GPIO所有引脚 | ✅ 已测试 | 95% |
| Timer所有模式 | ✅ 已测试 | 85% |
| 所有中断源 | ✅ 已测试 | 90% |
| SPI Flash命令 | ✅ 已测试 | 80% |
| I2C事务 | ✅ 已测试 | 75% |
| PWM所有通道 | ✅ 已测试 | 85% |
| 非法指令 | ⏳ 占位 | 0% |
| 除零 | ⏳ 占位 | 0% |
| 栈溢出 | ⏳ 占位 | 0% |
| 外设组合 | ✅ 已测试 | 80% |
总体功能覆盖率: 72% → 目标: 90%+
📊 后端报告
本报告总结了RISC-V SoC项目的中后端工作当前状态,包括已完成的工作、待完成的工作
| 阶段 | 状态 | 完成度 | 关键指标 |
|---|---|---|---|
| 逻辑综合 | ✅ 完成 | 100% | 381,865门,133,682触发器 |
| 物理设计 | ✅ 完成 | 100% | 5mm²,51%利用率 |
| 时序分析 | ⚠️ 有条件 | 80% | 建立时间违例-1591ns |
| 签核验证 | ⏳ 进行中 | 60% | Magic已安装,DRC待进行 |
| 整体进度 | 有条件通过 | 85% | 预计1-2周完成 |
1️⃣ 已完成工作
1.1 逻辑综合 (100% 完成)
| 任务 | 状态 | 输出 | 说明 |
|---|---|---|---|
| RTL读取 | ✅ | - | 成功读取所有RTL文件 |
| 层次分析 | ✅ | - | 完成模块层次分析 |
| 逻辑优化 | ✅ | - | ABC优化完成 |
| 技术映射 | ✅ | - | 映射到sky130hd库 |
| DFF映射 | ✅ | - | 触发器映射完成 |
| 网表输出 | ✅ | 49MB | 最终网表生成 |
关键数据:
- 标准单元: 381,865个
- 触发器: 133,682个
- 组合逻辑: 248,183个
1.2 物理设计 (100% 完成)
| 阶段 | 状态 | 数据库 | 说明 |
|---|---|---|---|
| 初始化 | ✅ | 1_1_yosys.odb (159M) | 读取网表完成 |
| 布局 | ✅ | 2_floorplan.odb (203M) | 芯片尺寸2237×2237μm |
| PDN | ✅ | 2_4_floorplan_pdn.odb (203M) | 电源网络完成 |
| 放置 | ✅ | 3_place.odb (203M) | 所有单元已放置 |
| CTS | ✅ | 4_cts.odb (203M) | 时钟树综合完成 |
| 布线 | ✅ | 5_route.odb (211M) | 所有网络已布线 |
| 最终 | ✅ | 6_final.odb (211M) | 物理设计完成 |
关键数据:
- 芯片面积: 9.86 mm²
- 实例面积: 4.93 mm²
- 利用率: 51%
- 金属层: 5层 (met1-met5)
2️⃣ 待完成工作
2.1 时序收敛 (优先级: 高)
| 任务 | 状态 | 问题 | 解决方案 |
|---|---|---|---|
| 约束修复 | ⏳ | 端口名不匹配 | 使用实际端口名 |
| 时序优化 | ⏳ | 建立时间违例 | 降频或优化约束 |
| 时序签核 | ⏳ | 待验证 | 修复后重新分析 |
2.2 DRC检查 (优先级: 高)
| 任务 | 状态 | 工具 | 说明 |
|---|---|---|---|
| DRC运行 | ⏳ | Magic | 工具已安装,待执行 |
| DRC修复 | ⏳ | Magic | 根据结果修复 |
| DRC签核 | ⏳ | - | 清洁后通过 |
2.3 LVS检查 (优先级: 高)
| 任务 | 状态 | 工具 | 说明 |
|---|---|---|---|
| GDS提取 | ⏳ | Magic | 从GDS提取SPICE网表 |
| LVS对比 | ⏳ | Netgen | 对比版图和原理图 |
| LVS修复 | ⏳ | - | 根据结果修复 |
2.4 功耗分析 (优先级: 中)
| 任务 | 状态 | 工具 | 说明 |
|---|---|---|---|
| 功耗估算 | ⏳ | OpenROAD | 静态功耗分析 |
| 动态功耗 | ⏳ | OpenROAD | 需要VCD文件 |
| IR Drop | ⏳ | OpenROAD | 压降分析 |
| 电迁移 | ⏳ | OpenROAD | EM分析 |
前端到中后端flow到最终生成,全程一行代码不用写,只提指令。当然整个过程做出的质量是肯定有问题的,需要用户去提需求,不断迭代。
🤔对于OpenClaw的思考
对 “OpenClaw狂潮” 的一些思考
我是本地电脑部署+API买token,现阶段烧token很费钱,不用自动化工作日常使用不如直接用各家大模型
OpenClaw 主要是做一些自动化的东西,可以多agent扮演多个角色,协作做事情。AI的能力是取决于模型的能力,并不会比大模型聪明。
有长记忆功能,学习的所有数据都在自己本地,可以培养成自己专属的贾维斯。
一个不断学习你的使用习惯和需求的强大助手,随着模型的升级能力会越来越强
它可以24小时不间断工作
对于编程和各种重复性、零碎的、繁琐的工作场景完全可以胜任,并且未来的想象空间巨大
当然整个过程还是需要人工干预,对于个人生产力的提升很大,可以帮你延伸你的技能边界。取决于openclaw的技能(skills)。
芯片设计三大 EDA 厂已经推出了对应的 AI 辅助设计工具,开始芯片设计的方式和工作方式会发生很大的变化。
| 维度 | Synopsys | Cadence | Siemens EDA |
|---|---|---|---|
| 旗舰平台 | Synopsys.ai | JedAI + ChipStack | EDA AI System |
| AI层级 | 优化AI + 生成式AI | 优化AI + Agentic AI | 生成式AI + Agentic AI |
| 核心优势 | 流片数量最多,覆盖全流程 | 前端Agentic AI领先(ChipStack) | 数字孪生+多物理场集成 |
| 最新发布 | Synopsys.ai Copilot | ChipStack AI Super Agent (2026.03) | Questa One Toolkit (2026.03) |
评论区
登录后即可参与讨论
立即登录