Python处理EE网表

对于硬件工程师来说,学习一些软件可以起到事半功倍的效果,当前运用python无疑是比较高效的,有很多的库函数可以使用,并且语法简洁学习成本较低。

原理图,PCB等EDA工具可以方便的导出网表等文本文件,处理这些文件用于生成各种设计报告,check设计错误非常有帮助,下边以处理网表生成格式化的字典格式的网络-器件对应关系,器件-位号对应关系为例说明。

首先,先清理下数据,讲分散在多行的数据整合进一行,去除多余的空格,并分开网表信息和器件对应关系信息。网表来源:打开Xpedition Designer,打开要处理的原理图,依次点击file - export - keyin netlist

import re

def file_processing(file):
    """
    file processing for normalization
    1. summarize data in lines to single line
    2. change continuous space to single space
    3. split info to netlist(type:list) and part info(type:list)
    file is a netlist file path, such as D:/xxx/xxx/xxx.kyn, 
        generated by clicking the Xpedition Designer(ee): file- export-keyin netlist
    """
    data = ""
    with open(file,"r") as f:
        data = f.read()
        
    data = data.replace("\n*","")
    data = " ".join(re.split(r'[ ]+',data))
    
    data_list = data.replace("%Part","%page").split("%page")
    net_info = data_list[1:-1]
    part_info = data_list[-1:]
    return net_info,part_info

处理网表信息

def net_processing(net_info):
    """
    processing info into net_dict: 
    eg: 
        {net:[[comp,pin],[comp,pin]...],...}
    """
    net_dict = dict()
    for page in net_info:
        page = page.strip()
        net_list = page.split("\n")
        if len(net_list) >=1:
            if net_list[0].startswith("\\"):
                pass
            else:   # remove the first line
                net_list = net_list[1:]
            
            for net_txt in net_list:
                net_data = net_txt.split(" ")
                net = net_data[0].replace("\\","")
                net_content = []
                for net_conn in net_data[1:]:
                    if len(net_conn.strip()) == 0:
                        break
                    comp,pin = net_conn.split("\\-\\")
                    comp = comp.replace("\\","")
                    pin = pin.replace("\\","")
                    net_content.append([comp,pin])
                net_dict[net] = net_content
        else:
            print("page no content: ", page)
    
    return net_dict

处理器件信息

def part_processing(part_info): 
    """
    processing info into part_dict: 
    eg: 
        {part_position : part_name,...}
        part_position, C101,U200
        part_name, different between different ee library
    """
    part_dict = dict()
    for page in part_info:
        page = page.strip()
        part_list = page.split("\n")

        if len(part_list) > 0:
            if part_list[0].startswith("\\"):
                pass
            else :
                part_list = part_list[1:]

            for part_txt in part_list:
                part_txt = part_txt.strip()
                part_data = part_txt.split(" ")
                part_name = part_data[0].replace("\\","")
                for part_pos in part_data[1:]:
                    if len(part_pos.strip()) == 0:
                        break
                    part_position = part_pos.replace("\\","")
                    part_dict[part_position] = part_name
        else:
            print("part no info", page)
    return part_dict

验证内容:

file = "xxx.kyn"   # change to your file
net_info,part_info = file_processing(file)
print(net_info,part_info)

net_dict = net_processing(net_info)
print(net_dict)

part_dict = part_processing(part_info)
print(part_dict)

后续,可以利用这些信息处理一些事情了,比如某个网络上的负载情况,耐压情况,比如双SIM必须4根线都有连接,还可以设置checklist的标准文件,自动check。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值