掌桥专利:专业的专利平台
掌桥专利
首页

基于python的仿真环境管理平台、方法、设备及介质

文献发布时间:2023-06-19 16:09:34



技术领域

本发明涉及仿真领域,具体而言,涉及一种基于python的仿真环境管理平台、方法、设备及介质。

背景技术

电子设计自动化(Electronic design automation,EDA)是指利用计算机辅助设计软件,以计算机为工作平台,融合应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动化设计。利用EDA工具,电子工程师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出集成电路版图或印刷电路板版图的整个过程在计算机上自动处理完成。

在集成电路芯片领域同样少不了EDA工具的参与,工程师们会使用该工具来完成超大规模集成电路芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等),可以说芯片设计的每个环节都离不开EDA工具的参与,这已经成为了一套标准流程的设计方式。

其中,对于数字类芯片的前端设计和验证,常用的EDA仿真工具有:

Mentor公司的Modelsim

Synopsys公司的VCS

Cadence公司的NC-Verilog、Verilog—XL

以上公司的EDA仿真工具均可以对RTL(Register Transfer Level)代码进行功能,行为,逻辑和时序的仿真。

一般情况下,芯片设计和验证开发人员都有各自独立的工作目录,并在该目录下建立独立的EDA仿真环境,通过各自维护的仿真运行脚本来对RTL代码以及相应的验证平台进行编译和仿真。整个工作流程大致如图1所示。

现有工作流程存在如下缺陷:

1、由于开发团队成员各自开发维护一套独立的仿真开发环境,那么文件存放目录路径会各不相同,仿真命令和方式也会存在差异,导致每个人的仿真环境不尽相同,因此团队成员之间很难进行相互之间的协作交流。比如,对于需要团队其他成员进行协助进行定位RTL行为功能等问题时存在困难,因为需要首先熟悉对方的仿真环境,这无疑增加了团队协作的成本,从而导致团队整体工作效率的降低。

2、由于开发团队成员各自开发维护一套独立的仿真开发环境,因此很难对仿真开发流程做标准化,从而导致标准文档描述的缺失,管理流程的混乱,而芯片的设计和验证过程是一项非常细致的讲究团队协作配合的工作,容不得一丁点差错,否则很容易导致芯片的流片失败。而众所周知,流片的成本非常高昂,企业一般很难承受流片失败所带来的影响,除此之外,还会大大延长芯片及配套中下游产品推向市场的时间,容易错过市场的窗口期,错失一系列的商业机会。

3、由于开发团队成员的技术水平深浅不一,在各自独立开发维护的仿真环境中,或许会遇到各种各样的问题和困难,需要独立或相互探讨进行解决,这增加了开发的时间,白白消耗了开发人员的精力,导致团队整体效率的减低。

4、对于新入职的开发团队成员来说,由于没有一套标准的仿真开发环境供参考,导致较难融入团队,增大了团队适应成本,变相降低了团队协作的效率。

发明内容

有鉴于此,本发明的目的在于提供一种基于python的仿真环境管理平台、方法、设备及介质,以改善上述问题。

本发明实施例提供了一种基于python的仿真环境管理平台,其包括:

命令接收单元,用于接收测试平台提交的仿真命令;

解析单元,用于对所述仿真命令进行解析,以获得仿真命令参数,并根据所述仿真命令参数生成仿真任务;

执行单元,用于根据所述仿真任务执行仿真,以产生仿真日志文件和波形文件;

判断单元,用于对仿真日志文件中的指定关键字进行抓取并通过函数返回值判断仿真结果是通过还是失败;

显示单元,用于当判断仿真结果通过时,将仿真日志文件和波形文件显示到屏幕上。

优选地,所述仿真环境管理平台设定有统一的环境变量,所述环境变量包括工作目录所在路径和快捷映射命令。

优选地,还包括:

配置单元,用于对仿真环境管理平台进行基本的参数配置,包括:

对日志模块做日志格式设置;

对仿真模式进行配置,支持对仿真测试用例的三种仿真运行模式:

多进程运行模式,该模式为默认的模式

多线程运行模式

顺序运行模式。

优选地,所述解析单元至少支持以下命令参数的解析:

-tb:用于指定需要验证的测试平台名称;

-casename:用于指定需要仿真运行的测试用例名称;

-compile_args:用于传入编译参数,从而对代码进行静态的选择性编译;

-sim_args:用于传入仿真运行参数,从而对代码进行动态的选择性仿真;

-seed:用于指定随机种子,从而对测试平台中的随机函数的随机模式进行指定或随机;

-bypass_compile:用于跳过编译阶段,直接进入仿真运行阶段,从而加速仿真运行效率,对于此前编译过的测试平台来说,只需要传入不同的测试用例名称,直接进行仿真;

-testlist:用于指定回归测试时的测试用例列表文件,EDA仿真工具会根据此前配置的仿真模式对列表中的测试用例进行遍历仿真运行;

-parallel:用于指定回归测试模式时是否调用多线程或多进程来进行并行仿真加速,最大线程和进程数默认为服务器CPU核心数;

-waveform:用于指定仿真后产生的波形文件格式;

-mode:用于指定回归测试模式时的仿真运行模式,支持多进程,多线程以及顺序执行的三种运行模式。

优选地,对于单个测试用例,所述执行单元具体用于:

根据测试平台名称创建并进入编译目录路径下;

根据仿真命令参数产生编译命令;

执行编译命令并产生编译日志文件;

根据测试用例名称,仿真运行参数和随机种子创建并进入仿真目录路径下;

根据仿真命令参数产生仿真命令;

执行仿真命令并产生仿真日志文件和波形文件。

优选地,对于基于列表的回归测试用例,所述执行单元具体用于:

根据测试平台和回归测试用例列表名称创建并进入编译目录路径下;

根据仿真命令参数产生编译命令;

执行编译命令并产生编译日志文件;

创建用于回归测试的随机种子列表;

根据配置的仿真运行模式以及根据测试用例名称,仿真运行参数和随机种子来遍历创建并进入仿真目录路径下;

根据仿真命令参数产生仿真命令;

执行仿真命令并产生仿真日志文件和波形文件。

优选地,还包括:

报告日志单元,用于运行python模块测试并产生报告日志文件;其中,报告日志文件包括所有的测试用例名称,仿真日志,仿真结果和随机种子信息。

本发明实施例还提供了一种基于python的仿真环境管理方法,其包括:

接收测试平台提交的仿真命令;

对所述仿真命令进行解析,以获得仿真命令参数,并根据所述仿真命令参数生成仿真任务;

根据所述仿真任务执行仿真,以产生仿真日志文件和波形文件;

对仿真日志文件中的指定关键字进行抓取并通过函数返回值判断仿真结果是通过还是失败;

当判断仿真结果通过时,将仿真日志文件和波形文件显示到屏幕上。

本发明实施例还提供了一种基于python的仿真环境管理设备,其特征在于,包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的基于python的仿真环境管理方法。

本发明实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的基于python的仿真环境管理方法。

综上所述,本实施例的基于python的仿真环境管理平台,其具有如下优点:

(1)基于python语言开发实现了仿真环境的统一管理,实现了对团队EDA仿真流程的标准化,方便了团队之间的交流协作,提高了整个团队的工作效率,此外还可以方便收集仿真后台数据,从而做进一步的资源统计分析和管理优化。

(2)针对多个目标测试用例的回归仿真场景,提供了三种仿真运行模式的支持,包括顺序运行,多进程运行以及多线程运行模式,配合LSF可以很方便的对提交的仿真作业进行计算资源的调度和仿真运行。

(3)通过使用基于python的argparse模块来对仿真命令参数进行解析,从而满足了不同项目组定制化的EDA仿真需求。

(4)采用基于python的面向对象的开发方式以及可扩展的解析参数,可以很方便地扩展出更加复杂,更加完善的精细化仿真环境管理流程,从而进一步提升团队的协作效率。

(5)通过使用基于python的jinjia2模块和pytest模块来产生和运行仿真测试脚本,从而返回测试用例仿真结果并输出报告日志。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是现有的仿真环境管理方法的实现架构图。

图2是本发明第一实施例提供的仿真环境管理平台的实现原理图。

图3是本发明第一实施例提供的仿真环境管理平台的模块示意图。

图4是本发明一实施例提供的仿真环境管理平台的实现架构图。

图5是IBM Spectrum LSF负载共享架构图。

图6是本发明第二实施例提供的仿真环境管理方法的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了更好的理解本发明的技术方案,下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

下面结合附图与具体实施方式对本发明作进一步详细描述:

如图2所示,在本实施例,不再由开发团队人员各自独立维护自己的仿真开发环境,而是统一由管理人员通过本实施例的仿真环境管理平台进行维护,开发团队人员只需要通过其测试平台200按照统一的命令格式进行调用即可,此外,仿真产生的过程文件的目录位置也都是统一的格式,因此开发团队成员之间可以方便地进行协作交流。

这里的仿真环境管理人员会首先收集不同项目组成员的EDA工具使用需求,然后基于python开发相应的仿真环境管理脚本,除了基本编译和仿真功能以外,还提供多种命令行参数供用户使用,从而满足不同项目组成员的定制化的EDA工具使用需求。

请参阅图3以及图4,在本实施例中,为了实现仿真环境的统一管理,所述仿真环境管理平台包括:

命令接收单元10,用于接收测试平台200提交的仿真命令。

解析单元20,用于对所述仿真命令进行解析,以获得仿真命令参数,并根据所述仿真命令参数生成仿真任务。

在本实施例中,各个开发人员可以通过其自身的测试平台200来提交仿真命令,命令接收单元10可接收该仿真命令,再通过解析单元20进行解析,以获得仿真命令参数。其中,一般的,仿真命令包括如下仿真命令参数中的全部或者部分:

-tb:用于指定需要验证的测试平台名称;

-casename:用于指定需要仿真运行的测试用例名称;

-compile_args:用于传入编译参数,从而对代码进行静态的选择性编译;

-sim_args:用于传入仿真运行参数,从而对代码进行动态的选择性仿真;

-seed:用于指定随机种子,从而对测试平台中的随机函数的随机模式进行指定或随机;

-bypass_compile:用于跳过编译阶段,直接进入仿真运行阶段,从而加速仿真运行效率,对于此前编译过的测试平台来说,只需要传入不同的测试用例名称,直接进行仿真;

-testlist:用于指定回归测试时的测试用例列表文件,EDA仿真工具会根据此前配置的仿真模式对列表中的测试用例进行遍历仿真运行;

-parallel:用于指定回归测试模式时是否调用多线程或多进程来进行并行仿真加速,最大线程和进程数默认为服务器CPU核心数;

-waveform:用于指定仿真后产生的波形文件格式;

-mode:用于指定回归测试模式时的仿真运行模式,支持多进程,多线程以及顺序执行的三种运行模式。

相应的,解析单元20也需要支持对这些仿真命令参数的解析。

其中,具体地,如图4所示,所述解析单元20可为基于python开发父类对象Common,在其中创建仿真环境管理的基础接口方法,包括:

产生随机种子的接口方法

命令行参数解析的接口方法

加载yaml文件数据的接口方法

产生并进入编译目录路径的接口方法

产生编译命令的接口方法

运行编译命令的接口方法

产生并进入仿真目录路径的接口方法

产生仿真命令的接口方法

运行仿真命令的接口方法

判断返回仿真结果的接口方法

产生仿真用例结果测试脚本的接口方法

运行仿真用例结果测试脚本并产生报告日志的接口方法

打印仿真结果和波形文件路径位置的接口方法

然后对上述父类对象进行继承以产生子类对象Simulation_flow,在其中创建仿真环境管理的流程的接口方法,包括:

基本仿真流程配置的接口方法

单个测试用例仿真流程的接口方法

多个测试用例的回归仿真流程的接口方法

用于为回归测试产生随机种子列表的接口方法

用于顺序运行的回归测试流程的接口方法

用于多线程运行的回归测试流程的接口方法

用于多进程运行的回归测试流程的接口方法

用于提交给LSF的最小仿真任务单元的接口方法

最后例化该子类对象,并根据仿真场景调用不同的仿真流程的接口方法,从而生成仿真任务,并写入到队列中。

执行单元30,用于根据所述仿真命令参数执行仿真,以产生仿真日志文件和波形文件。

其中,所述执行单元30从队列中提取仿真任务,并将其分配给对应的计算资源来执行仿真任务,然后执行单元30不断与计算机集群资源和队列进行通信,从而分配最佳计算资源给目标仿真任务,以最终实现最佳的计算机资源利用,负载均衡并降低企业成本负责计算机资源的资源调度和分配执行。

具体地,在执行仿真时:

对于单个测试用例,所述执行单元30具体用于:

根据测试平台名称创建并进入编译目录路径下;

根据仿真命令参数产生编译命令;

执行编译命令并产生编译日志文件。

其中,上述为编译步骤,对于此前编译过的测试平台来说,可以通过仿真命令参数bypass_compile跳过编译步骤,直接进行下面的仿真步骤。

根据测试用例名称,仿真运行参数和随机种子创建并进入仿真目录路径下。

在本实施例中,例如,设置工作目录为WORK_SPACE,设置alias快捷映射命令runsim来映射执行对应的python脚本。

根据仿真命令参数产生仿真命令;

执行仿真命令并产生仿真日志文件和波形文件。

对于基于列表的回归测试用例,所述执行单元30具体用于:

根据测试平台和回归测试用例列表名称创建并进入编译目录路径下;

根据仿真命令参数产生编译命令;

执行编译命令并产生编译日志文件;

创建用于回归测试的随机种子列表;

根据配置的仿真运行模式以及根据测试用例名称,仿真运行参数和随机种子来遍历创建并进入仿真目录路径下;

根据仿真命令参数产生仿真命令;

执行仿真命令并产生仿真日志文件和波形文件。

判断单元40,用于对仿真日志文件中的指定关键字进行抓取并通过函数返回值判断仿真结果是通过还是失败。

其中,可通过基于python的jinjia2模块以及pytest模块来产生python模块测试脚本文件来对仿真日志文件中的指定关键字进行抓取并通过函数返回值。

显示单元50,用于当判断仿真结果通过时,将仿真日志文件和波形文件显示到屏幕上。

在本实施例中,当确定仿真通过后,将相关仿真结果信息打印到屏幕,可以方便开发人员对测试过程进行调试。

当然,如果仿真不通过,也可以将失败的理由打印到屏幕上,以供开发人员参考以及调整。

优选地,还包括:

配置单元,用于对仿真环境管理平台进行基本的参数配置,包括:

对日志模块做日志格式设置。

对仿真模式进行配置,支持对仿真测试用例的三种仿真运行模式:

多进程运行模式,该模式为默认的模式

多线程运行模式

顺序运行模式。

具体地,对于python多线程编程来说,python会使用一种叫做全局解释器锁(g'lobal interpreter lock,GIL)来防止Cpython(python解释器)的状态在多线程环境里受到破坏干扰。但是这会存在一个缺陷,即在程序中的多线程任务,由于受到GIL约束,即每个线程在执行过程中都需要先获得GIL,每次或许只能有一个线程向前执行推进,而无法实现多线程的齐头并进。

虽然说多线程编程由于受到GIL锁的影响,并不能真正实现并行加速,但是可以通过多线程编程模拟同时执行多项任务的效果,也可以让程序在执行阻塞式IO密集型任务时,继续做其他运算。但是EDA仿真任务通常属于计算密集型的运算任务,程序本身内不会有太多的阻塞式I/O任务,因此无法利用多线程的上述特性。因此一般无法通过多线程编程来实现真正的并行EDA仿真加速,相反还可能会因为线程的频繁切换,导致效率下降。而对于python多进程编程来说,每个进程在会有单独的GIL,不会存在类似多线程编程中对GIL争抢的情况。因此在面对计算密集型任务时,可以使用多进程编程来真正实现EDA的并行仿真加速,从而充分利用CPU多核运算能力,并且会随着CPU核心数量的增加,性能也会得到进一步的提升。

所以考虑在一定的时间内并行处理一些工作时,最好依靠多进程来创建多个EDA仿真任务,以便在多个CPU核心之间分散负载。

具体地,本实施例使用内置的multiprocesssing模块来提供多进程的并行仿真运行,使用内置的concurrent.futures模块来提供多进程的仿真运行,其中多进程和多线程编程实现对仿真的加速是以消耗计算机资源和EDA工具的授权license为代价的。而对于计算机资源的合理使用分配和负载均衡,将由企业级软件IBM Spectrum LSF来负责,其提供了一个资源管理框架,实现更快、更可靠的工作负载性能并降低企业成本,其基本架构如图4所示。

优选地,还包括:

报告日志单元,用于运行python模块测试并产生报告日志文件;其中,报告日志文件包括所有的测试用例名称,仿真日志,仿真结果和随机种子信息。

综上所述,本实施例的基于python的仿真环境管理平台,其具有如下优点:

(1)基于python语言开发实现了仿真环境的统一管理,实现了对团队EDA仿真流程的标准化,方便了团队之间的交流协作,提高了整个团队的工作效率,此外还可以方便收集仿真后台数据,从而做进一步的资源统计分析和管理优化。

(2)针对多个目标测试用例的回归仿真场景,提供了三种仿真运行模式的支持,包括顺序运行,多进程运行以及多线程运行模式,配合LSF可以很方便的对提交的仿真作业进行计算资源的调度和仿真运行。

(3)通过使用基于python的argparse模块来对仿真命令参数进行解析,从而满足了不同项目组定制化的EDA仿真需求。

(4)采用基于python的面向对象的开发方式以及可扩展的解析参数,可以很方便地扩展出更加复杂,更加完善的精细化仿真环境管理流程,从而进一步提升团队的协作效率。

(5)通过使用基于python的jinjia2模块和pytest模块来产生和运行仿真测试脚本,从而返回测试用例仿真结果并输出报告日志。

请参阅图6,本发明第二实施例还提供了一种基于python的仿真环境管理方法,其包括:

S201,接收测试平台提交的仿真命令;

S202,对所述仿真命令进行解析,以获得仿真命令参数,并根据所述仿真命令参数生成仿真任务;

S203,根据所述仿真任务执行仿真,以产生仿真日志文件和波形文件;

S204,对仿真日志文件中的指定关键字进行抓取并通过函数返回值判断仿真结果是通过还是失败;

S205,当判断仿真结果通过时,将仿真日志文件和波形文件显示到屏幕上。

本发明第三实施例还提供了一种基于python的仿真环境管理设备,其特征在于,包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的基于python的仿真环境管理方法。

本发明第四实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的基于python的仿真环境管理方法。

在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 基于python的仿真环境管理平台、方法、设备及介质
  • 基于Vissim构建仿真路网平台系统、方法、设备及存储介质
技术分类

06120114723342