后续:临时代用方法
AI搞了一个分离顶层ses,自行解决底层+焊盘ses的python程序。
1、安装好python,安装pip install sexpdata库。
2、将ses文件(比如a.ses)拖到本python文件上面(传入命令行运行),会得到两个新的ses文件(BV_a.ses)(T_a.ses)
3、先导入底层+焊盘的ses文件(BV_a.ses),查找所有布线,设置到底层。
4、导入顶层(T_a.ses)搞定
分离ses脚本.py
import sys
import os
import sexpdata
def process_ses(input_path):
if not os.path.exists(input_path):
return
# 尝试以 gbk 编码读取含有中文的文件
try:
with open(input_path, 'r', encoding='gbk') as f:
data = sexpdata.load(f)
except UnicodeDecodeError:
with open(input_path, 'r', encoding='utf-8') as f:
data = sexpdata.load(f)
dir_name = os.path.dirname(input_path)
base_name = os.path.basename(input_path)
def find_node_idx(container, key):
for i, item in enumerate(container):
if isinstance(item, list) and len(item) > 0 and item[0] == sexpdata.Symbol(key):
return i
return None
routes_idx = find_node_idx(data, 'routes')
if routes_idx is None: return
nw_idx = find_node_idx(data[routes_idx], 'network_out')
if nw_idx is None: return
original_nets = data[routes_idx][nw_idx][1:]
def filter_nets(mode):
new_nets = [sexpdata.Symbol('network_out')]
for net in original_nets:
if not isinstance(net, list): continue
filtered_content = []
for item in net[2:]:
if not isinstance(item, list): continue
tag = item[0]
if mode == 'T':
if tag == sexpdata.Symbol('wire'):
path = item[1]
if path[1] == sexpdata.Symbol('TopLayer'):
filtered_content.append(item)
else:
if tag == sexpdata.Symbol('wire'):
path = item[1]
if path[1] == sexpdata.Symbol('BottomLayer'):
filtered_content.append(item)
登录 或 注册 后才可以进行评论哦!