FreeRouting项目中的规则文件解析问题及解决方案
freerouting Advanced PCB auto-router 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting
问题背景
在FreeRouting这个PCB自动布线工具中,用户发现了一个关于规则文件解析的重要问题。当用户在.dsn或.rules文件中使用下划线"_"作为网络类名称的一部分时,解析器会错误地将其识别为操作符,导致规则无法正确应用。这个问题影响了PCB设计中不同网络类之间间距规则的设定。
问题现象
用户在实际使用中发现,当规则文件中包含类似以下内容时:
(rules PCB vdiv_placed.dsn
(rule
(clearance 500 (type hv_default))
(clearance 400 (type hv_kicad_default))
)
)
解析器能够正确处理"hv_default"这样的网络类组合,但对于"hv_kicad_default"这样的名称却无法识别。这种不一致性会导致PCB设计中关键的电气间距规则失效,可能引发设计安全隐患。
技术分析
经过深入分析,这个问题源于FreeRouting的规则解析器对网络类名称的处理逻辑。解析器原本设计用于处理使用连字符"-"分隔的网络类组合(如"default-1A"),但在实际应用中,许多EDA工具(如KiCad)生成的规则文件会使用下划线"_"作为网络类名称的一部分。
解析器在处理这类混合命名时存在以下技术难点:
- 词法分析阶段未能正确区分作为名称一部分的下划线和作为操作符的下划线
- 语法解析树构建时错误地将下划线解释为某种运算关系
- 网络类组合的匹配逻辑过于严格,无法适应实际设计中的命名多样性
解决方案
针对这一问题,开发团队实施了以下改进措施:
- 增强词法分析器,明确区分作为名称字符的下划线和作为操作符的下划线
- 修改语法解析规则,支持更灵活的网络类命名方式
- 实现兼容性处理,能够同时支持连字符"-"和下划线"_"作为分隔符或名称部分
- 添加对引号包裹的网络类名称的特殊处理
改进后的解析器能够正确处理以下各种格式的规则定义:
(clearance 100.0 (type "GND"-"VOUT"))
(clearance 150.0 (type "GND"-"R3_P"))
(clearance 200.0 (type "R3_P"-"VOUT"))
(clearance 600.0 (type VIN-VOUT))
(clearance 700.0 (type VIN-"R3_P"))
实际应用效果
经过修复后,FreeRouting能够:
- 正确解析来自不同EDA工具(包括KiCad、FreeCAD等)生成的规则文件
- 支持复杂的网络类命名,包含特殊字符和空格
- 在间距矩阵中准确反映所有定义的规则关系
- 保持与现有设计文件的向后兼容性
这一改进显著提升了FreeRouting在实际PCB设计工作流中的可靠性和适用性,特别是对于那些使用多种EDA工具协作完成的设计项目。
最佳实践建议
基于这一问题的解决经验,我们建议PCB设计工程师:
- 在定义网络类名称时保持一致性,尽量使用一种分隔符(建议使用连字符"-")
- 对于包含特殊字符的名称,使用引号包裹
- 在复杂设计中,定期检查生成的间距矩阵,确认所有规则已正确应用
- 跨工具协作时,注意检查规则文件的兼容性
这一改进已合并到FreeRouting的主干代码中,用户可以通过更新到最新版本获得这一功能增强。
freerouting Advanced PCB auto-router 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考