FreeRouting项目中多层板通孔布线问题的技术分析
freerouting Advanced PCB auto-router 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting
问题背景
在PCB设计领域,FreeRouting作为一款开源的自动布线工具,被广泛应用于电路板布线设计。近期用户反馈在使用FreeRouting处理多层板设计时,发现内层走线会穿过通孔(via)的问题,导致设计规则违规。这一现象在4层板设计中尤为明显,影响了设计的可靠性和正确性。
问题现象
当用户从EasyEDA导出设计文件(.dsn格式)并在FreeRouting中打开时,原本应该是贯穿所有层的通孔(via)在某些情况下被错误地识别为仅连接特定层的盲孔(blind via)。这导致以下具体问题表现:
- 内层走线会直接穿过通孔,而不是被通孔阻挡
- 设计规则检查(DRC)会报告违规
- 在PCB制造时可能导致短路风险
技术分析
经过深入调查,发现这一问题实际上源于EasyEDA的.dsn文件导出功能存在缺陷。具体技术细节如下:
- 文件格式问题:.dsn格式最初设计主要用于双面板,对多层板支持不完善
- 层信息丢失:在导出过程中,通孔的层连接信息被错误处理,完整通孔被转换为仅连接特定层的盲孔
- 数据转换错误:EasyEDA在生成.dsn文件时,未能正确保留通孔在所有层的连接信息
解决方案
针对这一问题,社区提出了多种解决方案:
- EasyEDA修复:已向EasyEDA开发团队反馈此问题,确认是一个bug并将修复
- 临时解决方案:开发了一个Python脚本,可以自动修复.dsn文件中的通孔层信息
- FreeRouting改进:计划在未来版本中增加更完善的via类型支持,包括:
- 仅通孔(Through Via)
- 盲孔(Blind Via)
- 埋孔(Buried Via)
技术实现细节
对于需要立即解决问题的用户,可以使用以下Python脚本临时修复.dsn文件:
import re
import glob
# 正则表达式匹配shape定义
regex = r"\(shape\([^)]*\)"
top_layer = '1'
bottom_layer = '2'
multi_layer_no = ('15', '16') # 多层板的内层编号
# 处理.dsn文件
file_list = glob.glob('./*.dsn')
for input_file in file_list:
with open(input_file, "r") as f:
lines = f.readlines()
# 处理每一行
for count, line in enumerate(lines):
matches = re.finditer(regex, line, re.MULTILINE)
for match in matches:
layer = line.split(' ')
# 检查是否已经是多层
if not any(i in layer for i in multi_layer_no):
# 如果不是多层,添加内层定义
try:
index = layer.index(bottom_layer)
for i in multi_layer_no:
new_layer = layer.copy()
new_layer[index] = i
lines.insert(count+1, ' '.join(new_layer))
count += 1
except ValueError:
continue
# 写入修复后的文件
with open(input_file, 'w') as out:
out.writelines(lines)
最佳实践建议
- 对于多层板设计,建议先确认导出工具是否正确处理了层信息
- 使用最新版本的PCB设计工具和FreeRouting
- 在布线完成后,仔细检查所有通孔的连接情况
- 考虑使用专业的PCB设计工具进行复杂多层板设计
未来展望
随着PCB设计向高密度、多层化发展,自动布线工具需要不断完善对复杂via类型的支持。FreeRouting社区已经计划在2.0版本中引入更完善的via类型管理功能,包括:
- 更精细的via类型控制
- 改进的层连接管理
- 增强的设计规则检查
- 更好的第三方工具兼容性
这一问题虽然源于工具链的兼容性问题,但也提醒我们在PCB设计流程中需要关注数据转换的完整性和准确性,特别是在使用不同工具协作时。
freerouting Advanced PCB auto-router 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考