一种利用perl脚本的仿真器多线程运行方法
【技术领域】
[0001] 本发明涉及仿真器的,特别涉及一种利用PERL脚本的仿真器多线程运行方法。
【背景技术】
[0002]UVM是芯片验证业界最新研发的一种验证方法学。工程师用它可创建坚实、可重 用、具互操作性的验证组件和验证平台。UVM提供基于SystemVerilog语言开发的一套库函 数,工程师通过调用库可以省去自己从零开始开发验证环境的麻烦。
[0003] UVM与SystemVerilog为验证人员开发面向对象的验证环境提供了极大方便,使 得验证环境以及测试向量的开发效率大幅提高。然而随之而来的是大量的测试向量需要 在仿真器上运行,大的芯片验证项目会有几千个测试向量,而且这些测试向量使用不同的 随机数进行随机化测试,需要消耗大量的计算资源以及计算时间。大部分芯片设计所用的 服务器都具有多个计算单元,并且支持通过发布式任务提交将计算任务提交至不同服务器 上。新的EDA软件也大多支持多处理器协同运算,所以能够较快的对大量测试激励进行仿 真。但是老版本的EDA工具有些并不支持多线程运行,使用这样的EDA仿真工具,就无法发 挥新的硬件平台的效率。所以对于不愿意升级到最新版EDA工具,但是需要提高仿真效率 的团队,就需要通过另外途径来运行多线程。
[0004]Perl语言是一种广泛应用的脚本语言。Perl是一种能完成任务的语言。从一开 始,Perl就设计成可以把简单工作简单化,同时又不失去处理困难问题能力的语言。它可 以很容易操作数字,文本,文件和目录,计算机和网络,特别是程序的语言。这种语言应该很 容易运行外部的程序并且扫描这些程序的输出获取感兴趣的东西。而且它还应该很容易能 把这些你感兴趣的东西交给其它程序做特殊的处理。当然,这种语言还应该很容易在任何 现代的操作系统上可以移植地编译和运行。Perl既强大又好用,所以它被广泛地用于日常 生活的方方面面,从宇航工程到分子生物学,从数学到语言学,从图形处理到文档处理,从 数据库操作到网络管理。很多人用Perl进行快速处理那些很难分析或转换的大批量数 据。新版本的Perl,在编译器安装时,可以选择安装支持多线程功能,此功能对多处理器的 平台的应用开发,有巨大帮助。
[0005]Perl语言也广泛应用在集成电路的设计开发的各个环节,一个完善的集成电路开 发环境中,一般会有大量的Perl程序用来自动产生设计环境,自动分析各设计步骤输出的 报告,并提交设计代码以及文档等。
【发明内容】
[0006] 为了解决现有技术的问题,本发明提供了一种利用PERL脚本的仿真器多线程运 行方法,其通过使用最新的Perl编译器的多线程调用模块,使原本只支持单线程,单CPU的 逻辑仿真器,能够同时启动多线程,调用多CPU同时工作,并能在UVM验证环境中同时运行 多个测试向量,从而加快验证收敛速度的方法。
[0007] 本发明所采用的技术方案如下: 一种利用PERL脚本的仿真器多线程运行方法,包括以下步骤: A、 先对运行环境进行基本设置; B、 对所有源文件进行编译; C、 借助Perl语言的多线程能力,启动多个仿真进程,分别运行不同的测试向量; D、 多线程逐个运行所有的测试激励,等所有的方针完成后,分析测试结果,并输出报 告。
[0008] 步骤A中,仿真器只启动一个线程。
[0009] 步骤A中,所述的基本设置包括运行目录的准备,初始化文件的生成,源代码文件 的检出。
[0010] 步骤B中,所述的源文件包括被测对象的源代码,测试平台的源代码,所有测试激 励的源代码。
[0011] 本发明提供的技术方案带来的有益效果是: 本发明利用Perl脚本使单线程仿真器支持多线程UVM测试向量并行运行,通过使用最 新的Perl编译器的多线程调用模块,使原本只支持单线程,单CPU的逻辑仿真器,能够同时 启动多线程,调用多CPU同时工作,并能在UVM验证环境中同时运行多个测试向量,从而加 快验证收敛速度。
【附图说明】
[0012] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他 的附图。
[0013] 图1为现有技术下单线程运行UVM测试向量的流程图。
[0014] 图2为现有技术下利用多线程仿真器多线程运行UVM测试向量的流程图。
[0015] 图3为本发明的利用Perl脚本使单线程仿真器支持多线程UVM测试向量并行运 行的流程图。
【具体实施方式】
[0016] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。
[0017] 实施例一 如图1,为传统的仿真器单线程运行方法:假设需要运行n个测试激励,第一步先对运 行环境进行基本设置,包括运行目录的准备,初始化文件的生成,源代码文件的检出等。第 二步对所有源文件,包括被测对象的源代码,测试平台的源代码,所有测试激励的源代码进 行编译。第三步,单线程逐个运行所有的测试激励,等所有的方针完成后,分析测试结果,并 输出报告。所有以上步骤都基于单线程进行执行,这是最传统的模式,对仿真器软件以及硬 件平台,都没有特殊要求,但是执行需要较长时间。
[0018] 如图2,为现有技术下多线程仿真器的多线程运行方法: 假设EDA软件以及硬件平台都支持多线程,需要运行n个测试激励,第一步先对运行环 境进行基本设置,包括运行目录的准备,初始化文件的生成,源代码文件的检出等,这步只 启动一个线程。第二步对所有源文件,包括被测对象的源代码,测试平台的源代码,所有测 试激励的源代码进行编译,这一步可以启动多个线程。第三步,多线程线程逐个运行所有的 测试激励,等所有的方针完成后,分析测试结果,并输出报告。第一步以及最后一步基于单 线程进行执行,中间的编译,仿真都启动多线程,这对仿真器软件以及硬件平台,都要求有 多线程支持,执行时间大为缩短。
[0019] 本实施例针对硬件平台支持多线程,但是EDA仿真软件只有单线程的情况,可以 使用如图3所示的方法,在仿真的步骤借助Perl语言的多线程能力,启动多个仿真进程,分 别运行不同的测试向量,虽然每个仿真进程都是单线程的,但是由于多个仿真进程同时启 动,也大大加速了仿真的进度。
[0020] 以下是为使用Perl具体实现多进程仿真的代码示例:
首先最外层循环将所有的测试激励以及随机数种子0-9都遍历一遍。内层程序中,先 检测一下正在运行的线程有哪些,如果正在运行的线程的数目小于可以并行运行的线程数 目nb_pr〇cesS,我们就以当前的随机数种子和测试激励名为参数,再启动一个子进程,并且 记录下来。如果正在运行的线程的数目不小于可以并行运行的线程数目nb_pr〇cesS,我们 则每隔一个时间周期ck_interVal检测一次正在运行的进程数,直到正在运行的线程的数 目小于可以并行运行的线程数目nb_pr〇cesS,我们再插入一个进程。通过以上操作,我们可 以保证在所有仿真结束前,总会有nb_process个进程在同时执行。这里的nb_process- 般设置为当前硬件平台支持的最大线程数目。
[0021] 通过以上的Perl脚本的使用,单线程仿真器就可以支持多线程UVM测试向量批处 理时的并行运行了,仿真时间可以大幅降低。
[0022] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和 原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1. 一种利用PERL脚本的仿真器多线程运行方法,包括以下步骤: A、 先对运行环境进行基本设置; B、 对所有源文件进行编译; C、 借助Perl语言的多线程能力,启动多个仿真进程,分别运行不同的测试向量; D、 多线程逐个运行所有的测试激励,等所有的方针完成后,分析测试结果,并输出报 告。2. 根据权利要求1所述的一种利用PERL脚本的仿真器多线程运行方法,其特征在于, 所述的步骤A中,仿真器只启动一个线程。3. 根据权利要求1所述的一种利用PERL脚本的仿真器多线程运行方法,其特征在于, 所述的步骤A中,所述的基本设置包括运行目录的准备,初始化文件的生成,源代码文件的 检出。4. 根据权利要求1所述的一种利用PERL脚本的仿真器多线程运行方法,其特征在于, 所述的步骤B中,所述的源文件包括被测对象的源代码,测试平台的源代码,所有测试激励 的源代码。
【专利摘要】本发明涉及仿真器的,特别涉及一种利用PERL脚本的仿真器多线程运行方法。本发明利用Perl脚本使单线程仿真器支持多线程UVM测试向量并行运行,通过使用最新的Perl编译器的多线程调用模块,使原本只支持单线程,单CPU的逻辑仿真器,能够同时启动多线程,调用多CPU同时工作,并能在UVM验证环境中同时运行多个测试向量,从而加快验证收敛速度。
【IPC分类】G06F17/50
【公开号】CN104899369
【申请号】CN201510291677
【发明人】耿介, 姜凯, 于治楼
【申请人】浪潮集团有限公司
【公开日】2015年9月9日
【申请日】2015年6月1日