本申请实施例涉及测试技术领域,特别涉及一种验证组件生成方法、装置、存储介质及验证平台。
背景技术:
被测器件的功能由该被测器件中所包含的寄存器的配置值决定,所以,在测试被测器件时,验证人员可以编写不同的测试用例,通过各个测试用例对该被测器件中的寄存器配置各种合法的配置值,再检查该被测器件的功能是否符合预期。
通常,每个被测器件对应于一个寄存器描述表格,该寄存器描述表格用于描述该被测器件中各个寄存器的硬件结构信息。比如,寄存器描述表格中包括寄存器名称和寄存器地址。解析脚本可以根据寄存器描述表格生成寄存器模型,该寄存器模型用来对寄存器名称和寄存器地址进行转换,这样,在配置寄存器时只需要使用寄存器名称,而无需关心寄存器地址,从而方便对寄存器进行读写操作。除了寄存器模型之外,其余用于实现测试的验证组件需要验证人员手工编写。
验证人员在编写验证组件之前,需要收集测试被测功能时需要获取的寄存器的配置信息,而配置信息需要用表示其身份的语法结构进行包装,从而增加了对该配置信息的理解难度,不便于检查该配置信息的准确性,也不便于检查配置信息是否遗漏或重复。在收集到配置信息之后,验证人员需要根据配置信息编写验证组件,大多是重复性地针对某种特定验证语言的语法结构转化工作,大量重复性的编写工作浪费了验证人员大量的精力和时间,导致验证组件的生成效率较低。另外,不同的验证人员进行语法结构转化工作时的风格不统一,导致团队间很难对验证组件进行审核,从而影响验证组件的准确性。
技术实现要素:
本申请实施例提供了一种验证组件生成方法、装置、存储介质及验证平台,用于解决收集的属性信息的准确性不高,容易有遗漏或重复,验证组件的生成效率和准确性低的问题。所述技术方案如下:
一方面,提供了一种验证组件生成方法,所述方法包括:
获取被测器件对应的寄存器描述表格,所述寄存器描述表格中包括所述被测器件中各个寄存器的配置信息,所述配置信息用于生成各个寄存器的配置值,所述配置值是根据所述被测器件的被测功能确定的;
获取预设的验证组件模板;
将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,所述验证组件用于验证所述被测器件中的所述被测功能。
一方面,提供了一种验证组件生成装置,所述装置包括:
获取模块,用于获取被测器件对应的寄存器描述表格,所述寄存器描述表格中包括所述被测器件中各个寄存器的配置信息,所述配置信息用于生成各个寄存器的配置值,所述配置值是根据所述被测器件的被测功能确定的;
所述获取模块,还用于获取预设的验证组件模板;
生成模块,用于将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,所述验证组件用于验证所述被测器件中的所述被测功能。
一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的验证组件生成方法。
一方面,提供了一种验证平台,所述验证平台包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的验证组件生成方法。
本申请实施例提供的技术方案的有益效果至少包括:
通过将配置信息设置在寄存器描述表格中,这样,配置信息不需要用表示其身份的语法结构进行包装,从而降低了对该配置信息的理解难度,便于检查该配置信息的准确性,也便于检查配置信息是否遗漏或重复。在获取到配置信息之后,可以将配置信息填充到预设的验证组件模板中,从而得到验证组件,这样,可以自动完成针对某种特定验证语言的语法结构转化,而无需验证人员消耗大量的精力和时间去进行大量重复性的编写工作,提高了验证组件的生成效率。另外,自动生成的验证组件的风格是统一的,便于团队间对验证组件进行审核,从而提高了验证组件的准确性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例提供的验证组件生成方法的方法流程图;
图2是本申请一个实施例提供的验证组件的生成示意图;
图3是本申请一个实施例提供的验证组件的集成方式的示意图;
图4是本申请另一实施例提供的验证平台的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图1,其示出了本申请一个实施例提供的验证组件生成方法的方法流程图,该验证组件生成方法可以应用于验证平台中。该验证组件生成方法,可以包括:
步骤101,获取被测器件对应的寄存器描述表格,该寄存器描述表格中包括被测器件中各个寄存器的配置信息,该配置信息用于生成各个寄存器的配置值,该配置值是根据被测器件的被测功能确定的。
被测器件中配置有至少一个寄存器,且被测器件的被测功能可以由全部或部分寄存器的配置值决定。比如,被测器件中配置有四个寄存器,且第一个寄存器的配置值为a,第二个寄存器的配置值为b,第三个寄存器的配置值为c,第四个寄存器的配置值为d对应于被测功能1;第一个寄存器的配置值为e,第二个寄存器的配置值为f对应于被测功能2等等。
本实施例中,验证人员可以确定需要验证被测器件的各个被测功能,对于每个被测功能,确定决定该被测功能的各个寄存器的配置值,再根据各个寄存器的配置值生成配置信息,将该配置信息添加到寄存器描述表格中。即,配置信息用于生成实现被测功能的各个寄存器的配置值。
相关技术中的寄存器描述表格中包括寄存器名称和寄存器地址,本实施例中的寄存器描述表格除了包括寄存器名称和寄存器地址之外,还可以包括上文中提到的配置信息,配置信息的详细内容详见下文中的描述,此处不作赘述。
需要说明的是,在将配置信息添加到寄存器描述表格中时,可以确定配置信息在寄存器描述表格中的格式化描述形式,再按照该格式化描述形式将配置信息添加到寄存器描述表格中。
步骤102,获取预设的验证组件模板。
验证组件模板可以是根据特定验证语言设计的,本实施例不对特定验证语言进行限定。
本实施例中,验证人员可以预先在验证平台上编写验证组件模块,或者,验证平台可以获取导入的验证组件模板,本实施例不限定验证组件模板的获取方式。
本实施例中的验证组件模板可以包括至少一种模板,每种模板可以生成一种验证组件,本实施例不限定验证组件的数量以及验证组件的具体内容。
步骤103,将寄存器描述表格中的配置信息填充到验证组件模板中,得到验证组件,该验证组件用于验证被测器件中的被测功能。
本实施例中,验证平台中的自动化解析脚本可以将寄存器描述表格中的配置信息填充到验证组件模板中,并利用配置信息对验证组件模板进行配置,从而得到验证组件。
综上所述,本申请实施例提供的验证组件生成方法,通过将配置信息设置在寄存器描述表格中,这样,配置信息不需要用表示其身份的语法结构进行包装,从而降低了对该配置信息的理解难度,便于检查该配置信息的准确性,也便于检查配置信息是否遗漏或重复。在获取到配置信息之后,可以将配置信息填充到预设的验证组件模板中,从而得到验证组件,这样,可以自动完成针对某种特定验证语言的语法结构转化,而无需验证人员消耗大量的精力和时间去进行大量重复性的编写工作,提高了验证组件的生成效率。另外,自动生成的验证组件的风格是统一的,便于团队间对验证组件进行审核,从而提高了验证组件的准确性。
本实施例中引入了随机测试和覆盖率收集的验证方法。在上述验证方法中,同一个测试用例中寄存器的配置值并不固定,而是在一定的约束条件下随机产生。每一次运行测试用例时都会随机产生不同的配置值,随机产生的配置值会被标记到寄存器功能覆盖率模型里,这样,可以通过检查标记到功能覆盖率模型里的数据,来判断测试用例集随机产生的配置值是否对寄存器合法配置空间进行了足够的覆盖。其中,测试用例集对寄存器合法配置空间进行了足够的覆盖意味着对被测器件的被测功能进行了的充分测试。
针对引入了随机测试和覆盖率收集的验证方法,验证人员可以确定生成的验证组件需要包含以下功能:
1)将寄存器的配置值写入文件,并将该文件传输给外部程序;或者,读取外部程序提供的文件,根据该文件确定寄存器的配置值。
2)随机产生合法的寄存器的配置值。
3)定义寄存器的合法配置空间,并将其划分为多个分区。
4)将随机产生的寄存器的配置值标记到寄存器的合法配置空间中与其对应的分区中。
5)将随机产生的寄存器的配置值配置进被测器件的寄存器中。
6)为具有模式控制功能的寄存器定义枚举类型。
在确定了验证组件的功能后,可以设计验证平台中的验证组件。目前有多种验证语言和验证方法学被引入芯片的验证,其中使用最广泛的是基于systemverilog(sv)验证语言的uvm(universalverificationmethodology,通用验证方法)验证方法学。本实施例以验证平台为uvm验证平台为例进行说明,但并不限定验证平台为uvm验证平台。
在uvm验证平台中,可以将上述功能划分到不同的验证组件中,则本实施例中的验证组件可以包括寄存器配置值管理器、寄存器配置操作序列、寄存器功能覆盖率模型和寄存器模型,下面分别对这四种验证组件进行说明。
1、寄存器配置值管理器(reg_cfg_obj)
寄存器配置值管理器用于管理寄存器的配置值。比如,可以将功能1、2和6划分给寄存器配置值管理器,则寄存器配置值管理器可以存储寄存器的配置值、将寄存器的配置值写入文件、从文件中读入寄存器的配置值、为寄存器随机生成合法的配置值、为具有模式控制的寄存器定义枚举类型。
2、寄存器配置操作序列(reg_config_seq)
寄存器配置操作序列用于将配置值按照指定顺序写入各个寄存器中。比如,可以将功能5划分给寄存器配置操作序列,则寄存器配置操作序列可以将期望的配置值按指定顺序配置进被测器件的寄存器中。
3、寄存器功能覆盖率模型(reg_cov_model)
寄存器功能覆盖率模型用于将配置值标记到寄存器的合法配置空间中。比如,可以将功能3和4划分给寄存器功能覆盖率模型,则寄存器功能覆盖率模型可以定义寄存器的合法配置空间,并将其划分为不同的分区、将寄存器的配置值标记到合法配置空间中与其对应的分区中。
4、寄存器模块(regmodel)
寄存器模块用于对寄存器名称和寄存器地址进行转换。
下面对寄存器描述表格进行说明。
本实施例中的寄存器描述表格中包括配置信息。在一种实现方式中,可以为每种配置信息在寄存器描述表格中增加一个属性列,并确定每一种配置信息的格式化描述形式,按照该格式化描述形式将每种配置信息添加到对应的属性列中。
需要说明的是,格式化描述形式需要易于解析。并且,由于每种配置信息都被添加到对应的属性列中,所以,格式化描述形式的设计可以大量的剥离掉各种验证语言中用来标识该配置信息的身份及用途的特定语法结构。另外,理论上,格式化描述形式可以不依赖于任何特定的验证语言,可以自行定义。出于实用性考虑,本实施例中的格式化描述形式以应用最为广泛的systemverilog验证语言为基础,并对其进行了进一步的简化,简化后的格式化描述形式能够被不同的团队理解。
本实施例中的寄存器描述表格中的属性列可以包括order、cname、enum、related_flds、rand、cross_rand、cov和cross_cov,请参考表一所示的一种寄存器描述表格,表一中以被测器件包括两个寄存器,且该寄存器描述表格包括上述属性列为例进行说明。由于表一中的列数较多,为了便于查看,下面将表一分为表一(1)和表一(2)这两个部分进行说明,在实际实现时,表一为一个完整的表格。
表一(1)
表一(2)
其中,offset表示寄存器地址,regname表示寄存器名称,其余属性列中的信息即为配置信息,详见下文中的解释。
在实际实现时,寄存器描述表格还可以包括其他数量的寄存器,且寄存器描述表格中的属性列的数量可以多于或少于上述提及的属性列的数量,本实施例不作限定。
下面以上述寄存器描述表格为例,对根据配置信息和验证组件模板生成各个验证组件的流程进行说明。
1、验证组件是寄存器配置值管理器
1)声明fld变量
寄存器配置值管理器包括随机生成函数,若要配置随机生成函数,则配置信息可以包括域field名称和field位宽,那么,步骤103可以包括:将field名称和field位宽填充到寄存器配置值管理器的模板中;确定寄存器的配置值的最小值,并根据field位宽确定寄存器的配置值的最大值;利用最小值和最大值配置随机生成函数的随机值生成区间,得到寄存器配置值管理器。
其中,配置值的最小值可以是固定的数值,也可以是根据某种计算方式计算得到的数值,本实施例不作限定。比如,在一种实现方式中,配置值的最小值可以是0。配置值的最大值可以是根据field位宽计算得到的数值。在一种实现方式中,可以先确定field位宽对应的最大值,再将配置值的最大值设置为小于或等于该最大值的一个数值。比如,field位宽为3,则该field位宽对应的最大值为8,可以设置配置值的最大值为小于或等于8的数值。
本实施例中,可以根据配置值的最小值和最大值确定一个取值区间,并将该取值区间作为随机生成函数的随机值生成区间,则随机生成函数每次生成的随机值属于该随机值生成区间。其中,随机值生成区间也可以称为随机范围约束。
根据上述内容可知,本实施例中的每个fld对应三个变量,一个变量用来存储配置值的最小值,一个变量用来存储配置值的最大值,一个变量用来存储随便生成函数生成的随机值(也即配置值)。
需要说明的是,配置信息中的field名称对应于表一(1)中的fld_name,field位宽对应于表一(1)中的width,以fld_a1为例,则生成的代码如下:
randbit[3:0]fld_a;
bit[3:0]fld_a_min=0,fld_a_max=15;
constraintvalid_range{fld_ainside{[fld_a_min:fld_a_max]};}
即,fld_a1的配置值为[0,15]之间的随机值。
2)输入输出函数
寄存器配置值管理器包括输入输出函数,其中,输入输出函数用于向文件句柄输出外部程序中使用的与field对应的变量的配置值,或者,输入输出函数用于从文件中获取外部程序中使用的与field对应的变量的配置值。
若要配置输入输出函数,则配置信息可以包括field名称和文件信息,那么,步骤103可以包括:将field名称和文件信息填充到寄存器配置值管理器的模板中;若文件信息为空,则指示外部程序中使用的变量名与field名称相同,利用field名称配置输入输出函数,得到寄存器配置值管理器;若文件信息非空且不为预定字符,则指示外部程序中使用的变量名与field名称不同,利用文件信息配置输入输出函数,得到寄存器配置值管理器。
其中,若外部程序中使用的变量名与field名称相同,则文件信息中可以不填写内容,即文件信息为空;若外部程序中使用的变量名与field名称不同,则在文件信息中填写外部程序中使用的变量名;若外部程序中不使用field对应的变量,则文件信息中填写预定字符,如na。
需要说明的是,配置信息中的文件信息对应于表一(1)中的cname,以fld_a1、fld_a2、fld_b1、fld_b2为例,则生成的代码如下:
即,一个外部程序使用的变量名为alg_a1,与对应的fld_a1不同;一个外部程序使用的变量名为fld_a2,与对应的fld_a2相同;一个外部程序使用的变量名为alg_b1,与对应的fld_b1不同;一个外部程序不使用与fld_b1对应的变量。
3)枚举类型声明
配置信息包括枚举类型信息,那么,步骤103可以包括:若枚举类型信息非空,则将枚举类型信息填充到寄存器配置值管理器的模板中;利用枚举类型信息配置寄存器配置值管理器中的变量,得到寄存器配置值管理器。
本实施例中的枚举类型用于对寄存器进行模式控制,且为模式控制声明枚举类型,可以显著地提高代码和测试用例的可读性和易维护性。
需要说明的是,配置信息中的枚举类型信息对应于表一(2)中的enum,以fld_a2为例,则生成的代码如下:
4)fld约束条件声明
本实施例中,fld约束条件包括单约束条件和多约束条件,其中,单约束条件是指fld的约束条件不依赖于别的fld,多约束条件是指fld的约束条件依赖于别的fld。
配置信息包括field约束条件信息,且该field约束条件信息可以包括单约束条件和多约束条件,那么,步骤103可以包括:将field约束条件信息填充到寄存器配置值管理器的模板中;利用单约束条件或多约束条件配置寄存器配置值管理器中配置值的生成规则,得到寄存器配置值管理器。
若field约束条件信息为单约束条件,则配置信息对应于表一(2)中的rand:lll,其中,lll是约束名,用来对该单约束条件进行开关。以fld_a1和fld_b1为例,则生成的代码如下:
constraintlll{
fld_a1inside{[0:5]};
fld_a1!=2;
fld_b1inside{1,3};
}
即,fld_a1的配置值为0-5之间,且不等于2。
若field约束条件信息为多约束条件,则配置信息对应于表一(2)中的cross_rand:mmm,属于同一属性列的多个约束条件可以统一进行开关。以fld_a1和fld_b1为例,则生成的代码如下:
constraintmmm{
fld_b1==1->fld_a1==3;
}
即,fld_b1的配置值为1时,fld_a1的配置值为3。
需要说明的第一点是,一个寄存器描述表格中可以包括多组field约束条件,每组field约束条件对应于一个属性列。
需要说明的第二点是,还可以在寄存器表格描述中增加related_flds的属性列,该related_flds用来标注当前fld还与哪些其他fld相关,不会被自动化解析脚本解析,不会用于生成验证组件。
2、验证组件是寄存器配置操作序列
配置信息包括寄存器配置顺序信息,那么,步骤103可以包括:将寄存器配置顺序信息填充到寄存器配置操作序列的模板中;配置寄存器配置操作序列按照寄存器配置顺序信息所指示的顺序依次写入各个寄存器的配置值,得到寄存器配置操作序列。
其中,每一条寄存器配置顺序信息对应于一个属性列,且每个属性列对应于一个配置函数。对于每条寄存器配置顺序信息,当存在寄存器配置顺序信息为na的寄存器时,说明该寄存器不需要配置;当存在寄存器配置顺序信息不为na的寄存器时,说明该寄存器需要配置,且可以根据该寄存器对应的寄存器配置顺序信息的数值确定该寄存器的配置顺序。比如,以order表示一个寄存器对应的寄存器配置顺序信息,则可以设置order值小的寄存器先配置,order值大的寄存器后配置。
以配置信息对应于表一(1)中的order:xxx:na为例,则生成的代码如下:
taskxxx();
regmodel.reg_b.fld_b1.predict(reg_cfg.fld_b1);
regmodel.reg_b.fld_b2.predict(reg_cfg.fld_b2);
regmodel.reg_b.write(reg_b.get());
endtask
即,reg_a对应的order:xxx:na的数值为空,则reg_a对应的寄存器配置顺序信息为na,不需要配置;reg_b对应的order:xxx:na的数值为1,需要配置。其中,predict函数用于将fld_b1和fld_b2的值拼成32比特的配置值,且fld_b1和fld_b2的先后配置顺序不限;write函数用于将拼好的32比特的配置值写进寄存器中。
以配置信息对应于表一(1)中的order:yyy:0为例,则生成的代码如下:
taskyyy();
regmodel.reg_b.fld_b1.predict(reg_cfg.fld_b1);
regmodel.reg_b.fld_b2.predict(reg_cfg.fld_b2);
regmodel.reg_b.write(reg_b.get());
regmodel.reg_a.fld_a1.predict(reg_cfg.fld_a1);
regmodel.reg_a.fld_a2.predict(reg_cfg.fld_a2);
regmodel.reg_a.write(reg_a.get());
endtask
即,reg_a对应的order:yyy:0的数值为1,需要配置,且fld_a1和fld_a2的先后配置顺序不限;reg_b对应的order:yyy:0的数值为空,则reg_b对应的寄存器配置顺序信息为0,需要配置,且fld_b1和fld_b2的先后配置顺序不限。由于reg_b的order值0小于reg_a的order值1,所以,最终的配置顺序为先配置reg_b,再配置reg_a。
3、验证组件是寄存器功能覆盖率模型
本实施例中,寄存器功能覆盖率模型可以定义单fld覆盖率和多fld覆盖率,其中,单fld覆盖率用来指定单一fld的配置值的测试覆盖率要求。比如,单一fld配置值的测试覆盖率要求可以包括,哪些配置值或区间需要覆盖到;哪些状态跳转需要覆盖到;对特定配置值进行采样和标记时是否有额外的采样条件需要满足等等。多fld覆盖率用来指定对多个fld的配置值进行组合后的测试覆盖率要求。
配置信息包括field覆盖率信息,且该field覆盖率信息包括单field覆盖率和多field覆盖率,那么,步骤103可以包括:将field覆盖率信息填充到寄存器功能覆盖率模型的模板中;配置寄存器功能覆盖率模型按照field覆盖率信息对寄存器中的合法配置空间进行分区划分,并配置每个分区的覆盖率要求,得到寄存器功能覆盖率模型。
当配置信息为单field覆盖率时,若该单field覆盖率为空,则表示将fld的合法取值空间均分为64个分区,每个分区都要覆盖到;若该单field覆盖率为na,则表示fld的配置值覆盖率没有要求。其中,每个fld都有一个独立的采样控制开关,且一个寄存器描述表格只有一个单field覆盖率对应的属性列。
以配置信息对应于表一(2)中的cov为例,则生成的代码如下:
当配置信息为多field覆盖率时,若该多field覆盖率为空,则表示fld组合的配置值覆盖率没有要求。其中,每个fld组合都有一个独立的采样控制开关,且一个寄存器描述表格只有一个多field覆盖率对应的属性列。
以配置信息对应于表一(2)中的cross_cov为例,则生成的代码如下:
c1:crossfld_a1,fld_b1iff(c1_cov_en);
c2:crossfld_a1,fld_b2iff(c2_cov_en);
需要说明的是,还可以在寄存器表格描述中增加related_flds的属性列,该related_flds用来标注当前fld还与哪些其他fld相关,不会被自动化解析脚本解析,不会用于生成验证组件。
4、验证组件是寄存器模型
uvm验证方法学中定义了专门的数据结构来完成寄存器名称与寄存器地址之间的转换,按照该数据结构编写寄存器模型的模板即可。
请参考图2,其示出了验证组件的生成示意图,即将寄存器描述表格和预设的验证组件模板输入自动化解析脚本,即可得到包含寄存器配置值管理器、寄存器配置操作序列、寄存器功能覆盖率模型和寄存器模型的验证组件。
本实施例提供了各个验证组件在验证平台中的一种集成方式,请参考图3,图3中的寄存器配置值管理器为reg_cfg_obj、寄存器配置操作序列为reg_config_seq、寄存器功能覆盖率模型为reg_cov_model,寄存器模型为regmodel。基于上述集成方式,下面对各个验证组件之间的协作方式进行说明。
1)reg_cfg_obj实例1用来产生并存储寄存器的配置值。
2)reg_config_seq用来将配置值配置进寄存器。reg_config_seq包含一个reg_cfg_obj句柄和一个regmodel句柄,且其从reg_cfg_obj中获取寄存器的配置值,从regmodel中获取对应的寄存器地址,然后向driver发起对指定寄存器地址的事务级写请求,由driver将该事务级写请求转换成interface的信号级操作,通过该信号级操作将配置值配置进被测器件(dut)中指定的寄存器中。
3)reg_cov_model用来定义寄存器的合法配置空间,并将其划分为不同的分区。reg_cov_model包含一个reg_cfg_obj句柄,且其从reg_cfg_obj中获取寄存器的配置值,并根据该配置值对配置空间内的各个分区进行标记,记录寄存器中合法配置空间的覆盖率。
其中,reg_cov_model中的reg_cfg_ojb句柄可以来自reg_cfg_obj实例1。若当前的验证平台作为一个子模块被复用到更高级别的验证平台,则更高级别的验证平台可能不包含reg_cfg_obj实例1此时,reg_cov_model中的reg_cfg_ojb句柄只能来自reg_cfg_obj实例2。下面对reg_cov_model从reg_cfg_obj实例2中获取reg_cfg_ojb句柄的流程进行说明。
monitor监测interface的信号级操作,并将监测到的信号级操作转换为事务级操作。如果监测到写操作,通过regmodel实例2对检测到的寄存器地址进行转化,可以得到该操作的寄存器名称,然后根据该寄存器名称和monitor监测到的配置值对reg_cfg_ojb实例2中对应的变量进行赋值。
请参考图4,其示出了本申请一个实施例提供的验证组件生成装置的结构框图,该验证组件生成装置可以应用于验证平台中。该验证组件生成装置,可以包括:
获取模块410,用于获取被测器件对应的寄存器描述表格,寄存器描述表格中包括被测器件中各个寄存器的配置信息,配置信息用于生成各个寄存器的配置值,配置值是根据被测器件的被测功能确定的;
获取模块410,还用于获取预设的验证组件模板;
生成模块420,用于将寄存器描述表格中的配置信息填充到验证组件模板中,得到验证组件,验证组件用于验证被测器件中的被测功能。
在一个可选的实施例中,验证组件包括寄存器配置值管理器、寄存器配置操作序列、寄存器功能覆盖率模型和寄存器模型;
寄存器配置值管理器用于管理寄存器的配置值;
寄存器配置操作序列用于将配置值按照指定顺序写入各个寄存器中;
寄存器功能覆盖率模型用于将配置值标记到寄存器的合法配置空间中;
寄存器模块用于对寄存器名称和寄存器地址进行转换。
在一个可选的实施例中,配置信息包括域field名称和field位宽,且寄存器配置值管理器包括随机生成函数,则生成模块420,还用于:
将field名称和field位宽填充到寄存器配置值管理器的模板中;
确定寄存器的配置值的最小值,并根据field位宽确定寄存器的配置值的最大值;
利用最小值和最大值配置随机生成函数的随机值生成区间,得到寄存器配置值管理器。
在一个可选的实施例中,配置信息包括field名称和文件信息,且寄存器配置值管理器包括输入输出函数,输入输出函数用于向文件句柄输出外部程序中使用的与field对应的变量的配置值,或者,输入输出函数用于从文件中获取外部程序中使用的与field对应的变量的配置值,则生成模块420,还用于:
将field名称和文件信息填充到寄存器配置值管理器的模板中;
若文件信息为空,则指示外部程序中使用的变量名与field名称相同,利用field名称配置输入输出函数,得到寄存器配置值管理器;
若文件信息非空且不为预定字符,则指示外部程序中使用的变量名与field名称不同,利用文件信息配置输入输出函数,得到寄存器配置值管理器。
在一个可选的实施例中,配置信息包括枚举类型信息,生成模块420,还用于:
若枚举类型信息非空,则将枚举类型信息填充到寄存器配置值管理器的模板中;
利用枚举类型信息配置寄存器配置值管理器中的变量,得到寄存器配置值管理器。
在一个可选的实施例中,配置信息包括field约束条件信息,field约束条件信息中包括单约束条件和多约束条件,生成模块420,还用于:
将field约束条件信息填充到寄存器配置值管理器的模板中;
利用单约束条件或多约束条件配置寄存器配置值管理器中配置值的生成规则,得到寄存器配置值管理器。
在一个可选的实施例中,配置信息包括寄存器配置顺序信息,生成模块420,还用于:
将寄存器配置顺序信息填充到寄存器配置操作序列的模板中;
配置寄存器配置操作序列按照寄存器配置顺序信息所指示的顺序依次写入各个寄存器的配置值,得到寄存器配置操作序列。
在一个可选的实施例中,配置信息包括field覆盖率信息,field覆盖率信息包括单field覆盖率和多field覆盖率,生成模块420,还用于:
将field覆盖率信息填充到寄存器功能覆盖率模型的模板中;
配置寄存器功能覆盖率模型按照field覆盖率信息对寄存器中的合法配置空间进行分区划分,并配置每个分区的覆盖率要求,得到寄存器功能覆盖率模型。
综上所述,本申请实施例提供的验证组件生成装置,通过将配置信息设置在寄存器描述表格中,这样,配置信息不需要用表示其身份的语法结构进行包装,从而降低了对该配置信息的理解难度,便于检查该配置信息的准确性,也便于检查配置信息是否遗漏或重复。在获取到配置信息之后,可以将配置信息填充到预设的验证组件模板中,从而得到验证组件,这样,可以自动完成针对某种特定验证语言的语法结构转化,而无需验证人员消耗大量的精力和时间去进行大量重复性的编写工作,提高了验证组件的生成效率。另外,自动生成的验证组件的风格是统一的,便于团队间对验证组件进行审核,从而提高了验证组件的准确性。
本申请一个实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的验证组件生成方法。
本申请一个实施例提供了一种验证平台,所述验证平台包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的验证组件生成方法。
需要说明的是:上述实施例提供的验证组件生成装置在进行验证组件生成时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将验证组件生成装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的验证组件生成装置与验证组件生成方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。
1.一种验证组件生成方法,其特征在于,所述方法包括:
获取被测器件对应的寄存器描述表格,所述寄存器描述表格中包括所述被测器件中各个寄存器的配置信息,所述配置信息用于生成各个寄存器的配置值,所述配置值是根据所述被测器件的被测功能确定的;
获取预设的验证组件模板;
将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,所述验证组件用于验证所述被测器件中的所述被测功能。
2.根据权利要求1所述的方法,其特征在于,所述验证组件包括寄存器配置值管理器、寄存器配置操作序列、寄存器功能覆盖率模型和寄存器模型;
所述寄存器配置值管理器用于管理所述寄存器的配置值;
所述寄存器配置操作序列用于将所述配置值按照指定顺序写入各个寄存器中;
所述寄存器功能覆盖率模型用于将所述配置值标记到所述寄存器的合法配置空间中;
所述寄存器模块用于对寄存器名称和寄存器地址进行转换。
3.根据权利要求2所述的方法,其特征在于,所述配置信息包括域field名称和field位宽,且所述寄存器配置值管理器包括随机生成函数,则所述将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,包括:
将所述field名称和所述field位宽填充到所述寄存器配置值管理器的模板中;
确定所述寄存器的配置值的最小值,并根据所述field位宽确定所述寄存器的配置值的最大值;
利用所述最小值和所述最大值配置所述随机生成函数的随机值生成区间,得到所述寄存器配置值管理器。
4.根据权利要求2所述的方法,其特征在于,所述配置信息包括field名称和文件信息,且所述寄存器配置值管理器包括输入输出函数,所述输入输出函数用于向文件句柄输出外部程序中使用的与field对应的变量的配置值,或者,所述输入输出函数用于从文件中获取外部程序中使用的与field对应的变量的配置值,则所述将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,包括:
将所述field名称和所述文件信息填充到所述寄存器配置值管理器的模板中;
若所述文件信息为空,则指示外部程序中使用的变量名与所述field名称相同,利用所述field名称配置所述输入输出函数,得到所述寄存器配置值管理器;
若所述文件信息非空且不为预定字符,则指示外部程序中使用的变量名与所述field名称不同,利用所述文件信息配置所述输入输出函数,得到所述寄存器配置值管理器。
5.根据权利要求2所述的方法,其特征在于,所述配置信息包括枚举类型信息,所述将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,包括:
若所述枚举类型信息非空,则将所述枚举类型信息填充到所述寄存器配置值管理器的模板中;
利用所述枚举类型信息配置所述寄存器配置值管理器中的变量,得到所述寄存器配置值管理器。
6.根据权利要求2所述的方法,其特征在于,所述配置信息包括field约束条件信息,所述field约束条件信息中包括单约束条件和多约束条件,所述将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,包括:
将所述field约束条件信息填充到所述寄存器配置值管理器的模板中;
利用所述单约束条件或所述多约束条件配置所述寄存器配置值管理器中配置值的生成规则,得到所述寄存器配置值管理器。
7.根据权利要求2所述的方法,其特征在于,所述配置信息包括寄存器配置顺序信息,所述将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,包括:
将所述寄存器配置顺序信息填充到所述寄存器配置操作序列的模板中;
配置所述寄存器配置操作序列按照所述寄存器配置顺序信息所指示的顺序依次写入各个寄存器的配置值,得到所述寄存器配置操作序列。
8.根据权利要求2所述的方法,其特征在于,所述配置信息包括field覆盖率信息,所述field覆盖率信息包括单field覆盖率和多field覆盖率,所述将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,包括:
将所述field覆盖率信息填充到所述寄存器功能覆盖率模型的模板中;
配置所述寄存器功能覆盖率模型按照所述field覆盖率信息对所述寄存器中的合法配置空间进行分区划分,并配置每个分区的覆盖率要求,得到所述寄存器功能覆盖率模型。
9.一种验证组件生成装置,其特征在于,所述装置包括:
获取模块,用于获取被测器件对应的寄存器描述表格,所述寄存器描述表格中包括所述被测器件中各个寄存器的配置信息,所述配置信息用于生成各个寄存器的配置值,所述配置值是根据所述被测器件的被测功能确定的;
所述获取模块,还用于获取预设的验证组件模板;
生成模块,用于将所述寄存器描述表格中的配置信息填充到所述验证组件模板中,得到验证组件,所述验证组件用于验证所述被测器件中的所述被测功能。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至8任一所述的验证组件生成方法。
11.一种验证平台,其特征在于,所述验证平台包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求1至8任一所述的验证组件生成方法。
技术总结