CN109522565A - 一种验证方法、装置及计算机可读存储介质 - Google Patents

一种验证方法、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN109522565A
CN109522565A CN201710840396.4A CN201710840396A CN109522565A CN 109522565 A CN109522565 A CN 109522565A CN 201710840396 A CN201710840396 A CN 201710840396A CN 109522565 A CN109522565 A CN 109522565A
Authority
CN
China
Prior art keywords
coverage
functional coverage
functional
test value
random
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710840396.4A
Other languages
English (en)
Inventor
李鹏飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen ZTE Microelectronics Technology Co Ltd
Original Assignee
Shenzhen ZTE Microelectronics Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen ZTE Microelectronics Technology Co Ltd filed Critical Shenzhen ZTE Microelectronics Technology Co Ltd
Priority to CN201710840396.4A priority Critical patent/CN109522565A/zh
Publication of CN109522565A publication Critical patent/CN109522565A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/398Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种验证方法,所述方法包括:获取随机测试值;基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。本发明还同时公开了一种验证装置和计算机可读存储介质。

Description

一种验证方法、装置及计算机可读存储介质
技术领域
本发明涉及仿真验证领域,尤其涉及一种验证方法、装置及计算机可读存储介质。
背景技术
在数字逻辑设计领域,尤其是在数字集成电路(IC,Integrated Circuit)中,随着IC工艺技术的提升,电路不仅规模越来越大,而且支持的功能也越来越多。因此,验证完备性对于芯片至关重要,而功能覆盖率是衡量数字逻辑功能验证完备性的一个重要指标。SystemVerilog语言作为当前主流的数字逻辑验证语言,提供了随机、约束以及功能覆盖组等特性。与定向测试相比,SystemVerilog场景模拟的复杂性以及测试效率都有大幅提升。但是,由于存在随机的特性,使得功能点最终的覆盖情况必须要通过功能覆盖率来衡量,这就产生了功能覆盖率驱动的验证技术。然而,随机的特点是不可预知性,这样便带来了一个问题,即待测装置越复杂,功能点越多,出现重复的随机测试值的次数也就越多,当功能覆盖率越接近100%时,随机测试值重复的概率也越大,随机有效命中率就越低,甚至成百上千次的随机操作所产生的测试值仅使得功能覆盖率增长一点点,导致功能覆盖率的收敛速度往往比较慢。
发明内容
有鉴于此,本发明实施例提供了一种验证方法、装置及计算机可读存储介质,能够提高随机有效命中率,从而实现功能覆盖率的快速收敛。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例提供了一种验证方法,所述方法包括:
获取随机测试值;
基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
上述方案中,所述方法还包括:
确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
上述方案中,所述基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率之前,所述方法还包括:
获取测试前所述功能覆盖组的累计功能覆盖率。
上述方案中,所述确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值之后,所述方法还包括:
存储所述随机测试值至队列或数组。
本发明实施例提供了一种验证装置,所述装置包括:获取模块、测试模块和处理模块;其中,
所述获取模块,用于获取随机测试值;
所述测试模块,用于基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
所述处理模块,用于确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
上述方案中,所述处理模块,还用于确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
上述方案中,所述获取模块,还用于获取测试前所述功能覆盖组的累计功能覆盖率。
上述方案中,所述装置还包括:存储模块,用于存储所述随机测试值至队列或数组。
本发明实施例提供了一种验证装置,所述装置包括处理器和用于存储能够在处理器上运行的计算机程序的存储器;其中,
所述处理器用于运行所述计算机程序时,执行上述验证方法中的各个步骤。
本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述验证方法。
本发明实施例提供的验证方法、装置和计算机可读存储介质,首先获取随机测试值;基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。可见,本发明实施例通过实时获取随机测试值对基于待测装置预期要实现的功能而定义的功能覆盖组进行测试,并对测试前后的累计功能覆盖率进行比较来判断当前的随机测试值对提升累计功能覆盖率是否有贡献,将对于提升累计功能覆盖率有贡献的随机测试值作为待测装置的输入测试值,提高了随机有效命中率,从而实现功能覆盖率的快速收敛。
附图说明
图1为本发明实施例一提供的验证方法的实现流程示意图;
图2为本发明实施例一中验证方法的具体实现流程示意图一;
图3为本发明实施例一中验证方法的具体实现流程示意图二;
图4为本发明实施例一提供的验证装置的组成结构示意图;
图5为本发明实施例二提供的验证装置的组成结构示意图。
具体实施方式
现有的功能覆盖率驱动的验证方法主要包括两类:一类是采用被动驱动机制,一般通过修改具有随机属性的类的约束、补充定向测试用例或多次改变随机种子等方法以达到100%的功能覆盖率;另一类是通过对用例多次仿真的功能覆盖率数据进行复杂算法处理或借助特定仿真器的一些特定功能来实现加速收敛的目的。显然,上述两类方法要么是验证效率比较低,要么是不便于实施。
实施例一
本实施例提供了一种验证方法,如图1所示,该方法包括如下步骤:
步骤101:获取随机测试值;
这里,在利用面向对象的编程语言如SystemVerilog语言对待测装置进行功能验证时,基于待测装置预期要实现的功能先定义不同的类以及对类中的变量进行约束,形成多个类和多个约束块,以使得每次调用SystemVerilog语言中的系统函数randomize()时都会根据所述多个类和多个约束块产生一个或多个随机测试值;所述随机测试值可以是二进制数或十进制数等。
实际应用时,所述待测装置可以是:逻辑结构、功能参数等已经确定,但不一定具有实际产品的虚拟的装置,即依赖于一个仿真测试平台能够实现其功能验证。
步骤102:基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
具体地,基于步骤101中获取的所述随机测试值对功能覆盖组进行测试,根据所述随机测试值在测试时是否命中功能覆盖组中的覆盖点,确定测试后所述功能覆盖组的累计功能覆盖率。
这里,所述功能覆盖组是基于待测装置预期要实现的功能而利用SystemVerilog面向对象的编程语言进行定义的,每个待测装置对应的功能覆盖组可以有一个或多个,且各功能覆盖组分别对应该待测装置需要实现的各个具体功能;功能覆盖组可以看作是一系列描述相近功能的覆盖点的集合,即所述功能覆盖组中包含有一个或多个覆盖点;其中,每个覆盖点包含一个或多个容器,每个覆盖点具有相应的约束条件,而每个容器代表一个子约束条件;所述约束条件用于判断随机测试值是否命中所述约束条件对应的覆盖点,即判断覆盖点包含的容器被击中的情况;当随机测试值满足该约束条件,即该约束条件对应的覆盖点所包含的全部容器都被该随机测试值击中时,表示该随机测试值命中所述约束条件对应的覆盖点,此时该覆盖点的覆盖率为100%;当随机测试值只满足该约束条件中的部分子约束条件即该约束条件对应的覆盖点所包含的部分容器被该随机测试值击中时,也表示该随机测试值命中所述约束条件对应的覆盖点,只是此时该覆盖点的覆盖率为大于0%且小于100%;当随机测试值不满足该约束条件中的所有子约束条件即该约束条件对应的覆盖点所包含的容器一个也未被该随机测试值击中时,表示该随机测试值未命中所述约束条件对应的覆盖点,此时该覆盖点的覆盖率为0%。
这里,当覆盖点只包含一个容器、或者覆盖点包含多个容器且每个容器的权重相等时,覆盖点的覆盖率指容器被击中的个数除以容器总数再乘以100%;当覆盖点包含多个容器且每个容器的权重不相等时,覆盖点的覆盖率指被击中的容器的权重之和再乘以100%;当功能覆盖组包含一个或多个覆盖点时,功能覆盖组的功能覆盖率指每个覆盖点的覆盖率乘以每个覆盖点的权重之和;需要注意的是,当一个覆盖点被同一个随机测试值重复命中时,该覆盖点的覆盖率会保持不变。
这里,所述功能覆盖组的累计功能覆盖率指累计的已被命中的覆盖点的覆盖率乘以已被命中的覆盖点的权重之和;例如,第n次测试结束时的功能覆盖组的累计功能覆盖率是指通过已完成的n次测试,已被命中的覆盖点的覆盖率乘以已被命中的覆盖点的权重之和。此外,由于所述功能覆盖组的累计功能覆盖率是对每次测试后功能覆盖率的累计,因此所述功能覆盖组的累计功能覆盖率只会增加或保持不变,而不会减小。举例说明如下,假设一个功能覆盖组只包含一个覆盖点,且该覆盖点的约束条件为变量m为正整数且属于[1,5],自动创建有5个容器,分别代表m为1、2、3、4、5且每个容器的权重相等;当第一次产生的随机测试值a为1时,表示覆盖点被a命中且为代表m为1的容器被击中,此时该功能覆盖组的累计功能覆盖率为20%;当第二次产生的随机测试值b为3时,表示覆盖点被b命中且代表m为3的容器被击中,由于通过两次的测试,代表m为1的容器和代表m为3的容器被击中,此时该功能覆盖组的累计功能覆盖率为40%;当第三次产生的随机测试值c也为3时,由于代表m为3的容器在第二次测试时已被击中,表示覆盖点被c重复命中,此时该功能覆盖组的累计功能覆盖率仍然为40%;当第四次产生的随机测试值d为6时,由于d未击中任意一个容器,即覆盖点未被d命中,此时该功能覆盖组的累计功能覆盖率仍然为40%。
这里,所述基于所述随机测试值测试功能覆盖组,可看作是功能覆盖组对所述随机测试值进行采样,即判断随机测试值是否命中该功能覆盖组中的覆盖点;所述基于所述随机测试值测试功能覆盖组可以通过调用SystemVerilog语言中的系统函数sample进行采样;所述功能覆盖组的累计功能覆盖率可以通过调用SystemVerilog语言提供的系统函数get_inst_coverage()进行获取。
步骤103:确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
具体地,确定步骤102中获取的测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值;在确定测试后所述功能覆盖组的累计功能覆盖率小于设置的阈值时,返回执行步骤101,以获取新的随机测试值并基于该新的随机测试值继续执行步骤102和103,直至确定所述功能覆盖组的累计功能覆盖率等于或大于设置的阈值后结束上述操作。
例如,当第n次测试完成后功能覆盖组的累计功能覆盖率大于第n-1次测试完成后功能覆盖组的累计功能覆盖率时,说明第n次测试时使用的随机测试值命中了该功能覆盖组中未被命中的覆盖点或同一覆盖点的不同容器,该随机测试值提高了该功能覆盖组的累计功能覆盖率,因此可将该随机测试值作为待测装置的输入测试值;如果第n次测试完成后功能覆盖组的累计功能覆盖率小于设置的阈值,说明该功能覆盖组中存在覆盖率小于100%的覆盖点,则继续获取新的随机测试值进行功能验证,间接提高随机命中率,从而实现功能覆盖率的快速收敛。这里,所述阈值可以是固定值,比如为100%,也可以是根据实际验证情况所设定的值;所述功能覆盖率收敛是指功能覆盖率达到所述设置的阈值;将所述随机测试值作为待测装置的输入测试值可以是将所述随机测试值作为对待测装置进行仿真的输入测试值。
综上所述,本实施例提供的验证方法通过实时获取随机测试值对基于待测装置预期要实现的功能而定义的功能覆盖组进行测试,并对测试前后的累计功能覆盖率进行比较来判断当前的随机测试值对提升累计功能覆盖率是否有贡献,将对于提升累计功能覆盖率有贡献的随机测试值作为待测装置的输入测试值,提高了随机有效命中率,从而实现功能覆盖率的快速收敛。
在本实施例一实施方式中,该方法还包括:
确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
具体地,确定步骤102中获取的测试后所述功能覆盖组的累计功能覆盖率等于测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值,返回执行步骤101,以获取新的随机测试值并基于该新的随机测试值继续执行步骤102和103。
例如,当第n次测试完成后功能覆盖组的累计功能覆盖率等于第n-1次测试完成后功能覆盖组的累计功能覆盖率时,说明第n次测试时使用的随机测试值命中了该功能覆盖组中覆盖率为100%的覆盖点,或者说明第n次测试时使用的随机测试值未命中该功能覆盖组中的覆盖点,表明利用该随机测试值作为待测装置的输入测试值没有意义,从而舍弃该随机测试值。
如此,通过舍弃对提升功能覆盖组的累计功能覆盖率没有贡献的随机测试值,提高了随机有效命中率。
在本实施例一实施方式中,在步骤102之前,该方法还包括:
获取测试前所述功能覆盖组的累计功能覆盖率。
具体地,获取所述功能覆盖组在基于所述随机测试值进行测试之前的累计功能覆盖率,以将测试前所述功能覆盖组的累计功能覆盖率作为比较对象。
这里,所述获取测试前所述功能覆盖组的累计功能覆盖率,可以是从队列、数组、数据库或存储器等存储介质中进行读取的;换而言之,也就是在每次测试完后,存储测试后功能覆盖组的累计功能覆盖率至队列、数组、数据库或存储器等存储介质中,以便于后续调用。
在本实施例一实施方式中,在步骤103之后,该方法还包括:
存储所述随机测试值至队列或数组。
具体地,在步骤103中确定基于步骤101获取的随机测试值测试功能覆盖组后、所获得的所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率之后,存储所述随机测试值至队列或数组,以使得待测装置可通过遍历所述队列或数组而使用随机测试值作为输入测试值。
这里,当待测装置的功能点过多而验证周期有限时,可以对待测装置进行拆分,以将功能点分散到多个功能覆盖组中去,从而缩短验证待测装置的收敛周期。
如此,通过实时存储可作为待测装置进行仿真验证的输入测试值的所述随机测试值,可实现待测装置对所述随机测试值的随时调用,满足不同操作需求。
下面通过两个具体示例对本实施例作进一步地说明,如图2和图3所示,图2和图3的主要区别在于待测装置对随机测试值的使用方式,其中图2中是采取边随机边使用的方式,图3中是采取先随机完全后再使用的方式;所述待测装置可以是:逻辑结构、功能参数等已经确定,但不一定具有实际产品的虚拟的装置,即依赖于一个仿真测试平台能够实现其功能验证。
图2所示的验证方法的具体实现流程如下,包括以下步骤:
步骤201:定义随机类及约束块和定义功能覆盖组;
具体地,定义待测装置的功能覆盖组以及具有随机属性的类或变量的约束块。
这里,在利用SystemVerilog语言对待测装置进行功能验证时,基于待测装置预期要实现的功能先定义不同的类以及对类中的变量进行约束,形成多个类和多个约束块,以使得每次调用SystemVerilog语言中的系统函数randomize()时都会根据所述多个类和多个约束块产生一个或多个随机测试值;并且,基于待测装置预期要实现的功能而利用SystemVerilog语言定义功能覆盖组,每个待测装置对应的功能覆盖组可以有一个或多个,且各功能覆盖组分别对应该待测装置需要实现的各个具体功能。
步骤202:启动随机化,生成随机测试值;
具体地,基于步骤201中定义的随机类及约束块,通过调用SystemVerilog语言中的系统函数randomize()产生随机测试值。
步骤203:功能覆盖组采样所述随机测试值;
具体地,通过调用SystemVerilog语言中的系统函数sample使功能覆盖组采样步骤202中生成的所述随机测试值,即基于所述随机测试值测试功能覆盖组。
步骤204:判断采样后的累计功能覆盖率是否大于采样前的累计功能覆盖率,若大于,则执行步骤205,否则执行步骤202;
这里,因为随机的不可预测性,虽然有约束的限制,但是随机出重复测试值或无意义的测试值的概率会随着功能覆盖率的提升,越来越高,即随机命中率不断下降。SystemVerilog语言提供了get_inst_coverage()函数可以实时获取功能覆盖组的累计功能覆盖率,因为功能覆盖率只会增加不会减少,如果采样到未覆盖的点,则累计功能覆盖率增加,反之则保持不变。在本步骤中,通过调用get_inst_coverage()函数获取当前采样后的累计功能覆盖率与采样前的累计功能覆盖率进行比较,若采样后的累计功能覆盖率大于采样前的累计功能覆盖率,则当前的随机测试值对功能覆盖率有贡献,执行步骤205;否则,若当前的随机测试值对功能覆盖率无贡献,为重复的或无意义的随机测试值,返回步骤201进行再次随机。通过这种机制来筛选掉重复的随机测试值,从而保证后续仿真过程使用都是有意义的测试值,达到100%的命中率。由于随机本身对仿真时间消耗相对后续步骤可以忽略不计,剔除了无效的运行过程,提高了功能覆盖率的收敛速度。
步骤205:待测装置使用所述随机测试值;
这里,通过步骤204中对于随机测试值的有效筛选,平台或待测设计(DUT,Designunder test)等待测装置可以高效使用筛选出的随机测试值,避免了无效执行过程。
步骤206:判断采样后的累计功能覆盖率是否达到100%,若是,则执行步骤207,否则执行步骤202;
这里,由于基于待测装置预期要实现的功能而设计的用例的执行目标是功能覆盖组的预期覆盖点是否全部被覆盖到,即累计覆盖率是否达到100%,如果没有达到,则再次回到步骤202;如果达到了100%,则累计覆盖率目标达到,则进入步骤207。
步骤207:随机结束。
这里,当步骤206中确定功能覆盖组的累计覆盖率达到100%时,结束上述随机验证过程。
图3所示的验证方法的具体实现流程如下,包括以下步骤:
步骤301:定义随机类及约束块和定义功能覆盖组;
具体地,定义待测装置的功能覆盖组以及具有随机属性的类或变量的约束块。
这里,在利用SystemVerilog语言对待测装置进行功能验证时,基于待测装置预期要实现的功能先定义不同的类以及对类中的变量进行约束,形成多个类和多个约束块,以使得每次调用SystemVerilog语言中的系统函数randomize()时都会根据所述多个类和多个约束块产生一个或多个随机测试值;并且,基于待测装置预期要实现的功能而利用SystemVerilog语言定义功能覆盖组,每个待测装置对应的功能覆盖组可以有一个或多个,且各功能覆盖组分别对应该待测装置需要实现的各个具体功能。
步骤302:启动随机化,生成随机测试值;
具体地,基于步骤301中定义的随机类及约束块,通过调用SystemVerilog语言中的系统函数randomize()产生随机测试值。
步骤303:功能覆盖组采样所述随机测试值;
具体地,通过调用SystemVerilog语言中的系统函数sample使功能覆盖组采样步骤302中生成的所述随机测试值,即基于所述随机测试值测试功能覆盖组。
步骤304:判断采样后的累计功能覆盖率是否大于采样前的累计功能覆盖率,若大于,则执行步骤305,否则执行步骤302;
这里,因为随机的不可预测性,虽然有约束的限制,但是随机出重复测试值或无意义的测试值的概率会随着覆盖率的提升,越来越高,即随机命中率不断下降。SystemVerilog语言提供了get_inst_coverage()函数可以实时获取功能覆盖组的覆盖率,因为覆盖率只会增加不会减少,如果采样到未覆盖的点,则覆盖率增加,反之则保持不变。在本步骤中,通过调用get_inst_coverage()函数获取当前采样后的累计功能覆盖率与采样前的累计功能覆盖率进行比较,若采样后的累计功能覆盖率大于采样前的累计功能覆盖率,则当前的随机测试值对功能覆盖率有贡献,执行步骤305;否则,若当前的随机测试值对功能覆盖率无贡献,为重复的或无意义的随机测试值,返回步骤301进行再次随机。通过这种机制来筛选掉重复的随机测试值,从而保证后续仿真过程使用都是有意义的测试值,达到100%的命中率。由于随机本身对仿真时间消耗相对后续步骤可以忽略不计,剔除了无效的运行过程,提高了功能覆盖率的收敛速度。
步骤305:存储所述随机测试值到队列或数组中;
步骤306:判断采样后的累计功能覆盖率是否达到100%,若是,则执行步骤307,否则执行步骤302;
这里,由于基于待测装置预期要实现的功能而设计的用例的执行目标是功能覆盖组的预期覆盖点是否全部被覆盖到,即累计覆盖率是否达到100%,如果没有达到,则再次回到步骤302;如果达到了100%,则累计覆盖率目标达到,则进入步骤307。
步骤307:随机结束;
这里,当步骤306中确定功能覆盖组的累计覆盖率达到100%时,结束上述随机验证过程。
步骤308:遍历存储在队列或数组中的随机测试值供待测装置使用。
综上所述,本实施例针对SystemVerilog语言的功能覆盖率驱动的随机验证中随机命中率不高、仿真验证收敛速度慢的问题,通过SystemVerilog的功能覆盖组的内置函数get_inst_coverage()以及功能覆盖率的正向递增属性,通过实时采样随机测试值,并对采样前后的功能覆盖率进行比较来判定当前随机测试值对功能覆盖率是否有贡献,对于无贡献的随机测试值不作用于待测设计,间接将随机命中率提高至100%,从而实现功能验证的快速收敛。特别要指出的是,在支持SystemVerilog语言的仿真验证环境下均可实施本实施例,对于仿真器、验证方法学或特定的算法处理没有要求,即不依赖于特定仿真器和验证方法学,也不要求复杂的算法,使用简便。
为实现上述方法,本实施例还提供了一种验证装置,如图4所示,该装置包括:获取模块10、测试模块11和处理模块12;其中,
所述获取模块10,用于获取随机测试值;
所述测试模块11,用于基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
所述处理模块12,用于确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
这里,在利用面向对象的编程语言如SystemVerilog语言对待测装置进行功能验证时,基于待测装置预期要实现的功能先定义不同的类以及对类中的变量进行约束,形成多个类和多个约束块,以使得获取模块10每次调用SystemVerilog语言中的系统函数randomize()时都会根据所述多个类和多个约束块产生一个或多个随机测试值;所述随机测试值可以是二进制数或十进制数等。
所述测试模块11,具体用于:基于获取模块10获取的所述随机测试值对功能覆盖组进行测试,根据所述随机测试值在测试时是否命中功能覆盖组中的覆盖点,确定测试后所述功能覆盖组的累计功能覆盖率。
这里,所述功能覆盖组是基于待测装置预期要实现的功能而利用面向对象的编程语言进行定义的,每个待测装置对应的功能覆盖组可以有一个或多个,且各功能覆盖组分别对应该待测装置需要实现的各个具体功能;功能覆盖组可以看作是一系列描述相近功能的覆盖点的集合,即所述功能覆盖组中包含有一个或多个覆盖点;其中,每个覆盖点包含一个或多个容器,每个覆盖点具有相应的约束条件,而每个容器代表一个子约束条件;所述约束条件用于判断随机测试值是否命中所述约束条件对应的覆盖点,即判断覆盖点包含的容器被击中的情况;当随机测试值满足该约束条件,即该约束条件对应的覆盖点所包含的全部容器都被该随机测试值击中时,表示该随机测试值命中所述约束条件对应的覆盖点,此时该覆盖点的覆盖率为100%;当随机测试值只满足该约束条件中的部分子约束条件即该约束条件对应的覆盖点所包含的部分容器被该随机测试值击中时,也表示该随机测试值命中所述约束条件对应的覆盖点,只是此时该覆盖点的覆盖率为大于0%且小于100%;当随机测试值不满足该约束条件中的所有子约束条件即该约束条件对应的覆盖点所包含的容器一个也未被该随机测试值击中时,表示该随机测试值未命中所述约束条件对应的覆盖点,此时该覆盖点的覆盖率为0%。
这里,当覆盖点只包含一个容器、或者覆盖点包含多个容器且每个容器的权重相等时,覆盖点的覆盖率指容器被击中的个数除以容器总数再乘以100%;当覆盖点包含多个容器且每个容器的权重不相等时,覆盖点的覆盖率指被击中的容器的权重之和再乘以100%;当功能覆盖组包含一个或多个覆盖点时,功能覆盖组的功能覆盖率指每个覆盖点的覆盖率乘以每个覆盖点的权重之和;需要注意的是,当一个覆盖点被同一个随机测试值重复命中时,该覆盖点的覆盖率会保持不变。
这里,所述功能覆盖组的累计功能覆盖率指累计的已被命中的覆盖点的覆盖率乘以已被命中的覆盖点的权重之和;例如,第n次测试结束时的功能覆盖组的累计功能覆盖率是指通过已完成的n次测试,已被命中的覆盖点的覆盖率乘以已被命中的覆盖点的权重之和。举例说明如下,假设一个功能覆盖组只包含一个覆盖点,且该覆盖点的约束条件为变量m为正整数且属于[1,5],自动创建有5个容器,分别代表m为1、2、3、4、5且每个容器的权重相等;当第一次产生的随机测试值a为1时,表示覆盖点被a命中且为代表m为1的容器被击中,此时该功能覆盖组的累计功能覆盖率为20%;当第二次产生的随机测试值b为3时,表示覆盖点被b命中且代表m为3的容器被击中,由于通过两次的测试,代表m为1的容器和代表m为3的容器被击中,此时该功能覆盖组的累计功能覆盖率为40%;当第三次产生的随机测试值c也为3时,由于代表m为3的容器在第二次测试时已被击中,表示覆盖点被c重复命中,此时该功能覆盖组的累计功能覆盖率仍然为40%;当第四次产生的随机测试值d为6时,由于d未击中任意一个容器,即覆盖点未被d命中,此时该功能覆盖组的累计功能覆盖率仍然为40%。
这里,所述基于所述随机测试值测试功能覆盖组,可看作是功能覆盖组对所述随机测试值进行采样,即判断随机测试值是否命中该功能覆盖组中的覆盖点;所述测试模块11基于所述随机测试值测试功能覆盖组可以通过调用SystemVerilog语言中的系统函数sample进行采样;所述测试模块11获取功能覆盖组的累计功能覆盖率可以通过调用SystemVerilog语言提供的系统函数get_inst_coverage()进行获取。
所述处理模块12,具体用于确定测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值;在确定测试后所述功能覆盖组的累计功能覆盖率小于设置的阈值时,使获取模块10获取新的随机测试值,直至确定所述功能覆盖组的累计功能覆盖率等于或大于设置的阈值后结束上述操作。
例如,当第n次测试完成后功能覆盖组的累计功能覆盖率大于第n-1次测试完成后功能覆盖组的累计功能覆盖率时,说明第n次测试时使用的随机测试值命中了该功能覆盖组中未被命中的覆盖点或同一覆盖点的不同容器,该随机测试值提高了该功能覆盖组的累计功能覆盖率,因此可将该随机测试值作为对待测装置的输入测试值;如果第n次测试完成后功能覆盖组的累计功能覆盖率小于设置的阈值,说明该功能覆盖组中存在覆盖率小于100%的覆盖点,则继续获取新的随机测试值进行功能验证,间接提高随机命中率,从而实现功能覆盖率的快速收敛。
这里,所述阈值可以是固定值,比如为100%,也可以是根据实际验证情况所设定的值;所述功能覆盖率收敛是指功能覆盖率达到所述设置的阈值;将所述随机测试值作为待测装置的输入测试值可以是将所述随机测试值作为对待测装置进行仿真的输入测试值。
综上所述,本实施例提供的验证装置通过实时获取随机测试值对基于待测装置预期要实现的功能而定义的功能覆盖组进行测试,并对测试前后的累计功能覆盖率进行比较来判断当前的随机测试值对提升累计功能覆盖率是否有贡献,将对于提升累计功能覆盖率有贡献的随机测试值作为待测装置的输入测试值,提高了随机有效命中率,从而实现功能覆盖率的快速收敛。
在本实施例一实施方式中,所述处理模块12,还用于确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
具体地,确定测试后所述功能覆盖组的累计功能覆盖率等于测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值,以使获取模块10获取新的随机测试值。
例如,当第n次测试完成后功能覆盖组的累计功能覆盖率等于第n-1次测试完成后功能覆盖组的累计功能覆盖率时,说明第n次测试时使用的随机测试值命中了该功能覆盖组中覆盖率为100%的覆盖点,或者说明第n次测试时使用的随机测试值未命中该功能覆盖组中的覆盖点,表明利用该随机测试值作为待测装置的输入测试值没有意义,从而舍弃该随机测试值。
如此,通过舍弃对提升功能覆盖组的累计功能覆盖率没有贡献的随机测试值,提高了随机有效命中率。
在本实施例一实施方式中,所述获取模块10,还用于获取测试前所述功能覆盖组的累计功能覆盖率。
具体地,获取所述功能覆盖组在基于所述随机测试值进行测试之前的累计功能覆盖率,以将测试前所述功能覆盖组的累计功能覆盖率作为比较对象。
这里,所述获取测试前所述功能覆盖组的累计功能覆盖率,可以是从队列、数组、数据库或存储器等存储介质中进行读取的;换而言之,也就是在每次测试完后,存储测试后功能覆盖组的累计功能覆盖率至队列、数组、数据库或存储器等存储介质中,以便于后续调用。
在本实施例一实施方式中,该装置还包括:存储模块13,用于存储所述随机测试值至队列或数组。
具体地,在确定测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率之后,存储所述随机测试值至队列或数组,以使得待测装置可通过遍历所述队列或数组而使用随机测试值作为输入测试值。
这里,当待测装置的功能点过多而验证周期有限时,可以对待测装置进行拆分,以将功能点分散到多个功能覆盖组中去,从而缩短验证待测装置的收敛周期。
如此,通过实时存储可作为待测装置进行仿真验证的输入测试值的所述随机测试值,可实现待测装置对所述随机测试值的随时调用,满足不同操作需求。
实施例二
本实施例提供了一种验证装置,如图5所示,该验证装置包括:至少一个处理器210和用于存储能够在处理器210上运行的计算机程序的存储器211;其中,图5中示意的处理器210并非用于指代处理器的个数为一个,而是仅用于指代处理器相对其他器件的位置关系,在实际应用中,处理器的个数可以为一个或多个;同样,图5中示意的存储器211也是同样的含义,即仅用于指代存储器相对其他器件的位置关系,在实际应用中,存储器的个数可以为一个或多个。
其中,所述处理器210用于运行所述计算机程序时,执行如下步骤:
获取随机测试值;
基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
这里,所述待测装置可以是:逻辑结构、功能参数等已经确定,但不一定具有实际产品的虚拟的装置,即依赖于一个仿真测试平台能够实现其功能验证;所述将所述随机测试值作为待测装置的输入测试值可以是将所述随机测试值作为对待测装置进行仿真的输入测试值。
在本实施例一实施方式中,所述处理器210还用于运行所述计算机程序时,执行如下步骤:
确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
在本实施例一实施方式中,所述处理器210还用于运行所述计算机程序时,执行如下步骤:
获取测试前所述功能覆盖组的累计功能覆盖率。
在本实施例一实施方式中,所述处理器210还用于运行所述计算机程序时,执行如下步骤:
存储所述随机测试值至队列或数组。
该验证装置还包括:至少一个用户接口212。验证装置中的各个组件通过总线系统213耦合在一起。可理解,总线系统213用于实现这些组件之间的连接通信。总线系统213除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为总线系统213。
其中,存储器211可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本发明实施例描述的存储器210旨在包括但不限于这些和任意其它适合类型的存储器。
本发明实施例中的存储器211用于存储各种类型的数据以支持发送端的操作。这些数据的示例包括:用于在发送端上操作的任何计算机程序,如操作系统和应用程序;联系人数据;电话簿数据;消息;图片;视频等。其中,操作系统包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序可以包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。这里,实现本发明实施例方法的程序可以包含在应用程序中。
本实施例还提供了一种计算机存储介质,例如包括存储有计算机程序的存储器211,上述计算机程序可由发送端中的处理器210执行,以完成前述方法所述步骤。计算机存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备,如移动电话、计算机、平板设备、个人数字助理等。
一种计算机存储介质,所述计算机存储介质中存储有计算机程序,所述计算机程被处理器运行时,执行如下步骤:
获取随机测试值;
基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
这里,所述待测装置可以是:逻辑结构、功能参数等已经确定,但不一定具有实际产品的虚拟的装置,即依赖于一个仿真测试平台能够实现其功能验证;所述将所述随机测试值作为待测装置的输入测试值可以是将所述随机测试值作为对待测装置进行仿真的输入测试值。
在本实施例一实施方式中,所述计算机程序被处理器运行时,还执行如下步骤:
确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
在本实施例一实施方式中,所述计算机程序被处理器运行时,还执行如下步骤:
获取测试前所述功能覆盖组的累计功能覆盖率。
在本实施例一实施方式中,所述计算机程序被处理器运行时,还执行如下步骤:
存储所述随机测试值至队列或数组。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。

Claims (10)

1.一种验证方法,其特征在于,所述方法包括:
获取随机测试值;
基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
3.根据权利要求1所述的方法,其特征在于,所述基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率之前,所述方法还包括:
获取测试前所述功能覆盖组的累计功能覆盖率。
4.根据权利要求1所述的方法,其特征在于,所述确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值之后,所述方法还包括:
存储所述随机测试值至队列或数组。
5.一种验证装置,其特征在于,所述装置包括:获取模块、测试模块和处理模块;其中,
所述获取模块,用于获取随机测试值;
所述测试模块,用于基于所述随机测试值测试功能覆盖组,获得测试后所述功能覆盖组的累计功能覆盖率;
所述处理模块,用于确定所述测试后所述功能覆盖组的累计功能覆盖率大于测试前所述功能覆盖组的累计功能覆盖率时,将所述随机测试值作为待测装置的输入测试值。
6.根据权利要求5所述的装置,其特征在于,
所述处理模块,还用于确定所述测试后所述功能覆盖组的累计功能覆盖率等于所述测试前所述功能覆盖组的累计功能覆盖率时,舍弃所述随机测试值。
7.根据权利要求5所述的装置,其特征在于,所述获取模块,还用于获取测试前所述功能覆盖组的累计功能覆盖率。
8.根据权利要求5所述的装置,其特征在于,所述装置还包括:存储模块,用于存储所述随机测试值至队列或数组。
9.一种验证装置,其特征在于,所述装置包括处理器和用于存储能够在处理器上运行的计算机程序的存储器;其中,
所述处理器用于运行所述计算机程序时,执行权利要求1至4中任意一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4中任意一项所述方法的步骤。
CN201710840396.4A 2017-09-18 2017-09-18 一种验证方法、装置及计算机可读存储介质 Pending CN109522565A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710840396.4A CN109522565A (zh) 2017-09-18 2017-09-18 一种验证方法、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710840396.4A CN109522565A (zh) 2017-09-18 2017-09-18 一种验证方法、装置及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN109522565A true CN109522565A (zh) 2019-03-26

Family

ID=65769562

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710840396.4A Pending CN109522565A (zh) 2017-09-18 2017-09-18 一种验证方法、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN109522565A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356684A (zh) * 2021-12-31 2022-04-15 西安紫光展锐科技有限公司 算法模块测试方法及装置
CN115168241A (zh) * 2022-09-08 2022-10-11 济南新语软件科技有限公司 一种基于组合功能覆盖率的测试方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001014365A (ja) * 1999-06-29 2001-01-19 Toshiba Corp 論理回路の検証カバレッジ評価方法
US20030061581A1 (en) * 2001-06-26 2003-03-27 International Business Machines Corporation Method of evaluating test cases in a simulation environment by harvesting
CN101600125A (zh) * 2009-06-10 2009-12-09 北京中星微电子有限公司 一种视频测试码流的筛选方法及其系统
CN102348125A (zh) * 2010-07-30 2012-02-08 上海炬力集成电路设计有限公司 视频数据接收系统的验证方法及其装置
CN102426551A (zh) * 2011-11-04 2012-04-25 百度在线网络技术(北京)有限公司 测试数据筛选方法及装置、测试数据构造方法及装置
CN104462674A (zh) * 2014-11-25 2015-03-25 三星半导体(中国)研究开发有限公司 验证芯片设计的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001014365A (ja) * 1999-06-29 2001-01-19 Toshiba Corp 論理回路の検証カバレッジ評価方法
US20030061581A1 (en) * 2001-06-26 2003-03-27 International Business Machines Corporation Method of evaluating test cases in a simulation environment by harvesting
CN101600125A (zh) * 2009-06-10 2009-12-09 北京中星微电子有限公司 一种视频测试码流的筛选方法及其系统
CN102348125A (zh) * 2010-07-30 2012-02-08 上海炬力集成电路设计有限公司 视频数据接收系统的验证方法及其装置
CN102426551A (zh) * 2011-11-04 2012-04-25 百度在线网络技术(北京)有限公司 测试数据筛选方法及装置、测试数据构造方法及装置
CN104462674A (zh) * 2014-11-25 2015-03-25 三星半导体(中国)研究开发有限公司 验证芯片设计的方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356684A (zh) * 2021-12-31 2022-04-15 西安紫光展锐科技有限公司 算法模块测试方法及装置
CN115168241A (zh) * 2022-09-08 2022-10-11 济南新语软件科技有限公司 一种基于组合功能覆盖率的测试方法和系统

Similar Documents

Publication Publication Date Title
US7415444B2 (en) Determining compliance rates for probabilistic requests
CN108388509B (zh) 一种软件测试方法、计算机可读存储介质及终端设备
CN111078579A (zh) 一种Monkey测试方法、装置及终端设备
CN112700006B (zh) 网络架构搜索方法、装置、电子设备及介质
US20230394307A1 (en) Data caching method and apparatus for multiple concurrent deep learning training tasks
CN113204451A (zh) 一种对Redis集群的压力测试方法、系统、存储介质及终端
CN114676040A (zh) 一种测试覆盖率验证方法、装置及存储介质
CN109522565A (zh) 一种验证方法、装置及计算机可读存储介质
CN107066463A (zh) 数据处理方法、装置和服务器
CN112052070A (zh) 应用容器化评估方法、装置、电子设备及存储介质
CN112818219A (zh) 解释推荐效果的方法、系统、电子设备及可读存储介质
CN109696614B (zh) 电路测试优化方法及装置
CN106202374A (zh) 一种数据处理方法及装置
CN115130002A (zh) 推荐请求处理方法、装置、计算机设备、存储介质
CN113656830B (zh) 数据库脱敏语法解析方法、系统、计算机及可读存储介质
CN109857632B (zh) 测试方法、装置、终端设备及可读存储介质
CN112907198B (zh) 业务状态流转维护方法、装置及电子设备
CN114706589A (zh) 一种重复代码扫描方法、装置和电子设备
CN111228815B (zh) 处理游戏的配置表的方法、装置、存储介质和系统
CN112242959B (zh) 微服务限流控制方法、装置、设备及计算机存储介质
CN111967767A (zh) 一种业务风险识别方法、装置、设备及介质
CN111597096A (zh) 一种基准测试方法、系统及终端设备
CN111352825A (zh) 数据接口的测试方法、装置及服务器
CN105468603A (zh) 数据选择方法及装置
CN113377501B (zh) 数据处理方法、装置、设备、介质及程序产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20190326

RJ01 Rejection of invention patent application after publication