
1.本技术涉及芯片测试技术领域,具体涉及一种功能覆盖率代码的自动生成方法及装置。
背景技术:2.在芯片测试领域,通常需要使用代码覆盖率来检验验证是否充分。但是即使代码覆盖率达到100%,也依然不能保证被测对象没有问题。这是因为代码覆盖测试仅仅是测试代码本身,测试人员并不知道,在测试过程中,是否已经输入了所有的激励,并已经产生所有可能的结果,同时,被测对象的状态是否全部访问,所有内部转换是否出现等问题也无从得知。
3.针对这些问题,业界提出了功能覆盖的概念。功能覆盖的定位为:关注设计的输入、输出和内部状态。功能覆盖率的出发点是针对验证对象的具体的功能需求。但是由于不同的验证对象有不同的功能需求,因此需要工程师手动撰写相应的测试代码,这种方式导致验证过程的效率较低,人力成本大,且不同工程师的代码风格的差异也不利于工程师维护和检视。
技术实现要素:4.为了解决现有技术中存在的问题,第一方面,本技术提供一种功能覆盖率代码的自动生成方法,包括:
5.获取存储有功能覆盖率测试参数的表单;
6.从所述表单中提取多个参数字段及其对应的参数值;
7.根据各所述参数字段及其对应的参数值以及预设的代码模板生成功能覆盖率代码。
8.在一实施例中,所述获取存储有功能覆盖率测试参数的表单,包括:
9.根据表单的名称以及预设的表单与路径的映射关系表得到读取路径;
10.根据所述读取路径获取所述表单。
11.在一实施例中,所述根据各所述参数字段、所述参数值以及预设的代码模板生成功能覆盖率代码,包括:
12.从各所述代码模板识别可编辑标识;
13.根据所述可编辑标识及可编辑标识与参数字段的映射关系确定各代码模板对应的参数字段;
14.将确定的参数字段对应的参数值分别导入对应的代码模板中,得到多个子代码;
15.将多个子代码进行组合,得到所述功能覆盖率代码。
16.在一实施例中,所述功能覆盖率代码包括功能代码、接口代码、触发代码以及连接代码;
17.所述代码模板包括与所述功能覆盖率代码对应的功能代码模板、接口代码模板、
触发代码模板以及连接代码模板。
18.在一实施例中,在所述从所述表单中提取多个参数字段及其对应的参数值之后,还包括:
19.根据各参数字段对应的参数定义对参数值进行合法性校验。
20.第二方面,本技术提供一种功能覆盖率代码的自动生成装置,包括:
21.表单获取模块,用于获取存储有功能覆盖率测试参数的表单;
22.参数提取模块,用于从所述表单中提取多个参数字段及其对应的参数值;
23.代码生成模块,用于根据各所述参数字段及其对应的参数值以及预设的代码模板生成功能覆盖率代码。
24.在一实施例中,所述表单获取模块包括:
25.读取路径获取单元,用于根据表单的名称以及预设的表单与路径的映射关系表得到读取路径;
26.表单读取单元,用于根据所述读取路径获取所述表单。
27.在一实施例中,所述代码生成模块包括:
28.可编辑标识识别单元,用于从各所述代码模板识别可编辑标识;
29.参数字段确定单元,用于根据所述可编辑标识及可编辑标识与参数字段的映射关系确定各代码模板对应的参数字段;
30.参数值导入单元,用于将确定的参数字段对应的参数值分别导入对应的代码模板中,得到多个子代码;
31.代码组合单元,用于将多个子代码进行组合,得到所述功能覆盖率代码。
32.在一实施例中,还包括合法性校验模块,用于:
33.在所述从所述表单中提取多个参数字段及其对应的参数值之后,根据各参数字段对应的参数定义对参数值进行合法性校验。
34.第三方面,本技术提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本技术提供的任一功能覆盖率代码的自动生成方法。
35.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本技术提供的任一功能覆盖率代码的自动生成方法。
36.第五方面,本技术提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现本技术提供的任一功能覆盖率代码的自动生成方法。
37.本技术的功能覆盖率代码的自动生成方法及装置,通过通用的表单模板记录和获取生成功能代码所用的设计参数,基于这些设计参数和预设的代码模板自动生成功能覆盖率代码。相比于传统的由工程师手动撰写功能代码的方式,本技术大大节约了人力成本,减少了重复劳动;同时,设计参数在统一的表单模板中记录,格式一致,方便不同工程师进行检视和维护。
附图说明
38.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
39.图1为本技术提供的功能覆盖率代码的自动生成方法的一种示意图。
40.图2为本技术提供的功能覆盖率代码的自动生成方法的另一种示意图。
41.图3为本技术提供的功能覆盖率代码的自动生成方法的另一种示意图。
42.图4为本技术提供的功能覆盖率代码的自动生成方法的另一种示意图。
43.图5为本技术提供的功能覆盖率代码的自动生成装置的一种示意图。
44.图6为本技术提供的功能覆盖率代码的自动生成装置的另一种示意图。
45.图7为本技术提供的功能覆盖率代码的自动生成装置的另一种示意图。
46.图8为本技术提供的功能覆盖率代码的自动生成装置的另一种示意图。
47.图9为本技术提供的一种计算机设备的示意图。
具体实施方式
48.为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
49.需要说明的是,本技术的功能覆盖率代码的自动生成方法及装置可用于芯片测试技术领域,也可用于除芯片测试技术领域之外的任意领域,本技术对功能覆盖率代码的自动生成方法及装置的应用领域不做限定。
50.第一方面,本技术提供一种功能覆盖率代码的自动生成方法。如图1所示,该方法包括以下步骤s101至步骤s103:
51.步骤s101,获取存储有功能覆盖率测试参数的表单。
52.具体地,该表单是由专家预先设定的用于记录和存储功能覆盖率测试参数的表格,表单例如可以是excel表格。表1为表单的一种示例:
53.表1:表单
[0054][0055]
以表1为例,表单的第一行为功能覆盖率测试参数对应的多个参数字段,各参数字段所属列中的取值即为该参数字段的参数值。参数字段为预先设定的,各参数字段的参数
值则是由工程师根据实际需求确定并填写的。工程师完成一个表单的填写后,会将表单进行存储,填写完成的表单将应用于功能覆盖率代码的生成过程中。
[0056]
表1中的各参数字段及其参数值对应的含义、来源和取值要求如下表2所示:
[0057]
表2:参数字段说明
[0058][0059]
需要说明的是,本技术表1所示的参数字段及其取值以及表2所示的参数字段说明均为本技术提供的一种示例,并非用以限定本技术。实际应用中,可根据具体的设计需求进行参数的调整。
[0060]
步骤s102,从所述表单中提取多个参数字段及其对应的参数值。
[0061]
具体地,本步骤从获取到的表单中进行参数字段及其对应的参数值的提取。提取时,使用现有的参数提取工具(例如python脚本)对表单进行逐行读取。具体地,以其中一行为例,首先针对该行定义一个covergroup对象,covergroup对象的对象名为covergroup这一参数字段在该行的参数值(字符串);然后将该行中的各参数字段对应的参数值保存到该covergroup对象中,在后续生成功能覆盖率代码的过程中接受调用。
[0062]
步骤s103,根据各所述参数字段及其对应的参数值以及预设的代码模板生成功能覆盖率代码。
[0063]
其中,功能覆盖率代码包括功能代码,功能代码为功能覆盖率核心代码,例如,包括用于验证待验证对象功能需求的各类代码。
[0064]
在一些可选的实施例中,功能覆盖率代码包括功能代码、接口代码、触发代码以及连接代码。其中,接口代码、触发代码以及连接代码用于将功能代码连接到uvm环境中。其中,接口代码用于定义一组待测设计代码的接口,是连接功能代码和待测设计代码的桥梁。连接代码用于将接口代码和待测设计代码连接起来。触发代码用于启动收集功能覆盖率。
[0065]
示例性地,本步骤中的代码模板包括功能代码模板、接口代码模板、触发代码模板以及连接代码模板,各模板会基于表单中的参数值生成不同的子代码,示例性地,依次调用步骤s102中生成的各covergroup对象,进行参数字段和参数值的读取,并将对应的参数值填入多个代码模板中,得到多个子代码。也即功能代码、接口代码、触发代码以及连接代码,各子代码组合后得到本步骤的功能覆盖率代码。需要说明的是,代码模板的数量也可以为1,该代码模板可以直接生成功能代码、接口代码、触发代码以及连接代码。本公开对功能覆
盖率代码包括的代码类别、代码模板的数量均不作限制。具体生成各子代码的过程将在后续实施例中详细说明。
[0066]
在一实施例中,如图2所示,步骤s101,获取存储有功能覆盖率测试参数的表单,包括:
[0067]
步骤s1011,根据表单名称以及预设的表单与路径的映射关系表得到读取路径;
[0068]
步骤s1012,根据所述读取路径获取所述表单。
[0069]
本实施例中,步骤s1011的表单名称为工程师生成的表单的名称,每个表单的名称都是唯一的,因此根据表单名称可唯一确定一个表单。前述实施例中提到,工程师生成表单后会将表单进行存储,表单的存储位置唯一对应一个存储路径,本实施例中的读取路径与表单的存储路径相同。当工程师将表单存储到某一存储空间中时,会自动生成该表单与其对应的存储路径的映射关系,其形式例如映射关系表。当需要自动生成功能代码时,工程师可通过表单名称指定一表单,根据该表单名称即可唯一确定一个读取路径,进而获取到指定的表单。
[0070]
在一实施例中,如图3所示,步骤s103,根据各所述参数字段、所述参数值以及预设的代码模板生成功能覆盖率代码,包括:
[0071]
步骤s1031,从各所述代码模板识别可编辑标识。
[0072]
具体地,代码模板由工程师预先设定好,在生成功能覆盖率代码的过程中直接调用即可。前述实施例中提到,代码模板包括功能代码模板、接口代码模板、触发代码模板以及连接代码模板,以下将以功能代码模板为例,对步骤s103的具体过程进行详细的说明。以下是功能代码模板的一种示例:
[0073][0074]
其中的s0、s1、s2、s3、s4、s5、s6、s7、s8就是可编辑标识。可以理解的是,模板中通常包括固定不变的部分和可编辑的部分这两部分,本实施例中的可编辑标识就是用于标注代码模板中可编辑位置的标识。换言之,通过可编辑标识即可确定代码模板中需要编辑的位置。
[0075]
步骤s1032,根据所述可编辑标识及可编辑标识与参数字段的映射关系确定各代码模板对应的参数字段。
[0076]
具体地,承接上例,上述功能代码模板对应的可编辑标识与参数字段的映射关系如下:
[0077]
s0:covergroup列对应的功能覆盖率组名
[0078]
s1:coverpoint列对应的功能覆盖率覆盖点名
[0079]
s2:signal列对应的信号名
[0080]
s3:bins name列对应的仓名
[0081]
s4:bins value列对应的仓值
[0082]
s5:illegal name列对应的仓名
[0083]
s6:illegal value列对应的仓值
[0084]
s7:ignore name列对应的仓名
[0085]
s8:ignore name列对应的仓值
[0086]
由此可见,通过代码模板中的可编辑标识以及可编辑标识与参数字段的映射关系即可确定代码模板中的可编辑位置以及该位置需要填入的内容。例如,以上功能代码模板中,可编辑标识s0所在位置为一需要编辑的位置,从可编辑标识与参数字段的映射关系可知,可编辑标识s0对应“covergroup列对应的功能覆盖率组名”,因此,可编辑标识s0所在位置需要填入的内容即为功能覆盖率组名,即表单中covergroup这一参数字段的参数值。
[0087]
步骤s1033,将确定的参数字段对应的参数值分别导入对应的代码模板中,得到多个子代码。
[0088]
具体地,将步骤s1032中确定的各可编辑位置“需要填入的内容”分别替换对应可编辑位置上的可编辑标识,完成参数值的导入。例如,将表1中参数字段“covergroup”所在列第2行的参数值cmn_fq_ac导入后,模板中的“covergroup s0”会变为“covergroup cmn_fq_ac”。每个代码模板完成导入后,即可得到对应的子代码。
[0089]
步骤s1034,将多个子代码进行组合,得到所述功能覆盖率代码。
[0090]
前述实施例中提到,功能覆盖率代码包括功能代码、接口代码、触发代码以及连接代码,代码模板也相应的包含功能代码模板、接口代码模板、触发代码模板以及连接代码模板。上述步骤s1031和步骤s1032分别示出了功能代码模板及其对应的可编辑标识与参数字段的映射关系,以下也分别给出接口代码模板、触发代码模板以及连接代码模板的具体形式:
[0091]
(1)接口代码(包含interface代码和rtl代码)模板
[0092][0093]
其中,w0为interface列名,w1为width列位宽,w2为signal列信号名。
[0094]
(2)连接代码(连接interface代码和rtl代码的代码)模板
[0095]
assign w0.clk=`cov_path.clk;
[0096]
assign w0.rstn=`cov_path.resetn;
[0097]
assign w0.w2=`cov_path.w2;
[0098]
其中,w0为interface列名,w2为signal列信号名。
[0099]
(3)触发代码模板
[0100][0101][0102]
其中,w0为interface列名。
[0103]
通过上述步骤s1031至步骤s1033分别得到功能代码、接口代码、触发代码以及连接代码后,将这些代码组合在一起即可得到功能覆盖率代码。
[0104]
由于基于接口代码模板、触发代码模板以及连接代码模板分别生成接口代码、触发代码以及连接代码的过程与基于功能代码模板生成功能代码的过程类似,实施时相互参见即可,本技术不再赘述。
[0105]
当功能覆盖率代码中的参数需要调整时,工程师只需在检视对应的表单,并输入调整的参数,即可调整后的表单重新生成功能覆盖率代码。
[0106]
在一实施例中,如图4所示,在步骤s102,从所述表单中提取多个参数字段及其对应的参数值之后,还包括:
[0107]
步骤s104,根据各参数字段对应的参数定义对参数值进行合法性校验。
[0108]
具体地,合法性校验用于检验各参数值是否符合设计规范,避免生成的功能代码出错。合法性校验的校验规则包括但不限于:
[0109]
(1)各参数值的取值符合其对应参数字段的取值要求;
[0110]
(2)步骤s102中生成的各行对应的covergroup对象的对象名互不重复;
[0111]
(3)对于bins value、ignore bins、illegal bins这三个参数字段,其参数值均不得大于width参数字段定义的值的2的幂次方减一。
[0112]
以上仅为本技术提供的几种校验规则的示例,实际应用中,可以包含更多或更少的校验规则,本技术不以此为限。
[0113]
本技术的功能覆盖率代码的自动生成方法,通过通用的表单模板记录和获取生成功能代码所用的设计参数,基于这些设计参数和预设的代码模板自动生成功能覆盖率代码。相比于传统的由工程师手动撰写功能代码的方式,本技术大大节约了人力成本,减少了
重复劳动;同时,设计参数在统一的表单模板中记录,格式一致,方便不同工程师进行检视和维护。
[0114]
基于同一发明构思,本技术实施例还提供了功能覆盖率代码的自动生成装置,可以用于实现上述实施例所描述的方法,如下面的实施例所述。由于功能覆盖率代码的自动生成装置解决问题的原理与功能覆盖率代码的自动生成方法相似,因此功能覆盖率代码的自动生成装置的实施可以参见功能覆盖率代码的自动生成方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0115]
第二方面,本技术提供一种功能覆盖率代码的自动生成装置,如图5所示,该装置包括:
[0116]
表单获取模块501,用于获取存储有功能覆盖率测试参数的表单;
[0117]
参数提取模块502,用于从所述表单中提取多个参数字段及其对应的参数值;
[0118]
代码生成模块503,用于根据各所述参数字段及其对应的参数值以及预设的代码模板生成功能覆盖率代码。
[0119]
在一实施例中,如图6所示,所述表单获取模块501包括:
[0120]
读取路径获取单元5011,用于根据表单的名称以及预设的表单与路径的映射关系表得到读取路径;
[0121]
表单读取单元5012,用于根据所述读取路径获取所述表单。
[0122]
在一实施例中,如图7所示,所述代码生成模块503包括:
[0123]
可编辑标识识别单元5031,用于从各所述代码模板识别可编辑标识;
[0124]
参数字段确定单元5032,用于根据所述可编辑标识及可编辑标识与参数字段的映射关系确定各代码模板对应的参数字段;
[0125]
参数值导入单元5033,用于将确定的参数字段对应的参数值分别导入对应的代码模板中,得到多个子代码;
[0126]
代码组合单元5034,用于将多个子代码进行组合,得到所述功能覆盖率代码。
[0127]
在一实施例中,如图8所示,所述功能覆盖率代码的自动生成装置还包括合法性校验模块504,用于:
[0128]
在所述从所述表单中提取多个参数字段及其对应的参数值之后,根据各参数字段对应的参数定义对参数值进行合法性校验。
[0129]
本技术的功能覆盖率代码的自动生成装置,通过通用的表单模板记录和获取生成功能代码所用的设计参数,基于这些设计参数和预设的代码模板自动生成功能覆盖率代码。相比于传统的由工程师手动撰写功能代码的方式,本技术大大节约了人力成本,减少了重复劳动;同时,设计参数在统一的表单模板中记录,格式一致,方便不同工程师进行检视和维护。
[0130]
在一实施例中,本技术还提供一种计算机设备,参见图9,所述电子设备100具体包括:
[0131]
中央处理器(processor)110、存储器(memory)120、通信模块(communications)130、输入单元140、输出单元150以及电源160。
[0132]
其中,所述存储器(memory)120、通信模块(communications)130、输入单元140、输出单元150以及电源160分别与所述中央处理器(processor)110相连接。所述存储器120中存储有计算机程序,所述中央处理器110可调用所述计算机程序,所述中央处理器110执行所述计算机程序时实现上述实施例中的功能覆盖率代码的自动生成方法中的全部步骤。
[0133]
在一实施例中,本技术的实施例还提供一种计算机可读存储介质,用于存储计算机程序,所述计算机程序可被处理器执行。所述计算机程序被处理器执行时实现本发明所提供的任一功能覆盖率代码的自动生成方法。
[0134]
在一实施例中,本发明的实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述实施例提供的任一功能覆盖率代码的自动生成方法。
[0135]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0136]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0137]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0138]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0139]
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。