专利名称:一种自动调度逻辑仿真与代码覆盖率分析的方法与系统的制作方法
技术领域:
本发明涉及系统仿真领域,尤指一种自动调度逻辑仿真与代码覆盖率分析的方法与系统。
背景技术:
在大规模逻辑(FPGA/ASIC)验证中,仿真与代码覆盖率分析是其中一个重要过程。
其基本执行流程如下(1)预编译(Instrumentation)——对被测逻辑整合,产生适合代码覆盖率分析的文件;(2)仿真(Simulation)——仿真用例的执行过程,其过程中加入代码覆盖率分析;(3)代码覆盖率结果分析(Reporting)——合并多个仿真用例执行后产生代码覆盖率数据,并产生代码覆盖率报告。
一般来说,每个逻辑项目验证都会需要多个仿真用例的支持。如何完成整个逻辑项目验证中多个仿真用例的联合仿真与代码覆盖率分析过程,业界有许多开展技术。
现有技术一GUI技术,这是基本技术。简要介绍如下(1)首先,逻辑验证人员在代码覆盖率分析工具的GUI环境下,根据个人的经验和判断,主要通过选择对话框、确认按钮的步步引导,完成预编译过程;(2)然后,在仿真过程的GUI环境下,依据类似的操作过程,完成仿真用例的执行过程;(3)最后,在代码覆盖率分析工具的GUI环境下,依据类似的操作过程,完成代码覆盖率结果的分析,并给出覆盖率分析报告。
现有技术一的缺点缺点1配置都是测试执行时临时进行的,其效果完全取决于执行者个人的经验和技术水平;缺点2执行过程难以统一,好的经验不易积累和共享,不易形成标准化的运作流程;缺点3每个测试执行都要人工参与,逻辑验证人员无法从这些机械重复的事务中解放出来。
现有技术二局部意义的脚本化技术。
脚本化技术是多数逻辑验证人员经常采用的技术。一般来说,常用仿真工具和代码覆盖率分析工具都支持脚本化技术(如TCL等)。通过编写脚本,可以使预编译过程、各个仿真用例仿真过程或代码覆盖率结果分析过程的执行实现自动化。
但是,现有技术的“局部意义的脚本化技术”,实现的是某个局部阶段的脚本化,并非逻辑验证中仿真与代码覆盖率分析全流程的脚本化。
现有技术二的缺点该技术还限制于“局部意义的脚本化技术”,解决了局部范围的脚本化,但无法解决逻辑仿真与代码覆盖率分析全流程自动化。仿真前的预编译过程,以及仿真后的代码覆盖率结果分析过程,还需要人工参与启动。尽管每个仿真用例可以通过脚本实现自动执行,但启动每个仿真用例的工作还需要逻辑验证人员手工参与。仿真用例数目越多,逻辑验证人员参与的工作量越大。
发明内容
本发明提供一种自动调度逻辑仿真与代码覆盖率分析的方法与系统,实现逻辑仿真与代码覆盖率分析全流程自动化。
本发明提供的自动调度逻辑仿真与代码覆盖率分析的方法,包括下列步骤11)使用一主模块对被测逻辑进行预编译,产生适合代码覆盖率分析的预编译文件;12)所述主模块调度用户提供的全部仿真用例,生成一仿真用例索引目录;13)所述主模块根据上述仿真用例索引目录顺序执行各仿真用例,对被测逻辑进行仿真测试;14)所述主模块根据预编译文件得到各仿真用例执行后的代码覆盖率结果并保存。
根据本发明的上述方法,还包括有下列步骤将代码覆盖率结果输出给一代码覆盖率结果分析模块,由该结果分析模块实现仿真用例执行后被测逻辑的代码覆盖率结果分析并给出分析报告。
根据本发明的上述方法,所述主模块在计算机中通过脚本语言实现,仿真用例的运行是由脚本进行控制;其中主模块执行各仿真用例的具体方法为顺序调度执行每个用例目录下的启动脚本;在启动脚本中进行该仿真用例所需的相关配置;顺序调度激励产生、仿真执行、结果分析脚本,完成该仿真用例的执行。
根据本发明的上述方法,其特征在于所述主模块对被测逻辑项目和仿真用例进行路径设置并创建目录结构,将被测逻辑和仿真用例拷贝到相应路径下保存;自动生成仿真用例名称列表;主模块自动搜索仿真用例名称,写入到仿真用例索引目录,并弹出图形用户界面,供用户选择是否需要进行仿真用例修改。
根据本发明的上述方法,所述主模块设置有代码覆盖率分析的控制开关,供用户选择是否需要对代码覆盖率进行分析。
本发明提供一种自动调度逻辑仿真与代码覆盖率分析的系统,包括一主模块实现对系统中各模块的调度;一预编译模块实现被测逻辑的预编译过程;一用户模块包括被测逻辑、总线功能模型和若干仿真用例,由用户提供;一代码覆盖率结果分析模块实现仿真用例执行后被测逻辑的代码覆盖率结果分析及报告功能;所述主模块调度预编译模块对被测逻辑进行预编译,产生适合代码覆盖率分析的预编译文件;所述主模块调度用户提供的仿真用例,由总线功能模型模拟周围器件和逻辑接口,向被测逻辑提供所需的各种激励,进行仿真测试,并将测试结果送入结果分析模块中进行分析。
本发明的上述系统,还包括有一工具支持模块提供调度逻辑仿真与代码覆盖率分析过程中需要用到的一些典型功能,由所述主模块进行调度;一仿真配置模块提供仿真过程中需要的配置项,由所述主模块进行调度。
采用本发明的方法与系统,能够实现逻辑仿真与代码覆盖率分析全流程自动化。
图1为本发明系统结构图;图2为本发明方法实施例流程图;图3为本发明方法实施例中的目录结构示意图。
具体实施例方式
图1为本发明的逻辑仿真与代码覆盖率分析系统结构示意图,虚线框内为“用户提供部分”。
如图所示,主模块主要实现一些环境变量的配置,以及对各子模块的调度功能。
工具支持模块提供调度逻辑仿真与代码覆盖率分析过程中需要用到的一些典型功能,由所述主模块进行调度;例如支持用户自由选择是否需要启动代码覆盖率分析、支持自动搜索逻辑代码文件并允许用户根据特定需求来调整需要进行覆盖率分析的逻辑文件、支持自动搜索仿真用例集并根据用户特定需求来调整本次仿真中需要执行的仿真用例、支持仿真编译过程的选择、支持自动创建与配置仿真目录、支持文件到列表的转换、支持文件的批量拷贝与删除,等等。
仿真配置提供仿真过程中需要的配置项,由所述主模块进行调度。例如配置代码覆盖率分析所需的设计文件、配置待加载的原始覆盖率文件、配置仿真后保存的结果覆盖率文件、配置仿真过程中代码覆盖率分析的一些其它特殊属性,等等。
预编译模块实现被测逻辑的预编译过程,例如支持用户对所有逻辑代码批量选择所需的代码覆盖率类型、支持用户根据逻辑代码的重要性差异而选择不同分析深度的代码覆盖率类型、支持用户对不同的语句类型和逻辑操作符选择是否进行代码覆盖率分析,等等。
代码覆盖率结果分析模块实现仿真用例执行后被测逻辑的代码覆盖率结果分析及报告功能,例如支持每个仿真用例的结果覆盖率文件与其名称一致、支持仿真用例集中所有结果覆盖率文件的自动合并、支持用户选择所关心的代码覆盖率类型并给出覆盖率报告、支持用户选择所关心的类型进行代码文件的排序,等等。
用户提供部分主要包括被测逻辑(DUT)、共享模型、BFM(Bus FunctionalModel,总线功能模型)、仿真用例等内容。
被测逻辑逻辑仿真测试活动中所关注的被测对象,其主要形式是面向可编程逻辑芯片的可综合RTL代码;
共享模型其代码形式和DUT类似,该部分可以是一些已成熟的设计,或由芯片商等提供的一些商用IP模块,和DUT一起构成完整的逻辑。这部分在逻辑测试活动中不是主要的关注对象,一般也不再进行代码覆盖率分析;BFM总线功能模型,是仿真测试平台(TestBench)的一个重要组成部分,模拟周围器件和逻辑的接口,向逻辑提供所需的各种激励,并捕获逻辑的响应结果,送入结果分析模块中进行分析。BFM可以由可综合的语言编写,也可以由C、C++、SystemC等高级语言编写;仿真用例在仿真活动中执行的测试用例,仿真用例的运行是由脚本控制的。其中包括一个启动脚本、可能有一个或多个激励产生脚本、仿真执行脚本、结果分析脚本等,启动脚本顺序调度激励产生、仿真执行、结果分析等脚本。对于每个仿真用例,其启动脚本的名称都相同,便于主模块(调度算法模块)对其进行调度执行;但其配置参数有差别,分别实现不同的仿真控制,完成不同的功能测试。
如图2所示,为本发明方法一具体实施例的流程图,其中主模块为用脚本语言实现的计算机程序,包括如下具体步骤(1)主模块设置逻辑项目路径,创建图3所示的目录结构,一并参见图3,包括一级目录project_name——具体逻辑项目的名称;二级目录bfm——存放仿真BFM文件;rm——存放仿真所需的参考模型,为可选项;rtl——存放被测逻辑;sim——仿真环境所在目录,包括四个三级目录;sim_work——仿真工作库;cov_work——代码覆盖率分析工作库;
report——存放代码覆盖率报告;log——存放过程中产生的一些有用log信息;另外,sim目录还存放仿真配置文件、预编译脚本、代码覆盖率结果分析脚本。
tests——仿真用例所在目录。包含多个三级目录。推荐三级目录命名与具体仿真用例名称一致,每个仿真用例的启动脚本名称统一(例如,可统一为start.tcl)。
tools——存放仿真及代码覆盖率分析过程中可能用到的工具脚本。
(2)主模块提供用户浏览器界面,以此将被测逻辑(DUT)、BFM、共享模型、仿真配置模块、预编译模块、代码覆盖率结果分析模块、仿真用例等从其它地方拷贝到相应路径下,也可以由用户手工追加并分别配置;(3)主模块设置代码覆盖率分析过程控制,即配置是否进行代码覆盖率分析的控制开关(code_cov_flag),其值为“0”或“1”;(4)如果代码覆盖率分析的控制开关为“0”,则转到步骤(20),否则执行步骤(5);(5)自动查找.\rtl目录下的逻辑代码文件,并将其索引写入到一个索引文件(instr_index.f);(6)主模块弹出对话框,询问用户是否需要修改这个索引文件(即是否要对索引文件中列出的所有逻辑代码文件进行代码覆盖率分析);如果需要修改,执行步骤(7),否则转至步骤(8);(7)通过文本编辑器打开该文件,供用户修改,用户修改完毕、保存退出后,可按“确认”按钮,程序向下执行至(8);修改过程中“确认”按钮无效;(8)弹出是否进行“预编译”过程选择按钮,供用户选择是否进行预编译。如果逻辑代码没有更改,预编译过程只需要进行一次即可;如果选择进行预编译,则程序向下执行(9),否则转向(10);
(9)启动预编译模块,依据该模块中所进行的相关配置,产生相应的预编译文件;(10)弹出“仿真编译选择”按钮,用户根据需要选择是否进行仿真编译,如否,则转至步骤(12);(11)如果代码覆盖率分析控制开关为1,则编译预编译代码,用户也可根据需要选择共享模型、BFM模块,调用仿真编译脚本,选择执行编译过程,之后按“确认”按钮,程序进行相关操作;(12)主模块自动搜索仿真用例集.\tests下面的仿真用例名称,并写入到仿真用例索引列表(tst_index.f);(13)主模块弹出图形用户界面,供用户选择是否需要进行修改仿真用例列表,如果是,执行步骤(14);否则,转至步骤(15);(14)通过文本编辑器打开该索引文件,供用户修改;用户修改完毕、保存退出后,按“确认”按钮,程序向下执行,修改过程中“确认”按钮无效;(15)依据修改后的仿真用例索引文件(tst_index.f),给各仿真用例设定标号N,初始化N=1;(16)主模块,顺序调度执行每个用例目录下的启动脚本;在启动脚本中进行该仿真用例所需的相关配置,并顺序调度激励产生、仿真执行、结果分析等脚本,完成该仿真用例的执行;(17)保存当前仿真用例执行后的覆盖率结果文件;(18)判断N是否为索引文件尾,如果索引中的所有用例执行完毕,则转向(19),否则,使N=N+1,转至步骤(16);(19)调度代码覆盖率结果分析模块,依据所进行的配置,给出全部仿真用例执行完毕后总的代码覆盖率结果报告;(20)程序结束。
通过上述自动调度方法,可以实现逻辑项目路径及相关目录的配置、被测逻辑中需进行代码覆盖率分析的文件的重定义、预编译过程的调度、仿真编译过程的选择、需执行的仿真用例的重定义、仿真用例的自动执行、各仿真用例执行后的代码覆盖率结果文件的重命名、代码覆盖率结果数据的合并,及代码覆盖率分析报告的产生。
在上述方法中,对于用户可能需要改变的配置项,通过“工具支持模块”,提供相应的GUI(Graphic User Interface,图形用户界面)接口,供用户根据需要自由配置。
这样,既可给用户很大的自由度,根据实际需要进行相应的配置,也保证了不需要用户配置部分的自动、高效执行。在设计好仿真用例的情况下,通过主模块的自动调度,可以将所有仿真用例的仿真和代码覆盖率分析过程自动执行完毕,并提供给用户一份完整的代码覆盖率分析报告。
本发明方法中的各模块,可以通过脚本语言(如TCL等)实现,也可以通过C语言实现。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
权利要求
1.一种自动调度逻辑仿真与代码覆盖率分析的方法,包括下列步骤11)使用一主模块对被测逻辑进行预编译,产生适合代码覆盖率分析的预编译文件;12)所述主模块调度用户提供的全部仿真用例,生成一仿真用例索引目录;13)所述主模块根据上述仿真用例索引目录顺序执行各仿真用例,对被测逻辑进行仿真测试;14)所述主模块根据预编译文件得到各仿真用例执行后的代码覆盖率结果并保存。
2.如权利要求1所述的方法,其特征在于还包括有下列步骤将代码覆盖率结果输出给一代码覆盖率结果分析模块,由该结果分析模块实现仿真用例执行后被测逻辑的代码覆盖率结果分析并给出分析报告。
3.如权利要求2所述的方法,其特征在于所述主模块在计算机中通过脚本语言实现,仿真用例的运行是由脚本进行控制;其中主模块执行各仿真用例的具体方法为顺序调度执行每个用例目录下的启动脚本;在启动脚本中进行该仿真用例所需的相关配置;顺序调度激励产生、仿真执行、结果分析脚本,完成该仿真用例的执行。
4.如权利要求3所述的方法,其特征在于所述主模块对被测逻辑项目和仿真用例进行路径设置并创建目录结构,将被测逻辑和仿真用例拷贝到相应路径下保存;自动生成仿真用例名称列表;主模块自动搜索仿真用例名称,写入到仿真用例索引目录,并弹出图形用户界面,供用户选择是否需要进行仿真用例修改。
5.如权利要求4所述的方法,其特征在于所述主模块设置有代码覆盖率分析的控制开关,供用户选择是否需要对代码覆盖率进行分析。
6.一种自动调度逻辑仿真与代码覆盖率分析的系统,其特征在于包括一主模块实现对系统中各模块的调度;一预编译模块实现被测逻辑的预编译过程;一用户模块包括被测逻辑、总线功能模型和若干仿真用例,由用户提供;一代码覆盖率结果分析模块实现仿真用例执行后被测逻辑的代码覆盖率结果分析及报告功能;所述主模块调度预编译模块对被测逻辑进行预编译,产生适合代码覆盖率分析的预编译文件;所述主模块调度用户提供的仿真用例,由总线功能模型模拟周围器件和逻辑接口,向被测逻辑提供所需的各种激励,进行仿真测试,并将测试结果送入结果分析模块中进行分析。
7.如权利要求6所述的系统,其特征在于所述系统还包括有一工具支持模块提供调度逻辑仿真与代码覆盖率分析过程中需要用到的一些典型功能,由所述主模块进行调度;一仿真配置模块提供仿真过程中需要的配置项,由所述主模块进行调度。
全文摘要
本发明有关一种自动调度逻辑仿真与代码覆盖率分析的方法与系统,包括11)使用一主模块对被测逻辑进行预编译,产生适合代码覆盖率分析的预编译文件;12)所述主模块调度用户提供的全部仿真用例,生成一仿真用例索引目录;13)所述主模块根据上述仿真用例索引目录顺序执行各仿真用例,对被测逻辑进行仿真测试;14)所述主模块根据预编译文件得到各仿真用例执行后的代码覆盖率结果并保存。采用本发明的方法与系统,能够实现逻辑仿真与代码覆盖率分析全流程自动化。
文档编号G06F11/00GK1744092SQ200410079030
公开日2006年3月8日 申请日期2004年9月4日 优先权日2004年9月4日
发明者张凯峰, 叶芬, 徐争 申请人:华为技术有限公司