Python处理EE网表

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

对于硬件工程师来说学习一些软件可以起到事半功倍的效果当前运用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。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python