一种支持覆盖率统计功能的仿真器及方法

文档序号:10697570阅读:370来源:国知局
一种支持覆盖率统计功能的仿真器及方法
【专利摘要】本发明公开了一种支持覆盖率统计功能的仿真器及方法,涉及到芯片仿真技术领域。仿真器包括调试控制模块、芯片功能模块和覆盖率统计模块,芯片功能模块包括CPU_DBG、AHB总线、芯片程序存储器、外设;覆盖率统计模块包括统计模块、寄存器、接口转换模块、选择模块、统计数据存储器。统计模块使用CPU_DBG和AHB总线的信号,将程序执行的地址信息实时记录到统计数据存储器。覆盖率统计的方法是:进入调试模式后设置统计起始地址、开启统计功能,并初始化统计数据存储器,然后进入运行模式执行程序,完成测试后导出统计数据并计算出测试覆盖率。本发明的仿真器支持代码覆盖率、分支覆盖率、数据覆盖率统计功能,可以很快定位测试程序及被测程序的问题,提高程序开发测试效率。
【专利说明】
一种支持覆盖率统计功能的仿真器及方法
技术领域
[0001]本发明涉及一种芯片仿真器,特别涉及一种支持覆盖率统计功能的仿真器及方法。
【背景技术】
[0002]在智能卡芯片的程序开发和测试中,测试是否全面(即测试覆盖率)一直是开发和测试人员都比较关注的问题。在芯片仿真器中实现测试覆盖率统计功能,目前常用的有2种实现方法:程序插粧方法和仿真器TRACE功能。
[0003]程序插粧方法是指,通过软件对已设计好的程序,或者是对编译出来的程序代码指令分析,在特殊位置插入功能程序,程序在测试运行过程中输出执行的信息,再通过软件分析得到测试覆盖率。此方法插入程序代码设计比较复杂,由于修改了被测程序结构,严重影响被测软件的代码量和执行速度,对于存储器容量使用比较紧张的智能卡芯片的程序测试并不适用。
[0004]仿真器TRACE功能是指,仿真器硬件将程序运行过程中关键数据进行压缩缓存,实时的将数据传送给上位机软件,进行PC端的大数据存储,程序测试完成后,再通过软件分析得到测试覆盖率。此方法可以记录程序所有轨迹,对问题分析定位很有帮助,但是对仿真器硬件存储器容量、存储器读写速度、数据传输速度要求都比较高,关键数据压缩设计比较复杂,对大数据的分析比较困难,实现TRACE功能的仿真器成本较高,开发周期长,也不适合大量的应用于程序的开发和测试。
[0005]如何设计适用于智能卡芯片程序测试,对仿真器硬件要求不高,软硬件设计简单,成本低,支持测试覆盖率统计功能的仿真器?为解决此问题,本发明提出一种支持覆盖率统计功能的仿真器及方法。

【发明内容】

[0006]本发明所解决的技术问题是,如何设计一种支持测试覆盖率统计功能的仿真器。
[0007]本发明的仿真器包括调试控制模块、芯片功能模块、覆盖率统计模块3部分:调试控制模块,用于将统计数据存储器中的数据导入和导出,对芯片功能模块进行调试;芯片功能模块,用于仿真芯片功能,包括CPU_DBG、AHB总线、芯片程序存储器、外设;覆盖率统计模块,用于对程序执行的地址信息进行实时记录,包括统计模块、寄存器、接口转换模块、选择模块、统计数据存储器。
[0008]各组件功能说明如下:
[0009]CPU_DBG,是指芯片的CPU及调试模块,在调试控制模块控制下执行程序;
[0010]AHB总线,是指AHB接口的AHB总线控制器模块,是CPU_DBG与AHB外设的接口 ;
[0011]芯片程序存储器,用于存储芯片执行的程序;
[0012]外设,是指除芯片程序存储器外,芯片的其它AHB外设;
[0013]统计模块,使用CPU_DBGPC接口信号和AHB总线AHB接口信号,将程序执行的地址信息记录到统计数据存储器中,上述的地址信息就是统计数据;
[0014]寄存器,产生统计程序的起始地址、统计使能控制信号,输出给统计模块,控制统计模块实现的具体功能;
[0015]接口转换模块,将AHB总线的AHB接口信号,转换为寄存器接口信号和RAM接口信号,CPU_DBG通过AHB总线、接口转换模块完成对寄存器和统计数据存储器的读写访问;
[0016]选择模块,CPILDBG输出调试模式信号,选择统计模块或者接口转换模块连接到统计数据存储器;
[0017]统计数据存储器,用于存储统计模块记录程序执行的地址信息数据。
[0018]各组件连接关系如下:
[0019]CPU_DBG与调试控制模块、AHB总线、统计模块、选择模块相连,AHB总线与CPU_DBG、芯片程序存储器、外设、统计模块、接口转换模块相连,统计模块与CPU_DBG、AHB总线、寄存器、选择模块相连,接口转换模块与AHB总线、寄存器、选择模块相连,选择模块还与统计数据存储器相连。
[0020]本发明的仿真器针对AHB总线的CPU芯片进行设计,在原有仿真器硬件上增加覆盖率统计模块,使用AHB总线、CPU及调试模块的信号,采用将程序执行的地址在统计数据存储器中对应的地址位置进行打标的方式,实现程序执行地址信息的记录;将统计数据存储器中的统计数据导出,使用程序软件可以计算得到程序执行过的地址,再与程序全部执行的地址数据相比,计算出当前测试达到的程序覆盖率。
[0021]在完成测试后,统计数据存储器中所有的数据都为有效数据,统计数据存储器每一 bit与芯片程序存储器地址对应,在第一次统计前,统计数据存储器全部bit清除为0,完成测试统计后,程序执行过的地址对应的bit标识为I,根据标识I的bit地址,以及统计数据存储器数据与芯片程序存储器地址对应关系,计算出当前程序执行过的实际地址。仿真器支持统计数据存储器中统计数据的导入和导出,支持程序测试停止后再次继续测试,将当前测试统计数据存储器的统计数据导出,再次测试时将上述的统计数据导入统计数据存储器后,基于前一次的测试覆盖率结果继续进行测试。由于统计数据存储器中所有的数据都为有效数据,第一次统计测试前,必需将统计数据存储器全部bit清除为O;如果是基于以前的统计数据继续进行测试,要先导入已有的统计数据,对统计数据存储器全区初始化之后再继续测试。统计数据存储器每一 bit与芯片程序存储器地址对应,是指统计数据存储器每一 bit的地址与芯片程序存储器中数据的字节地址,或是半字地址,或是字地址相对应,与统计的内容有关,例:ARM中指令是半字或字长度,就按最小长度半字来统计,Ibit表示的程序存储器中I个半字的地址,例:AHB总线对常量数据支持字节操作,Ibit表示的程序存储器中I个字节的地址。因此统计数据存储器容量大小是芯片程序存储器容量的1/8,或是1/16,或是1/32。程序对同一地址多次访问只用Ibit表示,当程序长时间测试,统计数据大小不会增加,一直为统计数据存储器的容量大小。
[0022]通过配置仿真器覆盖率统计模块中的寄存器,实现统计功能开关控制,更改统计程序的起始地址的功能。对统计功能开关控制,使仿真器使用更方便,只需要统计覆盖率时打开统计功能。当仿真器设计时对统计数据存储器容量有限制,不能与芯片程序存储器全部地址对应时,通过更改起始地址,实现对指定的一段程序进行统计分析,采用更新起始地址多次测试的方式,实现对芯片程序存储器所有程序的测试覆盖率统计分析。此方法解决了统计数据存储器容量较大的问题,用小容量的存储器也可实现所有程序的测试覆盖率分析;由于统计数据只在测试完成后导出,对数据导出的速度没有严格要求,仿真器设计实现更容易。
[0023]本发明的仿真器支持代码覆盖率、分支覆盖率、数据覆盖率统计功能,在统计数据存储器中分别用CodeMark区、SwitchMarkE、DataMark区3块独立区域进行数据存储,代码覆盖率统计数据存储在CodeMark区,分支覆盖率统计数据存储在SwitchMark区,数据覆盖率统计数据存储在DataMark区。代码覆盖率用于分析当前测试是否对程序中所有函数进行测试,分支覆盖率用于分析当前测试是否测试程序中所有功能分支,数据覆盖率用于分析程序中设计的常量是否全部使用,上述三种覆盖率用于分析测试点的全面性,被测程序的正确性,减少程序中多余代码,优化程序性能,根据未测试到的地址信息,能够定位被测程序中具体的功能函数,进一步分析是测试点不全还是被测程序设计问题。
[0024]代码覆盖率是指测试的指令取指执行过的地址个数,与指令取指全部执行的地址个数相比,得到的百分比数值,上述地址个数是指不同地址的个数,相同地址执行多次按I个计算。分支覆盖率是指,测试的程序执行过的跳转指令地址个数除以2,与程序全部跳转指令的地址个数相比,得到的百分比数值,上述跳转指令地址个数是指相同地址的跳转指令,执行跳转和不跳转两个分支按2个计算,相同地址同一分支执行多次按I个计算;一条跳转指令用2bit数据存储,未执行过数据为00,执行后进行过跳转用01表示,未进行跳转用10表示,如果两个分支都执行过用11表示。数据覆盖率是指测试的程序读取程序区的常量地址个数,与程序区所有常量地址个数相比,得到的百分比数值,上述常量地址个数是指不同地址常量的个数,相同地址常量程序读取多次按I个计算。
【附图说明】
[0025]图1是支持覆盖率统计功能的仿真器结构图。
[0026]图2是存储格式对比示意图。
[0027]图3是存储器地址映射示意图。
[0028]图4是覆盖率统计功能使用流程图。
【具体实施方式】
[0029]下面结合附图对本发明仿真器进行详细说明。
[0030]如图1所示,仿真器包括调试控制模块1、芯片功能模块2和覆盖率统计模块3,芯片功能模块2包括CPU_DBG4、AHB总线、芯片程序存储器5、外设6,覆盖率统计模块3包括统计模块7、寄存器8、接口转换模块9、选择模块10、统计数据存储器11。
[0031]调试控制模块I与CPU_DBG4相连,CPU_DBG4经过AHB总线访问芯片程序存储器5和外设6<XPU_DBG4在调试控制模块I控制下将程序下载到芯片程序存储器5,并执行单步、停止、运行等操作。AHB总线上连接接口转换模块9,接口转换模块9与寄存器8、选择模块10相连。统计模块7和CPU_DBG4的PC接口、AHB总线的AHB接口、寄存器8、选择模块10相连,选择模块10还与统计数据存储器11相连。
[0032]CPU_DBG4的PC接口包括以下主要信号:程序当前指令PC值、当前指令执行完成信号,当前指令是否为跳转指令信号,当前指令是否执行跳转的信号,通过上述4个信号,能够得到程序执行的地址,跳转指令地址,以及CPU是否执行跳转指令;AHB总线的AHB接口为标准的AMBA总线接口,通过此接口信号,能够得到程序执行时读取了芯片程序存储器中哪些地址的常量。
[0033]CPU_DBG^t出调试模式信号为I时,表示CPU_DBG4进入调试模式,接口转换模块9经选择模块10与统计数据存储器11连接进行通讯;CPU_DBG4输出调试模式信号为O时,表示CPU_DBG4进入运行模式,统计模块7经选择模块10与统计数据存储器11连接进行通讯。
[0034]仿真器支持3种操作:寄存器读写操作、统计模块记录数据操作、统计数据存储器读写操作。
[0035]寄存器读写操作:调试控制模块I控制CPU_DBG4进入调试模式,经过AHB总线AHB接、接口转换模块9,对寄存器8进行读写操作。通过对寄存器8设置,产生程序统计的起始地址、开启或关闭统计功能的控制信号,并输出给统计模块,改变统计模块实现的具体功能。
[0036]统计模块记录数据操作:调试控制模块I控制CPU_DBG4进入运行模式,输出调试模式信号为0,寄存器8输出的起始地址、控制信号的到统计模块7,当统计功能开启时,使用CPU_DBG PC接口信号和AHB总线AHB接口信号,生成程序执行的地址信息,经过选择模块10将地址信息数据实时写入统计数据存储器11。
[0037]统计数据存储器读写操作:调试控制模块I控制CPU_DBG4进入调试模式,输出调试模式信号为1,经过CPU_DBG4、AHB总线AHB接、接口转换模块9、选择模块10,对统计数据存储器11进行读写操作。此操作用于将统计数据存储器11中的统计数据导出进行分析,或将以前生成的统计数据下载到统计数据存储器11中,继续测试进行覆盖率统计。
[0038]如图2所示,左侧存储器A表示统计功能常用的存储格式,统计数据采用压缩数据包的形式从存储器低端0x00地址顺序存储,随着统计时间加长,数据也会越来越多,长时间的测试统计,要求存储器容量足够大,或是能够将数据实时导出;右侧存储器B表示本发明的统计数据存储格式,全区的数据初始化为0,执行过的地址标记为I,由于此存储器与芯片程序存储器实现地址对应映射关系,程序长时间测试只是在相同地址上重复写I操作,存储器容量不需增加。当程序经测试后,仍有程序代码对应的位值标识为O,说明测试程序的测试点不全,或设计的程序中有多余代码不会执行,根据测试覆盖率结果优化测试程序或是被测程序。
[0039]如图3所示,给出芯片程序存储器和统计数据存储器地址映射关系,统计数据存储器分为CodeMark区、SwitchMark区、DataMark区3块,统计数据存储器每一bit的地址与芯片程序存储器中数据的字节地址,或是半字地址,或是字地址相对应,因此每块的容量可能不同,但映射到芯片程序存储器的统计起始地址和结束的地址相同。当芯片程序存储器容量较小时,统计数据存储器可以对芯片程序存储器全片进行地址映射,使用时不需修改统计起始地址;当芯片程序存储器容量较大时,只能对芯片程序存储器部分地址进行映射,此时通过修改统计起始地址,对芯片程序存储器中任一段程序进行测试和覆盖率统计。
[0040]如图4所示,给出覆盖率统计功能使用流程图,流程图中介绍第一次使用统计功能如何操作,已有统计数据或修改程序统计起始地址时如何继续测试,按以下步骤操作,进行程序测试及覆盖率分析,改进测试程序及被测程序:
[0041 ]步骤I,调试控制模块控制CPU_DBG进入调试模式,调试模式信号变为I表示有效,此时调试控制模块能够读写寄存器和统计数据存储器;
[0042]步骤2,如果已有统计数据继续统计,先从统计数据中获取统计起始地址,并执行步骤3,否则第一次使用时先配置寄存器,设置统计起始地址、开启统计功能,并清除统计数据存储器,将全片数据写为O,接着执行步骤4;
[0043]步骤3,配置寄存器,设置统计起始地址、开启统计功能,并向统计数据存储器下载已有统计数据;
[0044]步骤4,调试控制模块控制CPU_DBG进入运行模式,调试模式信号变为O表示无效,此时统计模块能够写统计数据存储器;
[0045]步骤5,运行程序进行测试,统计模块将生成的统计数据写入统计数据存储器;
[0046]步骤6,调试控制模块设置CPU_DBG进入调试模式,此时程序停止运行;
[0047]步骤7,调试控制模块将统计数据存储器中的统计数据导出;
[0048]步骤8,如果需要更新统计起始地址继续测试执行步骤2,否则配置寄存器关闭统计功能;
[0049]步骤9,分析合并导出的统计数据,计算出程序测试覆盖率,包括代码覆盖率、分支覆盖率、数据覆盖率;
[0050]步骤10,根据测试覆盖率结果分析测试点全面性、程序正确性,对测试程序及被测程序进行改进优化。
【主权项】
1.一种支持覆盖率统计功能的仿真器及方法,其特征在于,所述仿真器针对AHB总线的CPU芯片,增加覆盖率统计模块,使用AHB总线、CPU及调试模块的信号,采用将程序执行的地址在统计数据存储器中对应的地址位置进行打标的方式,实现程序执行地址信息的记录,将统计数据存储器中的统计数据导出,使用程序软件可以计算得到程序执行过的地址,再与程序全部执行的地址数据相比,计算出当前测试达到的程序覆盖率; 所述仿真器包括:调试控制模块、芯片功能模块、覆盖率统计模块3部分; 调试控制模块,用于将统计数据存储器中的数据导入和导出,对芯片功能模块进行调试; 芯片功能模块,用于仿真芯片功能,包括CPU_DBG、AHB总线、芯片程序存储器、外设; 覆盖率统计模块,用于对程序执行的地址信息进行实时记录,包括统计模块、寄存器、接口转换模块、选择模块、统计数据存储器; 各组件功能说明如下: CPU_DBG,是指芯片的CRJ及调试模块,在调试控制模块控制下执行程序; AHB总线,是指AHB接口的AHB总线控制器模块,是CPU_DBG与AHB外设的接口 ; 芯片程序存储器,用于存储芯片执行的程序; 外设,是指除芯片程序存储器外,芯片的其它AHB外设; 统计模块,使用CPU_DBG PC接口信号和AHB总线AHB接口信号,将程序执行的地址信息记录到统计数据存储器中,上述的地址信息就是统计数据; 寄存器,产生统计程序的起始地址、统计使能控制信号,输出给统计模块,控制统计模块实现的具体功能; 接口转换模块,将AHB总线的AHB接口信号,转换为寄存器接口信号和RAM接口信号,CPU_DBG通过AHB总线、接口转换模块完成对寄存器和统计数据存储器的读写访问; 选择模块,CPILDBG输出调试模式信号,选择统计模块或者接口转换模块连接到统计数据存储器; 统计数据存储器,用于存储统计模块记录程序执行的地址信息数据; 各组件连接关系如下: CPU_DBG与调试控制模块、AHB总线、统计模块、选择模块相连,AHB总线还连接芯片程序存储器、外设、统计模块、接口转换模块,统计模块和接口转换模块还分别连接到寄存器、选择模块,选择模块还与统计数据存储器相连。2.根据权利要求1所述的一种支持覆盖率统计功能的仿真器及方法,其特征在于,所述统计数据存储器中所有的数据都为有效数据,统计数据存储器每一 bit与芯片程序存储器地址对应,在第一次统计前,统计数据存储器全部bi t清除为O,完成测试统计后,程序执行过的地址对应的bit标识为I,根据标识I的bit地址,以及统计数据存储器数据与芯片程序存储器地址对应关系,计算出当前程序执行过的实际地址。3.根据权利要求1所述的一种支持覆盖率统计功能的仿真器及方法,其特征在于,所述仿真器支持程序测试停止后再次继续测试,将当前测试统计数据存储器的统计数据导出,再次测试时将上述的统计数据导入后继续进行测试。4.根据权利要求1所述的一种支持覆盖率统计功能的仿真器及方法,其特征在于,所述仿真器通过配置覆盖率统计模块中的寄存器,实现统计功能开关控制,更改统计程序的起始地址的功能;当仿真器的统计数据存储器容量有限制,不能与芯片程序存储器全部地址对应时,通过更改起始地址,实现对指定的一段程序进行测试统计分析,采用更新起始地址多次测试的方式,实现对芯片程序存储器所有程序的测试覆盖率统计分析。5.根据权利要求1所述的一种支持覆盖率统计功能的仿真器及方法,其特征在于,所述仿真器支持代码覆盖率、分支覆盖率、数据覆盖率统计功能,在统计数据存储器中分别用CodeMark区、SwitchMark区、DataMark区3块独立的区域进行数据存储,代码覆盖率统计数据存储在CodeMark区,分支覆盖率统计数据存储在SwitchMark区,数据覆盖率统计数据存储在DataMark区。6.根据权利要求5所述的一种支持覆盖率统计功能的仿真器及方法,其特征在于代码覆盖率用于分析当前测试是否对程序中所有函数进行测试,分支覆盖率用于分析当前测试是否测试程序中所有功能分支,数据覆盖率用于分析程序中设计的常量是否全部使用,上述三种覆盖率用于分析测试点的全面性,被测程序的正确性,根据未测试到的地址信息能够定位被测程序中具体的功能函数,进一步分析是测试点不全还是被测程序设计问题。7.根据权利要求1所述的一种支持覆盖率统计功能的仿真器及方法,其特征在于,所述方法按以下步骤操作,进行程序测试及覆盖率分析,改进测试程序及被测程序: 步骤I,调试控制模块控制CPU_DBG进入调试模式,调试模式信号变为I表示有效,此时调试控制模块能够读写寄存器和统计数据存储器; 步骤2,如果已有统计数据继续统计,先从统计数据中获取统计起始地址,并执行步骤.3,否则第一次使用时先配置寄存器,设置统计起始地址、开启统计功能,并清除统计数据存储器,将全片数据写为O,接着执行步骤4; 步骤3,配置寄存器,设置统计起始地址、开启统计功能,并向统计数据存储器下载已有统计数据; 步骤4,调试控制模块控制CPILDBG进入运行模式,调试模式信号变为O表示无效,此时统计模块能够写统计数据存储器; 步骤5,运行程序进行测试,统计模块将生成的统计数据写入统计数据存储器; 步骤6,调试控制模块设置CPILDBG进入调试模式,此时程序停止运行; 步骤7,调试控制模块将统计数据存储器中的统计数据导出; 步骤8,如果需要更新统计起始地址继续测试执行步骤2,否则配置寄存器关闭统计功會K; 步骤9,分析合并导出的统计数据,计算出程序测试覆盖率,包括代码覆盖率、分支覆盖率、数据覆盖率; 步骤10,根据测试覆盖率结果分析测试点全面性、程序正确性,对测试程序及被测程序进行改进优化。
【文档编号】G06F11/36GK106066822SQ201610352697
【公开日】2016年11月2日
【申请日】2016年5月26日 公开号201610352697.8, CN 106066822 A, CN 106066822A, CN 201610352697, CN-A-106066822, CN106066822 A, CN106066822A, CN201610352697, CN201610352697.8
【发明人】张洪波
【申请人】北京中电华大电子设计有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1