FreeRouting项目中多层板通孔布线问题的技术分析

FreeRouting项目中多层板通孔布线问题的技术分析

freerouting Advanced PCB auto-router freerouting 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting

问题背景

在PCB设计领域,FreeRouting作为一款开源的自动布线工具,被广泛应用于电路板布线设计。近期用户反馈在使用FreeRouting处理多层板设计时,发现内层走线会穿过通孔(via)的问题,导致设计规则违规。这一现象在4层板设计中尤为明显,影响了设计的可靠性和正确性。

问题现象

当用户从EasyEDA导出设计文件(.dsn格式)并在FreeRouting中打开时,原本应该是贯穿所有层的通孔(via)在某些情况下被错误地识别为仅连接特定层的盲孔(blind via)。这导致以下具体问题表现:

  1. 内层走线会直接穿过通孔,而不是被通孔阻挡
  2. 设计规则检查(DRC)会报告违规
  3. 在PCB制造时可能导致短路风险

技术分析

经过深入调查,发现这一问题实际上源于EasyEDA的.dsn文件导出功能存在缺陷。具体技术细节如下:

  1. 文件格式问题:.dsn格式最初设计主要用于双面板,对多层板支持不完善
  2. 层信息丢失:在导出过程中,通孔的层连接信息被错误处理,完整通孔被转换为仅连接特定层的盲孔
  3. 数据转换错误:EasyEDA在生成.dsn文件时,未能正确保留通孔在所有层的连接信息

解决方案

针对这一问题,社区提出了多种解决方案:

  1. EasyEDA修复:已向EasyEDA开发团队反馈此问题,确认是一个bug并将修复
  2. 临时解决方案:开发了一个Python脚本,可以自动修复.dsn文件中的通孔层信息
  3. 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)

最佳实践建议

  1. 对于多层板设计,建议先确认导出工具是否正确处理了层信息
  2. 使用最新版本的PCB设计工具和FreeRouting
  3. 在布线完成后,仔细检查所有通孔的连接情况
  4. 考虑使用专业的PCB设计工具进行复杂多层板设计

未来展望

随着PCB设计向高密度、多层化发展,自动布线工具需要不断完善对复杂via类型的支持。FreeRouting社区已经计划在2.0版本中引入更完善的via类型管理功能,包括:

  1. 更精细的via类型控制
  2. 改进的层连接管理
  3. 增强的设计规则检查
  4. 更好的第三方工具兼容性

这一问题虽然源于工具链的兼容性问题,但也提醒我们在PCB设计流程中需要关注数据转换的完整性和准确性,特别是在使用不同工具协作时。

freerouting Advanced PCB auto-router freerouting 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田震亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值