专业版导入SES自动布线问题
导入ses自带布线文件,顶面和底面的线都导入到顶面了。检查过ses文件没问题的,包括旧版本正常的的ses也会 V3.2.56~58都这样,一直没好
嘉立创EDA
全部评论 默认 最新
Ansifa 作者
2026-01-26 12:32:59 来自广东
测试3.2.83已经解决[胜利]
Ansifa 作者
2026-01-16 22:22:15 来自广东
捞一下,v3.2.69还没治好
Ansifa 作者
2026-01-16 22:19:28 来自广东
elif tag == sexpdata.Symbol('via'): filtered_content.append(item) if filtered_content: new_nets.append([net[0], net[1]] + filtered_content) return new_nets # 生成顶层 top_data = [item for item in data] top_routes = [item for item in top_data[routes_idx]] lib_idx_top = find_node_idx(top_routes, 'library_out') if lib_idx_top is not None: top_routes.pop(lib_idx_top) top_routes[find_node_idx(top_routes, 'network_out')] = filter_nets('T') top_data[routes_idx] = top_routes # 生成底层 bv_data = [item for item in data] bv_routes = [item for item in bv_data[routes_idx]] bv_routes[find_node_idx(bv_routes, 'network_out')] = filter_nets('BV') bv_data[routes_idx] = bv_routes # 写出文件使用 utf-8 确保兼容性 with open(os.path.join(dir_name, f"T_{base_name}"), 'w', encoding='utf-8') as f: f.write(sexpdata.dumps(top_data)) with open(os.path.join(dir_name, f"BV_{base_name}"), 'w', encoding='utf-8') as f: f.write(sexpdata.dumps(bv_data)) if __name__ == "__main__": if len(sys.argv) > 1: process_ses(sys.argv[1])
Ansifa 作者
2026-01-16 22:18:57 来自广东
后续:临时代用方法 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)
嘉立创EDA小吴 官方
2025-12-26 09:48:16 来自广东
抱歉,这个是已知问题,还在修复中。
Ansifa 作者
2025-12-25 21:48:01 来自广东
至少可以选择回滚版本,还不能自行选择稍旧版使用,只能硬手动修补,要命[流汗]
已折叠部分评论 展开
没有更多啦~