ARTICLE · 1042253
AI PCB 设计的实验
最近网络上 ChatGPT-6 设计 PCB 的视频引发了我对 AI 设计 PCB 的好奇,于是开始尝试用 Claude Code 做 PCB 设计。结果给自己挖了一个大坑,填都填不完的坑。引发了一次漫长的实验。
一、PCB 设计的三步
二、原理图:LLM 能起作用的地方
设计意图到原理图
使用大语言模型生成 Python 代码,再由 Python 生成 KiCad 的 Sch 文件。设计规范和参考图纸非常重要。
根据设计要求撰写硬件设计文档。大语言模型(LLM)可以承担元器件选型,通读器件 datasheet,并生成 Python 原理图生成代码(schematicGen)。该工具调用 KiCad 的库,产出 KiCad 原理图。
这一阶段是语言模型能真正发挥作用的场合。实测下来,LLM 生成的原理图连线方式还没有达到人类工程师设计的原理图的水平,它给出的只是几何上的连接,没有体现电子学和硬件设计的表达习惯,人读起来别扭,排查错误也费劲。
参考图纸
改善的方法是构建大量的原理图文档库,用 RAG 技术检索类似的原理图。大语言模型能够理解参考原理图的架构,把它的结构归纳出来,再照着迁移到新的设计上。
绘制原理图的规则
除了参考图之外,还有设计习惯。设计惯例大致有六个类别。

三、布局布线:为什么换用强化学习
PCB 布局布线是连续空间里的几何问题:元件坐标、旋转角、走线路径、间距、重叠、过孔位置,都是实数域上的空间关系。LLM 的输入输出是离散的 token 序列,它没有持久的空间世界模型,二维三维的邻接、包含、避让关系只能用语言描述,没法原生计算。它可以指出两个元件靠得太近,却并不真的知道它们到底有多近,那需要精确的几何运算,而不是语言的模式补全。
另一个问题是 PCB 有硬约束,比如 DRC 规定的间距、短路和可制造性,违反即无效。LLM 是概率式生成最可能的下一个 token,天然无法保证输出落在合法解空间里;这类问题要的是精确、可验证的求解,而不是一个概率上看着差不多的答案。
更根本的区别在于,LLM 是一次性的、没有环境反馈的自回归生成器,而布局布线是序贯决策:每放一个元件、每走一段线,板子状态就变了,下一个决策依赖当前状态,也就是马尔可夫决策过程(MDP)。走线尤其典型,它是约束寻路问题(maze routing),属于 NP-hard,需要大量搜索、试错、回溯和约束传播。LLM 没有内部搜索,没有回溯,也没有试一下不行再改的机制,更处理不了长程信用分配:前面一个看似合理的走线决策,可能到很后面才暴露出无法布通。
语言任务里好坏往往是模糊的人类偏好,很难定义;但 PCB 里目标函数是可度量、可自动计算的,比如总线长、过孔数、层数、DRC 违规数、串扰/阻抗偏差、热分布。这意味着环境可以自动给出稠密或终局的奖励,RL 能真正做优化而非模仿。而且 RL 通过探索与奖励,有机会超越训练数据里见过的布局,而 LLM 的模仿式学习只能逼近示范的上限,没法在一个可量化目标上持续爬坡。
几何与搜索这一层,交给 RL 或传统优化器;而 LLM 的价值在它擅长的符号/知识层:读懂数据手册里的布局指南、生成约束与设计规则、选叠层、写脚本、当高层 Agent 去调度布线器,以及用自然语言解释和复核设计意图。
RL 更适合 PCB 的放置与布线,理由有三。
其一,它是多步决策,反馈延迟。放第一个元件时我不知道好坏,要等全部放完、甚至布完线,才知道最终线长与可布线性。中间每一步都没有正确答案可标注,我只知道终局好不好。监督学习要的是每步标签,而这里根本没有;RL 是为延迟、稀疏、终局奖励设计的。
其二,目标不可微、多目标、带硬约束。线长、DRC、拥挤、散热、EMC 大多是非连续、离散、组合性的,无法对其求导。过没过 DRC 这种东西,梯度无法穿过。RL 把奖励当黑盒,只要能评估就能优化,不管它可不可微。这一点在 EDA 里特别明显:真值就是那个跑一次要几十秒的布线器加 DRC,我没有解析模型,只有评估器。
其三,解空间组合爆炸。哪个元件、放哪个格、什么朝向,组合数极其庞大。传统方法每块板都要重新搜索一遍;RL 学的是策略而非某一个解,训一次,之后对新板子秒出布局。这是 RL 相对传统算法最大的价值:把重复搜索摊销成一次学习。
PCB 放置和布线的过程更接近下围棋,落下一子,可能影响许多步之后的成败。
四、初步试验
元器件放置
用 RL 比用大语言模型更有效。
可以通过仿真算法训练 RL 模型。具体的做法是收集人类工程师的 PCB 设计,再生成 FreeRouting 的操作,虽然可能不了解人类设计的前后顺序,但可以训练 RL 该怎么摆放元件。
模块化设计
一开始我和 ChatGPT 讨论,能不能借用软件工程里的模块化思想来做 PCB 设计,得到的回答极为肯定,认为这个思路很好。但实测下来,模块化设计并没有多少改善,布通率反而下降了;模块内部的布通率可能提高了,模块与模块之间的布线却变差了。
不奏效的原因都在边界上。模块化的收益来自模块内部的同质和可复用,代价却全堆在跨模块的地方:板边、过孔通道是共享资源,地平面的回流路径本身就是全局的,模块内部优化得再好也管不到这些;单个模块在设计时并不知道将来要怎么和其他模块拼接,IO 放在哪里也说不清。独立最优不等于全局最优。
还有一个问题是,功能上的分法不等于几何上的分法。电源和 MCU 在功能上可以分得很开,在几何上却常常必须贴在一起,去耦电容就得挨着 MCU 的引脚放。这种拆分给的是约束上的模块化,不是布局上的模块化。
布线
同样地,大语言模型也不适合 PCB 布线,要改用 RL。人类的布线只是一个结果,而 RL 要学的是过程,是怎么一步一步地应对。
训练 PCB 布线 RL 的方法,是让它跟着 FreeRouting 的实际布线来学。这个过程耗时比较长,通常以天计。
优化布线 RL 的方法,是把布线质量较好的项目里的环境、动作、奖励数据都记录下来,再做训练。这一条我还没有尝试过。
AI 实现 PCB 设计还有许多改善的可能性。它和人类一样,也需要完善的资料和丰富的参考资料,再加上经验的积累。如何利用原有的知识库进行仿真训练,是最有希望的研究方向。