YAOTU INSIGHTS

从RISC-V到KiCad:开源芯片设计全流程与落地实践

从RISC-V到KiCad:开源芯片设计全流程与落地实践
我刚入行那会儿选型基本靠原厂FAE发来的参考设计。某次做一款工业控制器用的是某大厂MCU授权窗口一封邮件、SDK套件还要申请NDA连芯片内部某个外设的勘误表都签了保密协议才能看。后来一个朋友拉我进了个开源芯片项目群我才意识到“电脑芯片开源”这个看似口号感十足的方向其实已经长成一套完整的生态从RISC-V指令集、开放IP核到KiCad这样的开源EDA工具再到Linux、GCC/LLVM这些早就开源的软件工具链CPU、MCU、电源管理芯片、接口芯片……几乎所有你能想到的计算环节都有人在用开源的方式重做一遍。这篇博客我想把这条“从指令集到板级设计再到工程落地”的路径完整梳理一遍。适合刚被开源概念吸引、想搞清楚怎么回事的软件工程师也适合想动手做第一款开源硬件的硬件工程师。1. 芯片开源到底在开什么先理清几个概念“开源芯片”这个说法很容易让人误读。有人以为开源芯片等于免费送你几颗样品也有人觉得是直接把芯片的物理版图GDSII文件全公开。这两种理解都不太准确。真实的芯片开源分好几个层次不掰开讲清楚后面聊什么都容易跑偏。1.1 第一层指令集与IP核的开源最底层的开源是指令集架构ISA的开源。指令集是CPU和软件之间的一份“合同”规定了CPU能执行哪些指令、寄存器怎么组织、内存怎么访问。历史上x86和ARM都是闭源授权体系你想用ARM IP做芯片得交授权费、签NDA、拿一堆保密文档。RISC-V出现后指令集本身以BSD许可证开放任何人都能基于它设计自己的处理器不用先付几百万美元的授权费。在指令集之上还有可复用的IP核Intellectual Property Core也就是预先设计好的处理器内核、总线、外设模块。比如OpenTitan是一个开源的安全芯片项目Ibex就是一个开源的低功耗RISC-V内核LowRISC组织提供了整套开源SoC参考设计。这些IP核就像乐高积木你可以把别人验证过的积木拿过来拼成自己的芯片。这个层次的意义在于一个中等规模的团队现在真的可能在一两年内做出属于自己的SoC。放在十年前这几乎是不可想象的事情。1.2 第二层工具链与EDA软件的开源芯片设计离不开EDA工具。商业EDA巨头的授权费动辄百万级个人和高校根本负担不起。开源EDA这几年进步非常快KiCad擅长PCB设计已经能胜任多数中等复杂板卡的全流程布线OpenROAD、Yosys、NextPNR则把数字芯片的综合、布局布线流程打通了配合SkyWater 130nm这样的开源PDK工艺设计套件已经有人实现了“从RTL到GDSII”的全流程开源设计。换句大白话以前设计一颗芯片光工具链就能卡死一大半人。现在你可以在开源环境里跑完设计、仿真、验证的闭环虽然工艺节点比商业主流落后几代但用于学习、原型验证和学术研究完全够了。1.3 第三层硬件参考设计与板级产品的开源再往上是板级开发工程师最常接触的层次——开源硬件Open Source Hardware。典型代表是RISC-V开发板如SiFive、StarFive的板子还有无数基于STM32、ESP32等芯片的开源项目。严格说STM32芯片本身并不是开源的但你只要看它周围的开源生态就明白芯片厂商把寄存器手册、HAL库、示例代码全部开放配合KiCad、立创EDA等工具一个硬件爱好者也能在几周内做出自己的控制器板卡。我习惯用一个做饭的类比来解释这件事闭源芯片像是你去餐厅点一份炒饭味道稳定但你不知道后厨放了什么开源芯片像是给你一份食谱、一张食材清单还允许你按自己的口味改配方。你要选择的不是“炒饭”而是“做炒饭的方法”。1.4 为什么“电脑芯片开源”会成为一个真问题回到标题里的“电脑芯片开源”这个词——它其实不是在说某一颗具体的芯片而是一整套“计算设备底料开源”的思潮。从嵌入式的STM32、到边缘算力的RK3588/Jetson Orin Nano、再到服务器端可能用到的RISC-V SoC越来越多的设备制造商愿意公开自己方案里的关键设计让社区参与改进。对开发者来说这个趋势带来的直接好处是可选的软硬件方案越来越透明授权成本在下降你还可能通过参与某个开源项目获得完整的产品级设计能力、测试方法顺带积累一批行业人脉。2. 开源芯片生态的底牌从指令集到开发板2.1 RISC-V不是唯一答案但确实是最活跃的很多人一提到开源芯片就默认是RISC-V准确说法应该是RISC-V是目前最活跃的开源指令集但不是唯一做法。MIPS在2019年开放了指令集MIPS Open声量相对小OpenPOWER是IBM牵头的开放处理器架构偏向高性能服务器场景OpenCores是更老牌的开放IP核库上面有不少CPU、外设、编解码器内核。ARM近年也提供了一些面向学术使用的授权形式但商业授权依旧是封闭的。在这么多选择里RISC-V之所以能跑出来靠的是两点。一是许可证极其宽松RISC-V指令集规范使用BSD许可厂商可以自由实现甚至可以做闭源扩展二是全球社区投入巨大Linux、GCC/LLVM、Zephyr、FreeRTOS等关键软件都有扎实的RISC-V支持软件适配成本远低于任何新指令集。芯片后端物理设计这一块也因为OpenROAD这类开源工具的出现有了可复现的社区流程。2.2 从开发板看开源生态的“能打程度”对绝大多数普通开发者来说接触开源芯片的第一站肯定不是去流片而是买一块开发板。我按用途把主流的开源芯片平台分成三类MCU类STM32系列、ESP32系列、RP2040树莓派Pico那颗MCU、CH32V系列沁恒基于RISC-V内核。这类芯片定位是控制、连接、传感器读取特点是资料全、示例多、社区大。Linux SoC类RK3566/RK3588、全志的H616、StarFive的JH7110RISC-V以及NXP的i.MX系列。这类能跑Linux支撑边缘计算、多媒体盒子、轻量AI推理。高性能边缘AI类Jetson Orin Nano、Jetson AGX等NVIDIA平台芯片本身不是开源但CUDA加开源生态PyTorch、TensorRT、DeepStream非常成熟社区里有大量开源模型可以做本地部署。为了直观对比我整理了一张表方便你按需求做初步选型平台芯片/核心指令集适合场景开源程度ESP32系列Xtensa / RISC-V闭源/开源WiFi、BLE物联网SDK开源资料开放STM32系列Cortex-M闭源授权工业控制、电机驱动HAL库与示例开源芯片IP闭源RP2040双核Cortex-M0闭源授权低成本创客项目完整开源硬件参考设计树莓派4BBCM2711闭源桌面、小型服务器硬件部分开源SoC闭源StarFive JH7110RISC-V U74开源指令集Linux开发板、网络设备芯片设计部分开放SDK开源RK35888核A76A55闭源边缘AI、8K视频官方SDK开放芯片闭源Jetson Orin NanoAmpere架构闭源AI推理、机器人CUDA生态开源友好芯片闭源注意看“开源程度”这一列我做了比较细的区分芯片本身可能闭源但SDK、参考设计、文档如果开放对整个生态的贡献依然巨大。很多人纠结“这颗芯片是不是100%开源”其实没有意义你真正要评估的是能不能自由使用、允许修改、还能再发布自己的产品。2.3 为什么芯片产品层面“半开源”反而是常态我见过不少新人一上来就问“有没有完全开源的电脑整机芯片方案”答案是纯学术社区里有但产品层面非常罕见。原因很简单一颗芯片从设计到量产要同时考虑性能、功耗、良率、可靠性、量产成本完全开源意味着工程上很难追赶商业芯片。更务实的思路是底层指令集开源、关键IP可审计、主板固件和工具链全部开放——这种“半开源”已经能让产业参与者深度介入。比如你买一块基于RISC-V的开发板拿到的是完整原理图、PCB源文件、U-Boot和内核源码完全具备自主定制的能力。这比“全开源但只能跑demo”的方案有用得多。3. 把开源芯片装进电脑从选型到板级电路设计这一章我重点写实际过程中最容易被卡住的环节。结合这些年的项目经历我挑几类高频使用的型号比如RT9013、8205、TP4056、STM32以及各种电源芯片、看门狗芯片完整讲一遍从拿到芯片到跑通工程的全流程。3.1 拿到一颗芯片第一步先确认引脚和封装很多同学画板子翻车不是原理图逻辑的问题而是第一步就看错了引脚。以最基础的问题“STM32芯片第一脚怎么确认”为例规范做法是先看芯片封装上的丝印标记。常见标记有三类小圆点Pin 1位置、边角缺口多见于QFP/BGA、丝印横线。如果封装表面没有明显标记必须以数据手册里给的封装视图为准。别小看这一步贴片方向反了上电那一刻芯片大概率就报废了。除了方向还要确认同一个封装有几种引脚间距。QFP、LQFP、TQFP、QFN外观长得像但引脚间距和底部散热焊盘的尺寸不同。PCB封装画错了原理图再好也白搭。所以我画封装前一定会去官网下载官方封装库KiCad里其实已经集成了很多常用封装省去不少手工测量时间。这里有个实操习惯想分享不是所有丝印都要照抄厂商标注。我习惯把PCB丝印层的“Pin 1圆点”放大到1mm以上并把芯片型号行放在板子朝向清晰的位置方便产线焊接和后续返修识别。很多小批量项目的返修成本都是从这些不起眼的细节里省出来的。3.2 电源类芯片的引脚功课RT9013、8205、TP4056实例电源管理是板级设计里出错率最高的模块。我拿三个常见型号来做说明RT9013是一颗低压差线性稳压器LDO常用于把3.6V或5V降到3.3V或1.8V给数字芯片供电。RT9013芯片引脚图里最重要的三根脚是VIN输入、VOUT输出、EN使能还有GND和BP噪声旁路。注意EN不能悬空悬空时输出不稳定通常要接高电平使能。8205A是一颗双N沟道MOSFET常见于锂电池保护板大家在搜索引擎里搜索“8205引脚功能图解”能搜到大量资料。它内部是两个MOS管封装通常是SOT-23-6Source1和Source2共用。设计时先判断哪个Gate接保护IC、哪个Drain接电池正负接反了保护功能完全不生效。TP4056是单节锂电池线性充电芯片。TP4056芯片参数里最值得关注的是充电电流设定电阻PROG1.2kΩ大约对应1A充电电流、输入电压范围4.0V到6.5V、充电截止电压4.2V±1%。很多新手直接照抄别人原理图结果充电电流不对、芯片发热严重其实是PROG电阻值没有按自己电池容量重新算。画电源部分电路时我个人的顺序是先确认输入电压范围和负载峰值电流再决定用LDO还是DCDC拓扑然后按数据手册里的“典型应用电路”抄外围电容电阻最后把手册里的Layout建议落实到位比如去耦电容尽量靠近电源引脚、反馈走线远离电感。这一套流程走下来绝大多数电源设计问题都能提前规避。提示LDO的EN引脚悬空是很多新板子“没输出”的第一大原因。上电后先拿万用表量EN脚电平再查输出别一上来就怀疑芯片坏了。3.3 开发环境搭建芯片包安装的坑与解法以STM32为例不管用Keil MDK还是STM32CubeIDE都要先把目标芯片的支持包装上。Keil 5安装STM32芯片包的流程是先下载对应器件系列的Pack例如Keil.STM32F1xx_DFP装好后在工程配置里选择正确芯片型号否则编译器会提示找不到目标设备。这里容易踩的坑是Pack版本和IDE版本不匹配导致头文件冲突或者调试接口识别不了芯片。我在公司项目里就遇到过一次同事装了新版本Pack结果老工程编译报一堆外设寄存器未定义错误排查半天才发现是IDE版本太旧兼容不了新Pack。建议装芯片包时选和当前IDE兼容的长期支持版本不必一味追新。对于ESP32系列推荐直接用ESP-IDF官方安装器它会自动下载对应芯片的编译器工具链和源码。要注意不同芯片的SDK版本分支不同比如ESP32-C3与ESP32-S3的适配配置有差异选错会在编译时报一堆莫名其妙的内存地址错误。用命令行做预编译检查能节省大量试错时间# 以ESP32-C3为例先加载ESP-IDF环境 . $HOME/esp/esp-idf/export.sh idf.py set-target esp32c3 idf.py build执行完idf.py build如果工具链和芯片目标匹配会在构建日志里看到正确的目标芯片信息如果不匹配它会直接报出“unsupported target”或者链接脚本错误。养成看构建日志前几行的习惯比翻几千行报错更有效率。4. 开源芯片的常见落地场景边缘计算、电机驱动与低成本控制4.1 边缘AI的“小电脑”RK3588、Jetson Orin Nano与开源模型这几年计算设备里比较有吸引力的一条路线就是把开源AI模型部署到本地边缘设备。RK3588这种8核SoC配上NPU能跑很多轻量的YOLO检测模型和语音识别模型如果你需要更大算力Jetson Orin Nano是性价比不错的选择。这类平台的共同点是官方SDK开放、Linux社区资料多、适配好的开源模型能直接拉下来跑demo做起原型来特别顺手。实操里有一个经常被忽略的细节存储芯片的选型与更换。比如Jetson Orin Nano模块上会用QSPI Flash存放引导固件如果这颗存储芯片损坏或容量不够系统会起不来。我看到过有人直接热风枪把QSPI Flash吹下来换新的却没有注意分区表和固件版本结果系统能启动但外设识别不全。正确做法是更换前先用工具备份原始固件镜像烧写后再核对启动日志里的固件校验信息。换存储芯片这类操作听起来像是售后维修但对开源硬件社区来说它本身是一种“硬件DIY能力”。平台上的教程教你换焊盘、刷引导、调设备树这种自由恰恰是开源生态最吸引人的地方。你在闭源平台上基本不可能这样折腾在开源平台上却是常规操作。4.2 工业控制里的开源选择国产步进电机驱动芯片梳理工业控制是嵌入式开源项目很集中的领域。以步进电机驱动为例国内能见到的驱动芯片品牌不少。国外方案里德国Trinamic现属Maxim/ADI的TMC系列是绕不开的静音和小体积是强项寄存器式控制方式在3D打印机、数控机床里非常流行。国产方案这几年也追上来了。很多人问我“国产步进电机驱动芯片有哪些品牌”我列得比较多的有峰岹科技、矽睿科技、领芯微电子、数明半导体等。淘宝上搜到的很多A4988、DRV8825替换模块其实很多用的就是国产兼容方案。开源软件支持也很重要比如SimpleFOClibrary、TMCStepper这些库已经把驱动芯片的寄存器操作封装好配合编码器就能做FOC闭环。我在选驱动芯片时决策顺序很固定输出电流够不够、散热方式能不能满足、微步细分档位、控制接口STEP/DIR还是UART/SPI、芯片手册是否公开、社区示例是否完整。最后一点在开源项目里往往比性能参数更重要——一颗芯片功能再强如果连可用的驱动代码都要自己从零写那调试周期会拉长到让人崩溃。4.3 消费电子和家电里的电源细节7脚电源芯片、LED驱动、E-marker消费电子里大量使用小型电源管理芯片。搜索平台上常见的“7脚电源芯片 5V buck 小家电”指的多是固定5V输出的降压DCDC用在智能插座、小风扇、温控器里。这类芯片型号多到数不清但设计方法大同小异确认输入电压范围、输出电流、开关频率再按手册选电感值和电容值。电感选小了会发热严重选大了会响应迟钝这是DCDC设计里最典型的取舍。LED闪灯驱动芯片常见于灯条、指示电路有些直接内置恒流源只要外接一颗限流电阻就能工作。做这类设计时要注意LED的压降会随电流变化不能只用万用表测一次就定电阻最好做温度和环境光测试。我在一个氛围灯项目里就吃过这亏常温下调好的亮度夏天放户外晒一会儿就明显变暗后来改成恒流驱动才彻底解决。还有E-marker芯片这是USB-C线缆里的身份识别芯片。它通常不算开源芯片范畴但很多开源项目中要用它定义线缆的电流和电压能力。如果你想自己做USB-C线缆或桌面供电模块千万别漏了E-marker否则设备可能不识别线材或者电流协商错误导致充电特别慢。这些看似零碎的小芯片恰恰是设计一个完整开源产品最容易忽略又最容易出问题的地方。5. 参与芯片开源的正确姿势许可证、项目协作与工具链5.1 选许可证像选合同开源许可证怎么挑“Gitee开源许可证选什么”是我在社区里被问过很多次的问题。这个问题问得很好因为许可证选错的影响是长远的甚至比项目代码写得烂更麻烦。开源许可证大致分两个阵营宽松型Permissive和Copyleft型。宽松型包括MIT、BSD、Apache-2.0Copyleft型包括GPL、LGPL、AGPL。如果没有法务帮你把关最简单的判断逻辑是你希望别人用了你的代码后也必须开源选GPL你希望代码被广泛采用同时保留商标和专利条款保护选Apache-2.0你只希望别人署名、其他随意选MIT或BSD。芯片/IP类开源项目还有额外维度RTL设计本质上也是一种“源代码”可以使用软件许可证发布。很多RISC-V IP采用Solderpad许可证它类似Apache-2.0但针对硬件设计做了一些修正。如果你不确定选什么初次开源建议用MIT或Apache-2.0因为它们足够简单且商业友好。想用GPL系列要提前想清楚你是不是真的准备约束所有衍生作品。5.2 硬件和软件项目的协作差异GitHub、Gitee、GitCode上的项目管理软件开源项目的协作流程已经很成熟提Issue、开PR、Code Review、CI/CD。硬件和芯片项目的协作方式也通过代码托管平台实现但差异非常明显。版本管理对象不同。除了代码还要管原理图、PCB源文件、设计文档、数据手册解读笔记甚至Gerber文件。我习惯把设计源文件KiCad格式和Gerber分开放避免仓库体积无谓膨胀。Review难度更高。硬件Review需要补一张评审单包括功耗预算、电源树检查、信号完整性分析、接线逻辑检查。软件PR有CI帮你编译硬件PR目前可没有机器人自动跑PCB DRC全靠人工仔细看。镜像与协作。国内团队常把上游项目同步到Gitee或GitCode利用这些平台的CI能力做自动构建也方便国内社区成员参与文档翻译和代码维护。这种工作流在嵌入式项目里很实用我参与的多个开源项目都用“GitHub上游仓库 国内平台同步协作”的方式运作顺畅。管理一个开源硬件项目我强烈建议至少维护三样东西README里写清楚项目定位和快速开始步骤CONTRIBUTING里写清楚提交PR的规范LICENSE字段不要空着。这三样缺任何一样项目的可信度都会打折扣。很多项目技术做得不错就是因为缺一个清晰的贡献指南社区想帮忙都无从下手。5.3 文档与测试开源芯片项目最容易短板的环节开源芯片项目很多卡在“设计好了但没人能复现”这一关。开源硬件和开源软件最大的不同是软件可以直接装包硬件得先把板子造出来。所以文档和测试就成了项目成败的关键。我评估一个优秀开源芯片项目时主要看三点它有没有提供完整BOM表和元件采购链接让复现成本可控有没有发布出厂测试手册明确上电顺序、测试点、预期波形让收到板子的人能在五分钟内验证板子是否正常有没有把仿真测试用例testbench连同RTL代码一起开源。设计验证资产一旦缺失一个开源芯片项目就像缺了后半本的小说看得见开头却无法确认结局。如果你准备参与一个开源芯片或硬件项目我的建议是从贡献文档和测试开始而不是一上来就挑战复杂RTL逻辑。写文档能帮你把架构吃透写测试能让你真正搞清楚每个模块的行为边界。这同时也是社区里最容易获得认可和反馈的路径。一个新的开源芯片项目最缺的往往不是炫酷的功能而是能让人快速理解、快速复现、快速验证的那份看似枯燥的文档。我自己的习惯是每次拿到一块开源板子先不急着改代码而是花半天把原理图、数据手册、引脚映射表从头过一遍记录所有“这里为什么不按参考设计接”的疑问然后去仓库的Issue列表里搜答案。很多看似玄学的问题早就有人在GitHub上讨论过了。这套工作流不一定适合所有人但至少让我这些年在各种开源芯片项目里少走了很多弯路。最后再分享一个小技巧做板级开源设计时给关键电源轨的每颗芯片旁边留一个测试点。这个操作成本几乎为零但调试时省下的时间能用天来算。没有测试点你只能拿万用表尖戳着芯片引脚量电压一不小心短路就冒烟有了测试点示波器探头一夹波形清清楚楚排查问题效率能翻倍。开源项目的价值从来不只是在代码仓库里也藏在这些看似不起眼的硬件设计细节中。