基于Python的EDA软件二次开发系统的制作方法

文档序号:31660798发布日期:2022-09-27 23:02阅读:275来源:国知局
基于Python的EDA软件二次开发系统的制作方法
基于python的eda软件二次开发系统
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种基于python的eda软件二次开发系统。


背景技术:

2.随着工艺、材料等技术的发展,现代电路设计规模越来越大,集成电路器件集成度越来越高,使用eda(electronic design automation)软件进行eda工程设计时,面临以下问题:(1)面对集成电路设计中的超大量元件、引脚等部件微调、修改工作,如果依靠传统纯手工操作eda,将带来大量重复、易错的手工操作,效率低,且重复性操作易引起人员操作疲劳,导致偏差错误放大,造成严重的设计缺陷。(2)由于不同用户流程差异,通用eda软件不能完全覆盖个体用户差异需求。因此需要通过二次开发,按用户个性化需求定制化功能以达到期望目标。
3.现有技术中,基于skill语言作为二次开发技术的allegro产品,但是skill语言仅适用于allegro产品的二次开发,脱离allegro产品后无法使用,学习成本高,通用性差。cn102929645b公开了一种内嵌python解释器实现软件系统二次开发的方法,但是由于eda软件通常采用单机模式运行,即独立进程运行,如果直接使用cn102929645b的方法,会导致io开销增大,时延变长,执行效率低,无法满足单机模式运行的eda软件的二次开发需求。由此可知,提供一种适用于单机模式运行的eda软件的二次开发技术成为亟待解决的技术问题。


技术实现要素:

4.本发明目的在于,提供一种基于python的eda软件二次开发系统,提高了单机模式运行的eda软件的二次开发的执行效率和可扩展性,且降低了二次开发难度和开发成本。
5.本发明提供了一种基于python的eda软件二次开发系统,所述eda软件采用单机模式运行,所述系统包括预先定义的采用c++编写的底层的业务内核接口集合{a1,a2,
…am
}、采用python编写的上层的用户接口集合{b1,b2,
…bn
}、映射表、存储有计算机程序的存储器和处理器;其中,ai为第i个业务内核接口,i的取值范围为1到m,m为业务内核接口总数;bj为第j个用户接口,j的取值范围为1到n,n为用户接口总数;所述映射表用于定义业务内核接口和用户接口的映射关系,ai与至少一个bj具有映射关系,bj与至少一个ai具有映射关系;当所述计算机程序被所述处理器执行时,实现以下步骤:步骤s1、运行所述系统,为每一ai分配内存地址;步骤s2、基于所述映射表将bj所对应的ai的内存地址与bj的名称绑定,将bj的函数与对应的ai的函数绑定;步骤s3、获取用户基于上层业务逻辑输入的python脚本,所述python脚本包括至少一个bj的名称;步骤s4、解析并执行所述python脚本,当执行至bj时,基于bj的名称绑定的ai的内存地址直接调用对应的ai的函数执行对应的业务操作。
6.本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提供的一种基于python的eda软件二次开发系统可达到相当的技术进步性及实用性,并具有产业上的广泛利用价值,其至少具有下列优点:本发明基于编译性开发语言c++实现底层基础业务,具有执行效率高特点,基于python脚本调用二次开发接口实现对单机模式运行的eda软件的二次开发,通过对基础业务单元接口的排列组合、达到符合自身场景流程的定制,提高了单机模式运行的eda软件的二次开发的执行效率和可扩展性,且降低了二次开发难度和开发成本。
7.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
8.图1为本发明实施例提供的基于python的eda软件二次开发系统示意图。
具体实施方式
9.为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种基于python的eda软件二次开发系统的具体实施方式及其功效,详细说明如后。
10.本发明实施例提供了一种基于python的eda软件二次开发系统,所述eda软件采用单机模式运行,如图1所示,所述系统包括预先定义的采用c++编写的底层的业务内核接口集合{a1,a2,
…am
}、采用python编写的上层的用户接口集合{b1,b2,
…bn
}、映射表、存储有计算机程序的存储器和处理器。其中,ai为第i个业务内核接口,i的取值范围为1到m,m为业务内核接口总数;bj为第j个用户接口,j的取值范围为1到n,n为用户接口总数。需要说明的是,m和n的值基于具体的业务场景来设置,可以根据业务内核接口和用户接口的设置需求适应性调整。所述映射表用于定义业务内核接口和用户接口的映射关系,ai与至少一个bj具有映射关系,bj与至少一个ai具有映射关系,优选的,bj与ai一一对应。从而使得每一bj均能获取到至少一个ai在底层执行响应的业务操作。需要说明的是,在eda软件开发阶段,即可基于具体业务需求完成{a1,a2,
…am
}、{b1,b2,
…bn
}和映射表的设置。
11.当所述计算机程序被所述处理器执行时,实现以下步骤:步骤s1、运行所述系统,为每一ai分配内存地址。
12.需要说明的是,在运行所述系统之前,{a1,a2,
…am
}、{b1,b2,
…bn
}等均存储在一个可执行文件或者动态库中,运行所述系统之后,为每一ai分配内存地址,将{a1,a2,
…am
}、{b1,b2,
…bn
}加载至对应的进程中。
13.所述步骤s1中,为每一ai分配内存地址的同时还为每一ai分配对应的cpu时间和硬盘资源。
14.步骤s2、基于所述映射表将bj所对应的ai的内存地址与bj的名称绑定,将bj的函数与对应的ai的函数绑定。
15.需要说明的是,步骤s2通过内存地址绑定访问方式达到python脚本中的发布用户接口可无感化调用底层c++业务内核接口,不会增加io开销和时延。
16.步骤s3、获取用户基于上层业务逻辑输入的python脚本,所述python脚本包括至少一个bj的名称。
17.需要说明的是,用户编写上层业务逻辑python脚本,通过调用用户接口进行二次开发达成业务逻辑,屏蔽了底层实现逻辑的复杂性,能够让用户更专注与上层业务高效执行。
18.步骤s4、解析并执行所述python脚本,当执行至bj时,基于bj的名称绑定的ai的内存地址直接调用对应的ai的函数执行对应的业务操作。
19.其中,所述系统还包括python脚本解析执行器,用于解析并执行所述python脚本。每执行至一个bj时,即可无感化调用对应的底层c++业务内核接口执行对应的业务操作。
20.优选的,ai按照最小粒度业务单元抽取生成,从而使得通过python脚本中的bj调用对应的ai能够尽可能覆盖更多的业务流程。
21.作为一种实施例,bj基于预设的接口结构生成,所述预设的接口结构包括接口函数数据段,还包括输入参数数据段、返回值数据段中的一个或多个,所述函数数据段用于定义bj对应的函数,所述返回值数据段用于定义返回数据类型,所述返回数据类型包括对象类型、对象集合类型、枚举值类型、字符串类型和布尔类型。需要说明的是,与bj具有映射关系的ai也对应设置有对应的函数数据段,若bj具有输入参数数据段,则对应的ai也对应设置有对应的输入参数数据段;若bj具有返回值数据段,则对应的ai也对应设置有对应的返回值数据段,且ai和对应的bj的输入参数和返回值的类型一致。
22.作为一种实施例,具体可以采用pybind11开源组件来实现bj与ai的内存绑定,所述步骤s2具体可包括:步骤s21、采用pybind11_embedded_module接口为bj绑定添加主体模块定义,所述主体模块包括多个子模块,每一子模块对应一个业务类别。
23.步骤s22、采用def_submodule接口为bj绑定对应的子模块定义。
24.其中,通过为bj绑定对应的子模块定义将bj按照业务类别分类,能够基于类别调用对应的bj,便于python脚本中业务流程的构建。
25.步骤s23、基于bj对应的主体模块定义、子模块定义和对应的接口结构生成bj对应的接口名称。
26.步骤s24、基于bj与ai的映射关系,采用module::def内外部接口将bj所对应的ai的内存地址与bj的名称绑定,将bj的函数与对应的ai的函数绑定。
27.需要说明的是,pybind11_embedded_module接口、def_submodule接口、module::def均为pybind11开源组件中的接口,在此不再赘述。bj与ai的内存绑定并不仅限于pybind11开源组件,其他可以实现bj与ai的内存绑定的技术也都落在本发明保护范围之内。
28.基于bj和ai的内存绑定,使得基于python脚本中的上层bj即可使得用户无感的调用底层c++的业务内核接口执行对应的业务流程,底层基础业务实现由编译性开发语言c++实现,执行效率高。由于业务核心基础粒度单元通过c++开发,屏蔽了业务实现的复杂性,使得二次开发用户只需关注上层应用逻辑。基于python的二次开发语言,易学、易用、资料众多,降低了二次开发的使用难度。python语言的引入由于其自身易学、开源特点,极大降低了用户的学习与使用成本。此外,通过基于二次开发功能的自行开发达到个性化需求实现,避免了通过定制开发个性化需求特性所付出的高额成本,降低了二次开发的使用成本。用
户通过对基础业务单元接口的排列组合、达到符合自身场景流程的定制,可扩展性极其灵活。
29.需要说明的是,主体模块和主体模块对应的模块可以基于具体应用场景来设置,以下通过一个具体示例来进一步说明。作为一种实施例,所述主体模块包括pcb( printed circuit board)模块,所述pcb模块对应的子模块包括设计子模块design、叠加子模块stackups、层级子模块layers、获取指定层对象类型子模块layer_type、获取指定层对象名称子模块layer_name和设置指定层子模块。所述设计子模块design对应的返回数据类型设置为对象类型,对应的函数设置为getdesign(),输入参数设置为空。所述叠加子模块stackups对应的返回数据类型设置为对象集合,对应的函数设置为design.getstackups(),输入参数设置为空。所述层级子模块layers对应的返回数据类型设置为对象集合,对应的函数设置为stackup.getlayers(),输入参数设置为空。所述获取指定层对象类型子模块layer_type对应的返回数据类型设置为枚举值,对应的函数设置为layer.getlayertype(),输入参数设置为空。所述获取指定层对象名称子模块layer_name对应的返回数据类型设置为字符串,对应的函数设置为layer.getlayername(),输入参数设置为空。所述设置指定层子模块的返回数据类型设置为布尔类型,包括失败标识和成功标识,对应的函数设置为layer.setlayername(new_name),输入参数设置为需要设置的层名称new_name。通过pcb模块对应的子模块与bj绑定即可生成bj对应的名称,例如:design=pcb. getdesign(),再如:stackups= design.getstackups()。需要说明的是,上述示例仅为二次开发流程中所涉及的部分主体模块和子模块,而非全集。主体模块和对应子模块的详细设置可根据具体应用需求而定。
30.作为一种实施例,所述系统还包括基于{b1,b2,
…bn
}和每一bj对应的主体模块定义和子模块定义生成的业务内核接口功能列表,所述功能列表包括bj名称和对应的功能信息;用户基于所述功能列表即可获知bj名称列表,以及每一bj名称对应的功能,从而根据具体业务需求来编写对应的python脚本。所述系统还包括python输入界面,具体为可以设置为python ide(integrated development environment)模块,用于接收用户输入的python脚本,作为二次开发的入口,所述python脚本基于预设的业务流程和所述业务内核接口功能列表生成。
31.作为一种实施例,所述步骤s4包括:步骤s41、当执行至bj时,基于bj的名称绑定的ai的内存地址直接调用对应的ai的函数。
32.步骤s42、若bj包括输入参数,则将bj的输入参数传给ai,在ai的内存地址中基于bj的输入参数调用并执行ai的函数,若bj中没有输入参数,则直接在ai的内存地址中调用并执行ai的函数。
33.步骤s43、若bj中没有返回值,则执行步骤s44,若bj包括返回值,则执行步骤s45。
34.步骤s44、在ai的内存地址中执行完ai的函数之后,直接继续执行所述python脚本的后续操作。
35.步骤s45、在ai的内存地址中基于ai的函数的运行结果生成对应的返回值, bj从ai的内存地址中读取对应的返回值继续执行所述python脚本的后续操作。
36.本发明实施例所述系统基于编译性开发语言c++实现底层基础业务,具有执行效
率高特点,基于python脚本调用二次开发接口实现对单机模式运行的eda软件的二次开发,通过对基础业务单元接口的排列组合、达到符合自身场景流程的定制,提高了单机模式运行的eda软件的二次开发的执行效率和可扩展性,且降低了二次开发难度和开发成本。
37.需要说明的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
38.以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1