☰
FreeRouting自动布线实战:从DSN导出到SES回导的完整教程
2026/9/26 10:04:45 网站建设 项目流程

PCB自动布线这件事,我前后折腾过不少工具。商业方案里,Altium Designer、Cadence Allegro、PADS这些各有各的强项,但授权成本摆在那里,个人玩家和小团队很难长期负担。开源阵营里能打的选手不多,KiCad自带的布线器这几年进步明显,但真正让我愿意单独写一篇完整教程的,是FreeRouting——一个用Java写的、基于Specctra DSN格式的自动布线引擎。它不绑定任何EDA软件,只要你的设计能导出DSN文件,它就能接手布线,跑完再导回原来的工具里。这个特性让它在开源硬件圈子里一直有稳定的使用群体。

这篇内容面向的是刚接触FreeRouting、或者之前尝试过但被环境配置和文件格式卡住的人。我会从它到底解决什么问题讲起,把安装、DSN导出、参数配置、布线执行、结果回导这条完整链路拆开讲清楚,中间穿插我自己踩过的坑和参数调优的经验。读完你应该能独立完成一块中等复杂度双层板的自动布线,并且知道哪些情况下不该指望自动布线、该手动介入。

1. FreeRouting到底解决的是谁的痛点

1.1 自动布线工具的真实定位

很多人对自动布线有个误解,觉得它是"一键搞定所有走线"的魔法按钮。实际用过就知道,自动布线器最擅长的是处理规则明确、约束清晰、密度适中的连线任务,比如大量分散的阻容网络、总线扇出、电源和地的初步铺线。它不擅长的是高速差分对、阻抗敏感走线、需要精确等长的时序总线,以及那些需要靠经验判断"往哪边走更顺"的模糊场景。

FreeRouting的定位很明确:它是一个基于几何和规则驱动的布线引擎,输入是Specctra DSN文件,输出是Specctra SES(Session)文件。DSN里包含了板框、层叠、元件封装、网络连接关系、设计规则;SES里则是它算出来的走线路径。整个过程不依赖图形界面做交互式编辑,你给它什么约束,它就在约束空间里找解。

这意味着两件事。第一,你的设计规则写得越清楚,它布出来的结果越可用。第二,它不会替你做"这个网络应该走内层还是外层"这种策略性决策,这些得你在导出DSN之前就想好。

1.2 和KiCad自带布线器的关系

KiCad从5.x开始内置了交互式布线器,6.x之后又集成了自己的自动布线能力。那为什么还要用FreeRouting?我自己的体会是:KiCad自带的自动布线在简单板上够用,但一旦网络数量上去、层数增加,它的收敛速度和结果质量就不太稳定。FreeRouting的算法经过多年迭代,在处理中等规模双层板时,完成率和走线整洁度往往更好。

另一个原因是FreeRouting可以脱离KiCad使用。如果你用的是Eagle、立创EDA、甚至某些老版本的Protel,只要能导出DSN,就能接FreeRouting。这种解耦设计让它在工具链里像个"通用布线后端"。

1.3 适合和不适合的场景

适合的场景我列一下:

  • 双层板,网络数在100到500之间,元件以0805/0603封装为主
  • 数字电路为主,没有严格的阻抗控制要求
  • 电源网络已经手动铺了粗线或铜皮,剩下信号线交给自动布线
  • 原型验证阶段,先跑通功能,后续再优化走线

不适合的场景同样要说清楚:

  • 四层以上、有完整地平面和电源平面的板子,自动布线容易破坏平面完整性
  • 高速信号(USB、HDMI、DDR等),需要手动控制参考平面和回流路径
  • 射频和模拟小信号,走线长度和寄生参数敏感
  • 高密度BGA扇出,需要盘中孔和特殊过孔工艺

提示:自动布线不是替代手动布线,而是把重复性高的连线工作批量化。策略性走线永远需要人来判断。

2. 环境搭建:Java运行时和FreeRouting的安装

2.1 Java版本的选择逻辑

FreeRouting是Java应用,所以第一步是装JRE或JDK。这里有个坑:不同版本的FreeRouting对Java版本要求不一样。老版本(1.4.x系列)在Java 8上跑得最稳,新版本(1.8.x之后)开始要求Java 11甚至17。

我的建议是直接装Java 17 LTS,然后下载最新的FreeRouting发行版。Java 17的长期支持周期长,兼容性好,而且新版本FreeRouting对它的适配最完整。如果你系统里已经有其他Java版本,注意配置好JAVA_HOME,避免版本冲突。

验证Java是否就绪:

java -version

输出里应该能看到类似openjdk version "17.0.x"的字样。如果提示找不到命令,说明PATH没配好,需要手动把Java的bin目录加进去。

2.2 获取FreeRouting的几种途径

FreeRouting的官方发布在GitHub上,提供两种形式:可执行JAR包和带启动脚本的压缩包。我推荐下载带启动脚本的压缩包,因为脚本里已经帮你配好了内存参数和模块路径,省得自己写命令行。

下载后解压到一个路径里不含中文和空格的目录。这一点很重要,Java对非ASCII路径的处理在某些版本上会出问题,我见过因为路径里有中文导致启动直接报错的案例。

解压后的目录结构大致是这样:

freerouting/ ├── freerouting-executable.jar ├── freerouting.sh ├── freerouting.bat └── ...

Linux和macOS用.sh,Windows用.bat。

2.3 启动参数里的内存配置

默认启动脚本给的内存可能偏小,跑大板子会卡甚至OOM。打开启动脚本,找到类似-Xmx的参数,把它调大。我的经验值是:

板子规模建议堆内存
网络数 < 2001G
网络数 200-5002G
网络数 > 5004G

修改方式是在启动脚本的Java命令里加上或修改-Xmx2g这样的参数。注意不要超过你机器的物理内存,否则系统会开始换页,反而更慢。

2.4 首次启动的界面认识

FreeRouting的界面很朴素,甚至有点"上个时代"的感觉。主窗口分几个区域:菜单栏、工具栏、左侧的层和网络列表、中间的画布、底部的状态栏。第一次打开是空的,需要导入DSN文件才会显示内容。

工具栏上最常用的几个按钮:打开文件、保存SES、开始自动布线、停止布线、缩放适应。记住这几个就够了,其他功能在初学阶段用不上。

注意:FreeRouting的界面不会自动保存你的操作。布线跑到一半想调整参数,最好先停止、保存当前SES,再重新导入DSN改规则。直接关窗口会丢失进度。

3. 从EDA工具导出Specctra DSN文件

3.1 DSN格式为什么是关键

Specctra DSN是Cadence提出的一种布线交换格式,后来成了事实上的行业标准。它用文本描述整个设计:板框坐标、每一层的用途、每个元件的封装和位置、每个网络的连接关系、设计规则。FreeRouting读的就是这个文件。

DSN的好处是工具无关。不管你是从KiCad、Eagle还是立创EDA导出,只要格式正确,FreeRouting都能处理。坏处是不同EDA工具导出的DSN质量参差不齐,有些会漏掉规则,有些封装定义不完整,导致FreeRouting读进去之后布线结果很奇怪。

3.2 KiCad导出DSN的完整步骤

以KiCad 7为例,流程是这样的:

  1. 打开PCB编辑器,确认板框已经画好,元件已经布局完成
  2. 菜单栏选择文件->导出->Specctra DSN
  3. 在弹出的对话框里选择保存路径,文件名建议用英文
  4. 点击保存,KiCad会生成一个.dsn文件

导出前有几件事必须确认:

  • 设计规则已经设置好。KiCad的板设置->设计规则里的线宽、间距、过孔尺寸,会写进DSN。如果这里没设,FreeRouting会用默认值,布出来的线可能太细或间距不够。
  • 网络类已经分配。电源网络、差分对、普通信号,最好在KiCad里分好类,导出后FreeRouting能识别这些分类。
  • 元件封装完整。如果有封装缺少焊盘定义,DSN里对应元件就是空的,FreeRouting会跳过它。

3.3 立创EDA和其他工具的导出差异

立创EDA专业版支持导出DSN,路径在文件->导出->Specctra DSN。但它的导出有个特点:默认只导出当前可见的层。如果你隐藏了某些层,导出的DSN会缺层定义。导出前把所有层都打开。

Eagle的DSN导出需要通过ULP脚本,稍微麻烦一点。老版本Protel和Altium可以通过File->Export->Specctra Design导出,但Altium的DSN有时会把内层平面也写进去,导致FreeRouting误判层用途,需要在导入后手动检查。

3.4 导出后先做一次自检

拿到DSN文件后,别急着丢给FreeRouting。先用文本编辑器打开,快速扫几眼:

  • 搜索(structure,看层定义是否完整
  • 搜索(placement,看元件数量和位置是否对得上
  • 搜索(network,看网络数量和连接关系是否正常

如果发现层定义缺失或者网络明显不对,回到EDA工具重新导出,别在FreeRouting里硬改。

提示:DSN是纯文本,出问题时可以直接看内容定位。我遇到过导出后网络名变成乱码的情况,就是EDA工具编码设置的问题,改回UTF-8重新导出就好了。

4. FreeRouting的布线参数怎么调

4.1 导入DSN后的第一件事:检查层和规则

导入DSN后,FreeRouting左侧会列出所有层和网络。先点开层列表,确认每一层的类型(信号层、电源层)和方向(水平、垂直)是否正确。双层板通常是顶层水平、底层垂直,这样过孔最少。

然后看规则。FreeRouting的规则菜单里可以设置全局线宽、间距、过孔尺寸。这些值应该和你在EDA工具里设的一致。如果DSD里已经带了规则,这里会显示出来,你只需要确认;如果没带,就得手动补。

4.2 自动布线器的核心参数

FreeRouting的自动布线有几个关键参数,理解它们才能调出好结果:

布线通道宽度(Trace Clearance):这是走线之间、走线和焊盘之间的最小距离。设太小会导致短路风险,设太大会让布线器找不到路径。一般取EDA工具里设计规则的最小间距值。

过孔类型和尺寸:FreeRouting支持通孔和盲埋孔。双层板只用通孔。过孔外径和内径要匹配你的工艺能力,常见的是外径0.6mm、内径0.3mm。

布线层顺序:可以指定优先用哪层。比如让信号优先走顶层,底层留给地。这个设置影响布线的整洁度。

优化迭代次数:FreeRouting会反复尝试优化走线,次数越多结果越好,但时间越长。原型阶段设个中等值就行,比如10到20次。

4.3 参数配置的实操建议

我一般这样配:

参数双层数字板建议值说明
最小线宽0.25mm普通信号
最小间距0.2mm匹配多数PCB厂工艺
过孔外径0.6mm常规工艺
过孔内径0.3mm常规工艺
优化次数15平衡质量和时间
布线层顶层优先底层留地

这些值不是绝对的,要根据你的板子密度和工艺能力调整。密度高的板子线宽和间距都要往下压,但别低于PCB厂的最小能力。

4.4 规则冲突时的处理顺序

有时候DSN里带的规则和FreeRouting的默认规则冲突,比如DSN说最小间距0.15mm,FreeRouting默认0.2mm。这时候FreeRouting会取更严格的值,也就是0.2mm。如果你确实需要0.15mm,得在FreeRouting里手动改。

还有一种情况是某些网络需要特殊规则,比如电源网络要更粗的线。FreeRouting支持按网络类设置规则,在网络列表里选中对应网络,右键设置线宽。这个功能很实用,能把电源和信号分开处理。

注意:改规则之后一定要重新跑一次布线,不要指望改完规则旧结果会自动更新。FreeRouting不会增量更新,每次都是从头算。

5. 执行自动布线并解读结果

5.1 启动布线的正确姿势

参数配好后,点工具栏的自动布线按钮,或者菜单里的Autoroute。FreeRouting会开始计算,画布上会实时显示走线过程。状态栏会显示完成百分比和已布通的网络数。

这个过程可能从几十秒到几十分钟不等,取决于板子复杂度和优化次数。期间界面可能会卡顿,这是正常的,Java在做大量几何计算。别频繁点界面,容易触发重绘导致更卡。

如果跑到一半发现结果明显不对,比如大量网络布不通,可以点停止,调整参数重来。不要让它一直跑到结束,浪费时间。

5.2 怎么看布线结果好不好

布线完成后,从几个维度评估:

完成率:状态栏会显示还有多少网络没布通。理想情况是100%,但实际中80%以上就算不错,剩下的手动补。

走线整洁度:看有没有大量绕远路的线、有没有不必要的过孔。FreeRouting有时会为了布通某个网络而绕大圈,这种线手动优化一下更好。

层间平衡:顶层和底层的走线量应该大致均衡。如果一层特别密一层特别空,说明层顺序设置需要调整。

和板框的关系:走线不能超出板框,也不能压到安装孔和禁布区。FreeRouting一般会遵守,但边界情况要人工检查。

5.3 常见布线失败的原因

现象可能原因处理方式
大量网络布不通间距设太大或板子太密减小间距,或增加层数
走线绕远优化次数不够增加优化迭代
过孔过多层顺序不合理调整优先层
电源线太细网络类规则没设单独给电源网络设线宽
布线超出板框板框定义不完整检查DSN里的板框坐标

5.4 手动补线的时机

自动布线跑完后,剩下的未布通网络通常分两类:一类是确实被其他线挡住了,需要挪线腾空间;另一类是本身连接关系复杂,自动算法处理不好。这两类都建议手动补。

手动补线在FreeRouting里也能做,但它的交互编辑能力很弱,不如导回EDA工具里补。我的习惯是:自动布线跑完,导出SES,导回KiCad,然后在KiCad里手动补剩下的线和优化关键走线。

提示:不要追求100%自动布通。80%自动加20%手动,往往比强行100%自动的结果更好,因为手动部分能针对性地优化。

6. 导出SES并回导到EDA工具

6.1 SES文件是什么

SES是Specctra Session文件,记录的是布线结果:每一段走线的起点、终点、所在层、线宽,每一个过孔的位置和尺寸。它和DSN配合使用,DSN描述"要连什么",SES描述"怎么连的"。

FreeRouting布线完成后,通过文件->导出->Specctra Session生成SES文件。这个文件同样是纯文本,可以用编辑器查看。

6.2 回导到KiCad的步骤

  1. 回到KiCad的PCB编辑器
  2. 菜单栏选择文件->导入->Specctra Session
  3. 选择刚才导出的SES文件
  4. KiCad会把走线合并到当前设计里

导入前建议先备份当前PCB文件,因为导入是覆盖式的,如果SES有问题,原来的走线可能被破坏。

导入后检查几件事:走线是否都在正确的位置、过孔是否正常、有没有网络连接错误。KiCad的DRC(设计规则检查)跑一遍,看有没有违规。

6.3 回导到其他工具的注意事项

立创EDA导入SES的路径在文件->导入->Specctra Session。Eagle需要用ULP脚本导入。Altium的导入在File->Import->Specctra Session。

不同工具对SES的解析有差异,常见问题是过孔尺寸被重置、线宽被改成默认值。导入后一定要检查这些参数,必要时手动修正。

6.4 导入后的收尾工作

SES导入后,板子基本成型,但还有几件事要做:

  • 铺铜:自动布线不管铺铜,需要手动在顶层和底层铺地铜,并连接到地网络
  • DRC检查:跑一遍完整的设计规则检查,修掉所有违规
  • 丝印调整:自动布线可能压到丝印,需要挪动位号
  • 泪滴和加固:对焊盘连接处加泪滴,提高可靠性

这些做完,一块板子的布线才算真正完成。

7. 我踩过的坑和参数调优心得

7.1 路径和编码的坑

前面提过路径不能有中文,这里再强调一次。我最早在Windows上把FreeRouting解压到D:\工具\freerouting,启动直接报ClassNotFoundException,换成纯英文路径就好了。Java的类加载器对非ASCII路径的处理确实有问题。

编码问题也遇到过。有次从立创EDA导出的DSN,网络名里的中文注释变成乱码,FreeRouting读进去后网络识别错误。解决办法是在EDA工具里把导出编码设成UTF-8,或者干脆把网络名里的中文去掉。

7.2 内存不足导致的中断

跑一块400多网络的板子时,默认1G内存跑到70%就卡死了,日志里报OutOfMemoryError。把-Xmx调到3G后顺利跑完。这个坑的教训是:板子规模上去之前,先把内存给够,别等跑到一半才发现。

7.3 规则设置过严导致布不通

有次我把最小间距设成0.25mm,结果一块密度稍高的板子大量网络布不通。降到0.2mm后完成率从60%跳到95%。这说明规则要匹配板子的实际密度,不能一味求保守。当然,降规则之前要确认PCB厂能做得到。

7.4 优化次数和时间的权衡

优化次数设太高,时间成倍增长,但质量提升有限。我实测下来,15次是个甜点值,再往上加,走线整洁度的改善就不明显了。原型阶段甚至可以设5到10次,先看能不能布通,再决定要不要精细优化。

7.5 层顺序对结果的影响

双层板默认是顶层水平、底层垂直。有次我改成顶层优先,结果顶层走线特别密,底层很空,过孔数量反而增加了。后来改回默认的水平和垂直交替,过孔数明显下降。这个参数要根据板子的实际布局来调,没有万能值。

7.6 自动布线后的手动优化重点

自动布线的结果,我一般重点优化这几处:

  • 电源和地:自动布的电源线往往偏细,手动加粗或改成铺铜
  • 晶振和时钟线:这些线要短、要远离干扰源,自动布线不管这些
  • 差分对:如果板上有,必须手动走,自动布线处理不好等长和间距
  • 连接器附近:走线要整齐,方便后续焊接和维修

这些优化做完,板子的电气性能和可制造性都会好很多。

8. 什么情况下该放弃自动布线

自动布线不是万能的,有些板子从一开始就不该指望它。我的判断标准是:

层数超过两层:四层板有完整地平面,自动布线会打乱平面,得不偿失。四层以上基本全手动。

有高速信号:USB、以太网、DDR这些,需要控制阻抗和等长,自动布线做不到。

模拟和射频:小信号对走线长度和寄生电容敏感,必须手动控制。

高密度BGA:扇出需要盘中孔和特殊工艺,自动布线处理不了。

板子特别小:空间紧张时,每一根线的走向都需要仔细规划,自动布线容易布死。

遇到这些情况,FreeRouting可以帮你处理一些边角的低速信号,但核心走线还是得手动。把它当成一个"辅助工具"而不是"替代方案",心态就对了。

9. 把FreeRouting放进日常工作流

我现在的工作流是这样的:布局在KiCad里完成,设计规则设好,导出DSN,FreeRouting跑自动布线,导出SES,回导KiCad,手动补线和优化,最后铺铜和DRC。整个过程里,FreeRouting承担的是"把大量低速信号连起来"这个重复劳动,省下来的时间用在关键走线的优化上。

这套流程跑顺之后,一块中等复杂度的双层板,从布局完成到布线结束,能比纯手动快不少。当然,前提是布局本身合理,如果布局阶段就一团糟,自动布线只会把问题放大。

最后分享一个小技巧:跑自动布线之前,先把电源和地的粗线手动布好,或者用铜皮连上。这样FreeRouting只需要处理信号线,完成率会高很多,结果也更整洁。这个习惯我坚持了很久,效果一直很稳。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询