ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LLM 辅助 PCB 布线:从规则知识库到智能评审 Agent

LLM 辅助 PCB 布线:从规则知识库到智能评审 Agent 之前在做一块带 MCU、电源、通信接口的混合信号板卡时我反复被同一个问题卡住关键信号线怎么走、电源回路怎么铺、晶振下面能不能走线、DDR 线长要不要等长。公司没有专职的 PCB Layout 工程师只能靠合同工程师远程帮忙改板来回一次至少两三天。后来我尝试把合同工程师的布线习惯、设计规则和经验判断整理成结构化知识再用大语言模型LLM做辅助推理和方案生成效果远比我想象中好。这篇文章就从“LLM 能不能理解 PCB Routing”“合同工程师的经验如何迁移给模型”以及“实际怎么落地”三个角度展开。内容覆盖 PCB 布线基础规则、LLM 应用开发思路、Agent 编排框架并给出可直接参考的 Python 示例和提示词模板。适合正在做电子设计自动化EDA探索的开发者也适合想用 LLM 改善硬件研发流程的工程师。1. 背景与核心概念LLM 与 PCB Routing 能碰撞出什么1.1 为什么 PCB 布线需要“智能辅助”PCBPrinted Circuit Board印制电路板布线是电子硬件设计中最依赖经验、最耗时、也最容易出错的环节之一。EDA 工具如 Altium Designer、Cadence Allegro、嘉立创 EDA、PADS提供了交互式布线和自动布线功能但在面对高速信号、电源完整性、电磁兼容EMC、板级空间限制时自动布线器的结果往往无法直接满足工程要求。一个经验丰富的 PCB Layout 工程师拿到原理图后会在脑中先过一遍板子有几层叠层结构怎么设计哪些信号是高速/敏感信号需要包地、等长、阻抗控制电源和地的回流路径是否闭环元器件布局是否方便走线发热器件是否考虑散热工艺边、定位孔、接插件方向是否合理这些判断很难被形式化成一条条硬性规则更多地表现为“经验直觉”。而 LLM 的最大价值恰恰在于它可以把自然语言描述的规则、约束和工程经验吸收进来变成可对话、可推理、可生成方案的知识系统。1.2 LLM 在 EDA 领域能做什么LLMLarge Language Model大语言模型本身不具备直接操作 EDA 工具的能力但它可以通过三种方式参与 PCB 设计流程方案生成与评审输入设计需求、原理图信息和约束条件LLM 可以生成布局布线建议方案或者对已有方案进行评审指出潜在风险。规则解释与代码生成很多 EDA 工具支持脚本化操作例如 Allegro 的 SKILL 脚本、Altium 的 DelphiScript、嘉立创 EDA 的插件机制。LLM 可以帮工程师生成这些脚本减少重复劳动。Agent 编排与工具调用LLM 作为“大脑”通过 Agent 框架调用外部工具如 DRC 检查、阻抗计算器、Gerber 查看器形成“LLM 工具”的闭环工作流。1.3 标题里的“合同工程师”指什么“Contract Engineer”在硬件行业通常指按项目雇佣的外部工程师比如自由职业的 PCB Layout 工程师、兼职的硬件设计顾问。这类工程师有一个特点经验丰富、效率高但知识往往留在个人脑子里没有沉淀成公司资产。让 LLM 学习合同工程师的布线经验本质上是在做“工程经验数字化”的工作——把老师傅的判断变成模型可用的知识库再通过推理能力赋能给普通工程师。听起来很玄但实现路径其实是有章可循的。下面从 PCB 布线本身的规则讲起再逐步过渡到 LLM 的落地方式。2. PCB 布线核心规则与工程师经验底座如果想让 LLM 理解 PCB Routing首先要有一份结构化的“领域知识”。这些知识不光是给模型用的也是给后续搭建提示词、知识库、校验逻辑用的。2.1 布线前的叠层与阻抗设计多层板设计首先要确定叠层Stack-up。常见的 4 层板叠层结构是顶层信号层第二层地层GND第三层电源层Power底层信号层6 层板则通常会在信号层之间插入完整的地/电源平面用于控制阻抗和减少串扰。叠层厚度会影响阻抗计算例如常用的 50Ω 单端阻抗、90Ω/100Ω 差分阻抗都需要通过调整线宽、介质厚度、铜厚来实现。以常见的 JLC04161H-3313 叠层嘉立创 4 层板为例其参数大致如下层类型厚度顶层信号/铜箔 1oz0.035mmPP层介质0.2mm内层1地/电源0.035mm芯板介质1.1mm内层2地/电源0.035mmPP层介质0.2mm底层信号/铜箔 1oz0.035mm这里不展开板材细节但有一点需要记住LLM 在做布线推理时必须先知道叠层和阻抗约束否则给出的线宽建议没有意义。所以工程经验数字化的第一步是把这些参数结构化。2.2 线宽与电流的对应关系PCB 布线中线宽直接决定载流能力。经验公式是1oz 铜厚、10℃ 温升条件下1mm 线宽约可通过 2A 电流但实际设计中需要结合走线长度、散热条件、允许压降来调整。常用对照表如下线宽mil线宽mm参考载流能力1oz 铜厚10 mil0.254mm约 0.5A20 mil0.508mm约 1.0A40 mil1.016mm约 2.0A100 mil2.54mm约 5.0A注意这只是一个粗略参考实际载流能力与允许温升、环境温度、走线所在层内层散热差通常需要加大线宽密切相关。LLM 要学习这条规则很容易但关键是要让它知道“这是参考值不是绝对值”。于是我们在设计提示词时会强调“给出建议时必须附带约束条件”。2.3 布线规则与技巧PCB 布线规则可以从以下几个层面拆解走线层面信号线尽量短而直避免 90° 直角拐弯优先使用 45° 拐角或圆弧高速信号线要做好阻抗控制差分对要等长、等距。地平面层面保证地平面完整避免信号跨越地平面缝隙晶振、时钟芯片下方不要在底层走敏感信号线电源和地要有完整的回流路径。间距层面不同网络之间的最小间距由工艺能力和电气安全决定常见最小间距为 6 mil 或 8 mil高压区域需要更大间距。布局层面先确定接插件和核心器件位置再围绕核心器件布局去耦电容应靠近芯片电源引脚模拟电路和数字电路分区布局。如果把这些规则直接输入给 LLM它大概率能复述出来但遇到具体板子时不一定能给出有效建议。原因在于布线的核心是权衡而不是单条规则的执行。所以我们需要把规则组织成“决策树”或“约束系统”才能让 LLM 真正处理真实问题。2.4 常见工艺问题与工程语言搜索结果中出现的“the imported file was not wholly contained in the valid pcb region”“Gerber 文件转 PCB 文件”“缺少一层网络”等问题其实都是 PCB 工程中非常典型的工艺/格式问题。要让 LLM 能帮工程师排查这些问题我们需要把这些异常场景和对应的排查步骤写入知识库。举例来说“the imported file was not wholly contained in the valid pcb region”通常出现在将 DXF 或 Gerber 文件导入 PCB 编辑器时图形超出设计边界。解决方案是统一原点设置或者调整 board outline 大小。这类问题非常适合用 LLM 做问答式排查因为它不涉及复杂计算而是需要按经验路径一步步判断。3. LLM 接入 PCB 布线的技术架构说清楚 PCB 侧的基础再来看 LLM 侧怎么接入。这里先把整体架构拆开后续实战案例按这个架构来。3.1 整体流程LLM Agent Script目前比较务实的做法不是让 LLM 直接生成 PCB 文件而是形成一条“需求 → 约束 → 推理 → 执行 → 校验”的链路需求解析用 LLM 把自然语言需求例如“这是一块 4 层板的电源板输入 12V输出 5V/3A板子尺寸 50mm×50mm”解析成结构化 JSON。约束注入从知识库中取出叠层、线宽、间距等约束与需求拼接成完整的上下文。方案推理LLM 给出初步布局布线的自然语言方案。脚本生成LLM 根据 EDA 工具接口生成脚本如 SKILL、Python 脚本。执行与校验脚本在 EDA 工具中执行运行 DRC 检查再把结果反馈给 LLM 进行迭代修正。这个流程中LLM 不是一个人在战斗而是被包在一个 Agent 工作流里。热搜词里反复出现的“llm agent”“llm 应用为什么需要编排框架”背后就是这个原因。3.2 为什么需要编排框架如果只有一个 LLM它的上下文窗口有限无法一直携带整个 PCB 设计规则库它也无法主动去调用 DRC 工具或读取 Gerber 文件。所以需要编排框架来做几件事状态管理记录当前设计阶段、已确认的约束、待办检查项。工具注册把“读取文件”“运行 DRC”“计算阻抗”等能力注册成可调用工具。循环控制让 LLM 在“生成方案 → 运行检查 → 获取结果 → 修改方案”之间循环直到通过校验。常见的编排方式有基于 LangChain / LangGraph 的 Agent也有 Spring AI MCP RAG 的组合方案甚至有直接用 Python 脚本手写状态机的轻量做法。下面会在实战案例中演示轻量实现。3.3 知识库与 RAG 的必要性PCB 设计规范、IPC 标准、工艺设计规则、历史项目复盘这些内容很难全部写进系统提示词。RAGRetrieval-Augmented Generation检索增强生成思路是把这些内容做成向量化的知识库在每次问答前检索最相关的片段拼进上下文给 LLM。实际落地时知识库可以拆成几个分类设计规范类层叠、线宽、间距、阻抗。工艺约束类板厂能力、最小孔径、最小线宽、表面处理。案例复盘类历史 DRC 报错、文件导入异常、坐标偏移问题。器件封装类常见封装焊盘尺寸、散热焊盘设计。每个片段最好附带标签和适用范围以便检索时能命中。4. 实战案例用 LLM 辅助 PCB 布线规则检查下面用一个偏向“规则检查与建议生成”的实战案例来演示整个思路。这个案例不依赖具体 EDA 工具而是模拟一个“PCB 布线辅助 Agent”核心功能是输入一段布线约束和设计方案描述LLM 输出风险检查结果和改进建议。选择这个案例的原因有两个一是它不需要读者拥有商业 EDA 软件授权门槛低二是它展示的是 LLM 参与 PCB Routing 的核心模式——“规则推理 风险输出”这套模式可以平移到任何 EDA 工具脚本场景。4.1 创建项目结构先创建一个简单的 Python 项目目录llm-pcb-assistant/ ├── main.py # 主程序负责交互 ├── rules_kb.py # 规则知识库 ├── pcb_agent.py # Agent 核心逻辑 ├── prompts.py # 提示词模板 └── requirements.txt # 依赖这里的“Agent”不引入任何重量级框架而是用 LLM 的 API 调用配合函数封装来完成。4.2 添加依赖requirements.txt内容如下openai1.0.0 python-dotenv1.0.0 pydantic2.0.0这里以 OpenAI 兼容接口为例。如果你使用的是国内大模型服务只需把base_url换成服务商提供的地地址即可。版本需要根据实际环境调整本文重点演示配置思路。4.3 编写规则知识库规则知识库的作用是把 PCB 布线经验转成结构化数据后续既能用于“提示词拼接”也能用于“确定性校验”。# 文件路径llm-pcb-assistant/rules_kb.py PCB_RULES [ { id: RULE_TRACE_WIDTH_CURRENT_001, category: 线宽与电流, rule: 1oz 铜厚、10℃ 温升条件下1mm 线宽约可承载 2A 电流。内层走线散热较差建议按 0.8 倍降额。, check_type: threshold, applicable: 电源走线、功率走线 }, { id: RULE_ANGLE_001, category: 走线角度, rule: 避免 90° 直角拐弯优先采用 45° 拐角或圆弧过渡以减少阻抗突变和 EMI 风险。, check_type: qualitative, applicable: 全部信号走线 }, { id: RULE_GND_PLANE_001, category: 地平面, rule: 高速信号回流路径下方应保持地平面完整不得跨越地平面开槽或缝隙。, check_type: qualitative, applicable: 高速信号、时钟信号 }, { id: RULE_CAP_001, category: 去耦电容, rule: 去耦电容应尽可能靠近芯片电源引脚建议小于 50 mil 放置且电源线应先经过电容再到引脚。, check_type: threshold, applicable: 电源引脚 }, { id: RULE_DIFF_001, category: 差分线, rule: 差分对走线应保持等长、等距并避免引入不必要的过孔距离参考平面边缘应保持足够间距。, check_type: qualitative, applicable: USB、以太网、LVDS 等差分信号 } ] def get_rules_by_category(category: str None): 按类别获取规则category 为空则返回全部规则。 if not category: return PCB_RULES return [r for r in PCB_RULES if r[category] category] def format_rules_for_prompt(rules): 把规则列表格式化成适合放提示词的文本。 lines [] for r in rules: lines.append( f[{r[id]}] {r[rule]} f(适用范围: {r[applicable]}) ) return \n.join(lines)这里有几点需要说明规则并没有做得很复杂。真正的知识库可能包含 IPC 标准内容、板厂工艺能力表、历史 DRC 报告但核心结构是一致的——每条规则都有 ID、类别、描述、适用场景。规则分为threshold和qualitative两种类型。数值类规则未来可以做程序化校验描述类规则交给 LLM 推理。这样设计是为了让 LLM 和确定性代码各司其职。4.4 编写提示词模板提示词是 LLM 落地的关键。下面是一个面向“PCB 布线方案评审”的提示词模板# 文件路径llm-pcb-assistant/prompts.py SYSTEM_PROMPT 你是一名具有 20 年经验的 PCB Layout 合同工程师擅长 PCB 布线设计、DRC 检查、 信号完整性和电源完整性分析。你的任务是根据用户给出的 PCB 布线方案描述 结合给定的设计规则输出风险评审意见和改进建议。 要求 1. 优先引用给定规则说明违反了哪条规则、为什么有问题。 2. 如果信息不足可以询问用户补充关键信息但不要编造。 3. 输出格式必须包含三个部分风险等级、问题列表、改进建议。 4. 使用中文回答语气专业、简洁。 .strip() USER_PROMPT_TEMPLATE 以下是 PCB 布线设计需求与方案描述 【设计需求】 {requirements} 【当前方案】 {design_description} 【设计规则】 {formatted_rules} 请基于以上信息进行布线评审。 .strip()这个模板中requirements是设计需求design_description是当前方案formatted_rules是从知识库中取出的规则。这里刻意把规则放进用户提示词而不是系统提示词是因为不同设计场景需要用到的规则不同动态拼接更灵活。4.5 编写 Agent 核心逻辑Agent 核心逻辑负责接收方案描述 → 从知识库选择相关规则 → 调用 LLM → 返回结构化评审结果。# 文件路径llm-pcb-assistant/pcb_agent.py import json import os from openai import OpenAI from prompts import SYSTEM_PROMPT, USER_PROMPT_TEMPLATE from rules_kb import get_rules_by_category, format_rules_for_prompt class PCBRoutingAgent: def __init__(self, api_key: str None, base_url: str None, model: str None): 初始化 Agent。 默认读取环境变量兼容 OpenAI 与国内兼容接口。 self.api_key api_key or os.getenv(LLM_API_KEY) self.base_url base_url or os.getenv(LLM_BASE_URL) self.model model or os.getenv(LLM_MODEL, gpt-4o-mini) if not self.api_key: raise ValueError( 未找到 LLM_API_KEY请在环境变量中配置或在实例化时传入 api_key。 ) self.client OpenAI(api_keyself.api_key, base_urlself.base_url) def review(self, requirements: str, design_description: str): 执行一次布线评审。 返回结构化结果risk_level / issues / suggestions / raw_text # 1. 选择相关规则。这里先全部取出实际项目中可以按类别/关键词筛选。 rules get_rules_by_category() formatted_rules format_rules_for_prompt(rules) # 2. 拼接用户提示词 user_prompt USER_PROMPT_TEMPLATE.format( requirementsrequirements, design_descriptiondesign_description, formatted_rulesformatted_rules ) # 3. 调用 LLM response self.client.chat.completions.create( modelself.model, messages[ {role: system, content: SYSTEM_PROMPT}, {role: user, content: user_prompt} ], temperature0.3 # 评审任务保持较低随机性 ) raw_text response.choices[0].message.content # 4. 这里简化处理直接把文本返回。 # 实际项目中可以用 JSON Mode 或函数调用让模型返回结构化结果。 return { raw_text: raw_text, risk_level: self._extract_risk_level(raw_text), } def _extract_risk_level(self, text: str) - str: 从评审文本中粗提取风险等级。 if 高风险 in text: return high if 中风险 in text: return medium if 低风险 in text: return low return unknown代码中的核心思路是环境变量统一管理 API 密钥和模型地址。review()方法顺序执行“取规则 → 拼提示词 → 调模型 → 提取结果”四个步骤。温度参数设为 0.3降低随机性因为这是技术评审任务不希望输出发散。4.6 编写主程序主程序负责接收用户输入并展示结果。# 文件路径llm-pcb-assistant/main.py from pcb_agent import PCBRoutingAgent def main(): agent PCBRoutingAgent() requirements ( 4 层板尺寸 80mm x 60mm MCU 主控板载 USB 差分对 12V 电源输入板内 DC-DC 降压到 5V/2A 晶振频率 16MHz。 ) design_description 1. 顶层走信号线底层铺地。USB 差分对从连接器直连到 MCU 线宽 6 mil间距 6 mil没有做等长处理。 2. DC-DC 电源走线宽 30 mil从输入插座到芯片再从芯片到输出。 3. 晶振放置在 MCU 旁 5mm 位置晶振下方底层走了一根 I2C 信号线。 4. 去耦电容放置在 MCU 电源引脚 80 mil 外。 result agent.review(requirements, design_description) print( PCB 布线评审结果 ) print(f风险等级: {result[risk_level]}) print(-------------------------------------) print(result[raw_text]) if __name__ __main__: main()这段代码中的设计描述故意写了一些常见问题包括差分对未等长、晶振下方走敏感信号、去耦电容放置过远。运行之后模型应该能针对这些问题给出评审意见。4.7 配置环境变量并运行在项目根目录创建.env文件LLM_API_KEY你的_API_KEY LLM_BASE_URLhttps://api.openai.com/v1 LLM_MODELgpt-4o-mini如果你使用的是国内大模型服务LLM_BASE_URL需要换成对应服务的地址。然后在终端运行pip install -r requirements.txt python main.py预期输出是一份包含问题列表和改进建议的评审文本风险等级可能是medium或high。具体内容取决于模型能力如果发现规则没有被正确引用可以考虑在提示词中进一步强调“必须逐条对照规则”。4.8 结果说明与局限这个 Agent 虽然简单但已经具备“LLM 辅助 PCB 布线评审”的最小闭环。它验证了几个关键点规则知识可以结构化并动态注入提示词LLM 能根据自然语言方案描述进行推理输出有参考价值的评审意见整个流程可以封装成可复用的 Python 类未来可以接入 Web 服务或 IDE 插件。它的局限也很明显方案描述是文本没有读取真实 PCB 文件所以评审精度有限。下一阶段可以把 DRC 报告如 Altium、Allegro 导出的错误列表作为输入让 LLM 基于真实数据做分析而不是只依赖人工转述。5. 常见问题与排查思路把 LLM 和 PCB 设计结合时会遇到不少实际困难。下面按问题类型列出常见情况问题现象常见原因解决思路模型给出线宽建议明显不合理提示词中缺少板厂工艺能力约束在知识库中加入板厂最小线宽/最小间距参数并在提示词中注明“必须满足板厂工艺能力”评审结果过于泛泛没有针对性设计描述包含信息太少要求用户按模板填写方案描述至少包含层叠、线宽、关键信号、特殊器件位置模型回答中编造了不存在的规则知识库覆盖不足模型开始“自由发挥”在系统提示词中限定“只能引用给定规则不得自行补充规则”API 调用报错无法连接base_url 或网络配置错误检查环境变量配置、网络连通性、API 服务状态出现“the imported file was not wholly contained in the valid pcb region”类似的工程报错时LLM 无法定位缺少文件导入类知识将常见报错场景、复现步骤、解决案例加入知识库按“现象 → 原因 → 解决方案”组织LLM 推理结果不稳定温度参数过高将 temperature 调低到 0.2-0.4技术任务推荐低温度上下文太长导致请求失败注入规则过多按类别筛选规则只注入与当前设计场景相关的部分关于“Gerber 文件转 PCB 文件”“缺少一层网络”这类问题实际上也是 PCB 工程中非常高频的异常。它们完全可以通过“LLM 知识库 排查步骤模板”做成问答式诊断工具帮工程师省去大量搜索和试错时间。关键是知识的组织方式——每一条知识都要覆盖“现象”、“原因”、“定位步骤”、“解决方案”四个维度。6. 最佳实践与工程建议6.1 规则知识要迭代沉淀而不是一次性整理PCB 规则随工艺、芯片方案、应用场景变化很大。建议把规则知识库放在 Git 仓库中管理每次项目结束复盘时补充新规则。规则条目建议包含规则 ID、版本、适用范围、制定人、来源项目、更新时间。这样既能追溯历史也方便 LLM 检索时给出“来源可信”的答案。6.2 提示词要约束模型的“动作边界”LLM 在 PCB 这种高专业性领域很容易产生“幻觉”式输出比如编造一个不存在的阻抗值。建议采取以下几种约束手段系统提示词中明确“只能依据给定规则回答”。要求模型在信息不足时说“信息不足以判断”而不是猜测。数值类规则尽量由代码校验不要只依赖模型推理。最理想的架构是数值规则用传统代码处理经验规则用 LLM 推理。两者结合才能既保证准确性又保证灵活性。6.3 用 RAG 代替“无脑塞规则”当规则条目超过 50 条以后把所有规则都拼进提示词会影响模型效果和响应速度。建议用向量数据库如 Chroma、FAISS、Milvus对规则做 Embedding 索引每次只检索与当前需求最相关的 10-20 条规则。热搜词中频繁出现的“llm 应用为什么需要编排框架”“springaimcpragagent”其实就是在说这个方向。6.4 从“评审”场景切入不要一上来就想自动布线LLM 目前直接生成完整 PCB 布线文件还不现实。更务实的产品路径是提供自然语言方案评审解析 DRC 报告并解释错误原因根据规则生成 SKILL/Python 脚本片段在明确约束下自动完成局部布线如电源线宽调整、元件间距修正。先做辅助再做替代这是 LLM 进入硬件设计领域比较稳妥的路径。6.5 安全和授权问题不能忽略如果让 LLM 生成 EDA 脚本并自动执行必须在受控环境中验证并保留人工审批环节。涉及生产制板文件Gerber、钻孔文件的导出和修改一定要有版本管理和回滚机制。PCB 设计不是纯软件项目一个错误的走线改动可能导致整板报废所以任何自动化的改动都应该有 DRC 检查和人工 review 两道关卡。7. 总结与下一步学习方向这篇文章围绕“LLM PCB Routing”这个方向拆解了 PCB 布线的基础规则、LLM 的应用架构以及一个最小可运行的布线评审 Agent。核心结论是LLM 在 PCB 领域最能落地的地方不是替代工程师做布线而是成为“懂规则的助手”——把合同工程师的经验结构化、可检索、可推理从而降低 PCB Layout 的入门门槛提高设计评审效率。如果你对这个方向感兴趣下一步可以从这几个方向深入一是继续完善规则知识库加入 IPC 标准和具体板厂的工艺参数二是尝试把 DRC 报告的真实数据作为 Agent 输入三是用 LangGraph 或 Spring AI 实现多轮迭代式布线优化工作流四是学习 EDA 工具的脚本接口例如 Allegro SKILL 和 Altium 的脚本系统让 LLM 真正能“动手改板”。无论你是一个刚入门 PCB 的硬件工程师还是做 LLM 应用开发的软件工程师这个交叉领域都还有大量值得探索的空间。动手写一个属于自己的 PCB 规则 Agent比单纯阅读理论收获要大得多。
返回列表