首页> 中国专利> 一种利用脚本生成随机测试例方法和系统

一种利用脚本生成随机测试例方法和系统

摘要

本发明提供了一种利用脚本生成随机测试例方法和系统,所述方法包括:获取寄存器数据表格;所述寄存器数据表格记录的字段包括:寄存器名、读写属性、位域、域名和功能描述;根据用户的设置在寄存器数据表格中添加随机类型字段、随机取值字段、及其字段内容;利用预置的脚本模板解析所述寄存器数据表格,将相应字段中的内容填充到所述脚本模板中,生成相应的测试例。通过本发明,提高了测试的效率以及准确度,缩短芯片的验证周期。

著录项

  • 公开/公告号CN102402430A

    专利类型发明专利

  • 公开/公告日2012-04-04

    原文格式PDF

  • 申请/专利权人 无锡中星微电子有限公司;

    申请/专利号CN201010282714.8

  • 发明设计人 王凤海;

    申请日2010-09-14

  • 分类号G06F9/44(20060101);G06F17/30(20060101);

  • 代理机构11319 北京润泽恒知识产权代理有限公司;

  • 代理人苏培华

  • 地址 214028 江苏省无锡市新区长江路21-1号国家集成电路设计园(创源大厦)610

  • 入库时间 2023-12-18 04:55:43

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-03-09

    授权

    授权

  • 2016-02-17

    著录事项变更 IPC(主分类):G06F9/44 变更前: 变更后: 申请日:20100914

    著录事项变更

  • 2013-08-28

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20100914

    实质审查的生效

  • 2012-04-04

    公开

    公开

说明书

技术领域

本发明涉及测试技术领域,特别是涉及一种利用脚本生成随机测试例方 法和系统。

背景技术

目前系统级芯片SoC(System on Chip)设计越来越复杂,为了对芯片 进行充分的验证,需要对芯片中的各个模块进行随机测试,以实现模块的功 能验证。一个模块通常对应一个寄存器数据表格,保存在存储介质中,所述 表格中记录了该模块中与多个寄存器相对应的测试的参数信息。以往的随机 测试例都是通过验证人员分析设计人员的设计文档,并从寄存器数据表格中 提取出随机测试点,然后用System Verilog语言进行编程得到的。

随着模块的复杂度提高,随机测试点也会增加,如果通过人为编写 System Verilog代码来生成随机测试例,会增加测试人员编写的代码量,浪 费较多的时间,造成测试进度缓慢;并且,通过人为的手动编写测试代码, 比较容易出错,影响测试的准确性。

总之,需要本领域技术人员迫切解决的一个技术问题就是:如何能够提 供一种随机测试例的生成方法,提高测试的效率以及准确度,缩短芯片的验 证周期。

发明内容

本发明所要解决的技术问题是提供一种利用脚本生成随机测试例方法 和系统,提高测试的效率以及准确度,缩短芯片验证的周期。

为了解决上述问题,本发明公开了一种利用脚本生成随机测试例方法, 包括:

获取寄存器数据表格;所述寄存器数据表格记录的字段包括:寄存器名、 读写属性、位域、域名和功能描述;

根据用户的设置在寄存器数据表格中添加随机类型字段、随机取值字 段、及其字段内容;

利用预置的脚本模板解析所述寄存器数据表格,将相应字段中的内容填 充到所述脚本模板中,生成相应的测试例。

优选的,所述利用预置的脚本模板解析所述寄存器数据表格,包括:

利用脚本模板对所述寄存器表进行逐行扫描解析;

当该行的随机类型字段不为空时,读取该行中相应字段的内容作为脚本 模板的填充变量。

优选的,通过函数调用的方式将相应字段中的内容填充到所述脚本模板 中。

优选的,所述随机类型字段的内容包括两类:随机数据和随机配置。

进一步,当随机类型字段的内容为随机数据时,生成的测试例为激励文 件;当随机类型字段的内容为随机配置时,生成的测试例为配置文件。

此外,本发明还公开了一种利用脚本生成随机测试例系统,包括:

表格获取单元,用于获取寄存器数据表格;所述寄存器数据表格记录的 字段包括:寄存器名、读写属性、位域、域名和功能描述;

字段添加单元,用于根据用户的设置在寄存器数据表格中添加随机类型 字段、随机取值字段、及其字段内容;

测试例生成单元,用于利用预置的脚本模板解析所述寄存器数据表格, 将相应字段中的内容填充到所述脚本模板中,生成相应的测试例。

优选的,所述利测试例生成单元包括:

扫描解析单元,用于利用脚本模板对所述寄存器表进行逐行扫描解析;

变量读取单元,用于当该行的随机类型字段不为空时,读取该行中相应 字段的内容作为脚本模板的填充变量。

优选的,所述测试例生成单元通过函数调用的方式将相应字段中的内容 填充到所述脚本模板中。

优选的,所述随机类型字段的内容包括两类:随机数据和随机配置。

进一步,当随机类型字段的内容为随机数据时,所述测试例生成单元生 成的测试例为激励文件;当随机类型字段的内容为随机配置时,所述测试例 生成单元生成的测试例为配置文件。

与现有技术相比,本发明具有以下优点:

本发明根据用户的设置在寄存器数据表格中添加随机类型字段、随机取 值字段、及其字段内容,利用预置的脚本模板解析所述寄存器数据表格,将 相应字段中的内容填充到所述脚本模板中,生成相应的测试例。通过本发明, 无需测试人员手动编写测试例,即可自动的生成测试例,大大降低了测试人 员的工作量,提高了测试效率,加快了模块验证的整体进度,缩短了芯片验 证周期。

此外,由于生成的测试例的信息来源于寄存器数据表格,与所述表格中 的内容严格同步,相比于用户手动编写,提高了测试的准确度。

附图说明

图1是本发明一种利用脚本生成随机测试例方法实施例的流程图;

图2是为本发明方法实施例所述的一种寄存器数据表格的示意图;

图3是本发明一种利用脚本生成随机测试例系统实施例的结构图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图 和具体实施方式对本发明作进一步详细的说明。

本发明的核心构思之一在于,在寄存器数据表格中加入小量约束,即随 机类型字段内容、随机取值字段内容,通过脚本模板解析寄存器数据表格, 则能够自动的生成与该测试模块相对应的测试例。

参照图1,示出了本发明一种利用脚本生成随机测试例方法实施例的流 程图,包括:

步骤101,获取寄存器数据表格;所述寄存器数据表格记录的字段包括: 寄存器名、读写属性、位域、域名和功能描述;

针对芯片中的每一个模块对应有一个寄存器数据表格,该表格保存在存 储介质中。寄存器数据表格中记录有不同的字段。如图2所示,为本发明一 种寄存器数据表格的示意图。

其中,AddrName字段对应寄存器名,该表格中记录有“CTRL”、 “COMMAND”、“TX”寄存器的属性信息;Addrbute字段对应读写属性, 如该表中的记录所示,“WO”表示只写,“RW”表示可读可写;SubBits字 段对应位域,RegName字段对应域名,例如EN占据CTRL寄存器的第27 位);Description字段对应功能描述,此外,该表格中还记录有DefaultValue 字段,对应默认值。可以理解的是,一个寄存器对应有多个域名及其位域、 功能描述等。

需要说明的是,寄存器数据表格中记录有大量的信息,本发明实施例仅 给出了其中一小部分,以进行举例说明。

步骤102,根据用户的设置在寄存器数据表格中添加随机类型字段、随 机取值字段、及其字段内容;

为了能够自动的生成随机测试例,需要用户(如验证工程师)预先在该 寄存器数据表格进行相应的配置,加入随机测试的约束。

本发明实施例的核心是利用脚本模板解析设计模块的寄存器电子数据 表格。为了方便脚本解析,根据用户的设置在寄存器数据表格中添加随机测 试属性的两个字段,包括:随机类型(Rand type)字段和随机取值(R|and value)字段。其中,所述随机类型字段的内容包括两类:随机数据(data rand) 和随机配置(cfg rand),随机取值即用户添加的测试约束值。

如图2所示,根据用户的设置,对域“SCL5F”添加随机类型为“cfg rand”, 对应的随机取值为[24’h07,24’h10];对域“TX”添加随机类型为“data rand”, 对应的随机取值为[8’h0:8’h40]。

步骤103,利用预置的脚本模板解析所述寄存器数据表格,将相应字段 中的内容填充到所述脚本模板中,生成相应的测试例。

在本发明实施例中,编制所述脚本模板时,设置有多个待复制或填充的 变量,通过解析寄存器数据表格,查找到相应字段的内容进行填充,形成一 个完整的测试例。所述的脚本模板可以是perl脚本语言,则通过perl语言进 行编程,解析寄存器数据表中关心的各项,然后生成System Verilog文件, 作为一个测试例。

例如,预置的脚本模板为:

***:             //文件名

Class***;       //定义类名

Rand bit SubBits AddrName_RegName;      //声明一个属性,为 随机比特(rand bit)类型

ConstraintAddrName_RegName_valid         //定义一个约束快

{

AddrName_RegName inside{Rand value};    //对约束块进行约束

}

Endclass            //类定义结束

其中,斜体字所填写(或代替)的即为寄存器数据表格中对应字段的内 容。需要说明的是,通过解析寄存器数据表格获得的字段内容,不完全包括 所述表格中所有的字段内容,而是根据预先编辑的脚本模板,解析相关联的 部分字段,如本发明实施例中,只解析AddrName、RegName、SubBits、Rand value字段。

在本发明的一个优选实施例中,所述利用预置的脚本模板解析所述寄存 器数据表格,包括:利用脚本模板对所述寄存器表进行逐行扫描解析;当该 行的随机类型字段不为空时,读取该行中相应字段的内容作为脚本模板的填 充变量。

具体的,perl脚本模板针对寄存器数据表格一行一行地进行扫描,当其 解析到Rand type字段的内容为空时,随机属性为空,也就是无效,则这行 的数据是脚本模板不关心的,对该行不作任何处理。但是,如果Rand type 字段的内容非空时,则需要将该行中它关心的信息读取出来。

在本发明的优选实施例中,通过函数调用的方式将相应字段中的内容填 充到所述脚本模板中。

例如,当扫描到“CTRL”寄存器的第五行时,Rand type字段的内容非 空,读取寄存器数据表格中“scl5f这个字符串,将其作为脚本模板的填充 变量。那么可以通过下面的代码自动插入到模板中:

AddrName_RegNam=“scl5f”;//这里是将scl5f赋给一个变 量,变量取值从寄存器数据表格表中解析出来。

脚本模板中的某句代码为:

Constraint AddrName_RegName_valid;

则通过类似printf的函数将这些内容作为所述脚本模板的填充变量,输 出到测试例文件里即可。如:

Printf“Constraint AddrName_RegName_valid”;

这样就生成出了下面一句代码:

Constraint ctrl_scl5f_valid

进一步的,当随机类型字段的内容为随机数据时,生成的测试例为激励 文件,也即脚本模板将标有此类型的寄存器变量解析为随机数据,存放在激 励文件中,该激励文件用于在测试时产生随机的测试数据。当随机类型字段 的内容为随机配置时,生成的测试例为配置文件,也即脚本模板将标有此类 型的寄存器变量解析为随机配置,存放在配置文件中,该配置文件用于在测 试时产生随机的配置数据。脚本模板解析随机取值字段,为随机数据和随机 配置加入约束,使得随机数据和随机配置的数据取值在验证工程师的需求 内。

在本发明实施例中,根据解析图2所示的寄存器数据表格,SCL5F的 Rand type字段内容为“cfg rand”,不为空,将相关字段的内容填充到脚本模 板中,根据“cfg rand”生成的测试例为i2c_cfg.sv配置文件,如下所示:

I2c_cfg.sv:        //文件名为i2c_cfg.sv的配置文件

Class i2c_cfg;      //定义一个名为i2c_cfg的类

Rand bit[23:0]ctrl_scl5f;   //声明一个名为ctrl_csl5f的属性,为随机 比特类型,位宽是24位(23至0位)

Constraint ctrl_scl5f_valid       //定义一个名为ctrl_scl5f_valid的约束块

{                                  //约束块的起始

Ctrl_scl5finside{24’h07,24’h10};    //将ctrl_scl5f这个属 性约束为16进制的7或者10

}                   //约束块的结束

Endclass            //类定义结束

进一步遍历每一行,TX的Rand type字段内容为“data rand”,不为空, 将相关字段的内容填充到脚本模板中,根据“data rand”生成的测试例为 i2c_trans.sv激励文件,如下所示:

I2c_trans.sv:                      //文件名为i2c_trans.sv的配置文件

Class i2c_trans extends vmm_data;  //定义一个名为i2c_trans的类,其继 承自vmm_data类

Rand bit[7:0]tx_tx;             //声明一个名为tx_tx的属性,它是随 机比特类型,位宽是8位(7至0位)

Constraint tx_tx_valid           //定义一个名为tx_tx_valid的约束块

{                               //约束块的起始

Tx_tx inside{[8’h0:8’h40]};  //将tx_tx这个属性约束为16 进制的0至40之间的任意值

}                          //约束块的结束

Endclass                  //类定义结束

通过本发明实施例,脚本模板通过解析寄存器数据表格自动的生成相应 的测试例,无需测试人员手动编写测试例,大大降低了测试人员的工作量, 提高了测试效率,加快了模块验证的整体进度,缩短了芯片验证周期。特别 是当设计模块的寄存器很多时,此方法的优势将体现得更淋漓尽致,所有代 码通过脚本自动生成,节省了验证工程师编程的时间。此外,由于生成的测 试例的内容来源于寄存器数据表格,与表格严格同步,相比于用户手动编写, 提高了测试的准确度。

参照图3,示出了本发明一种利用脚本生成随机测试例系统实施例的结 构图,包括:

表格获取单元301,用于获取寄存器数据表格;所述寄存器数据表格记 录的字段包括:寄存器名、读写属性、位域、域名和功能描述;

字段添加单元302,用于根据用户的设置在寄存器数据表格中添加随机 类型字段、随机取值字段、及其字段内容;

测试例生成单元303,用于利用预置的脚本模板解析所述寄存器数据表 格,将相应字段中的内容填充到所述脚本模板中,生成相应的测试例。

在本发明的一个优选实施例中,如图3所示,所述利测试例生成单元303 包括:

扫描解析子单元3031,用于利用脚本模板对所述寄存器表进行逐行扫描 解析;

变量读取子单元3032,用于当该行的随机类型字段不为空时,读取该行 中相应字段的内容作为脚本模板的填充变量。

具体的,脚本模板针对寄存器数据表格一行一行地进行扫描,当其解析 到随机类型字段的内容为空时,则这行的数据是脚本模板不关心的,对该行 不作任何处理。但是,如果随机类型字段的内容非空时,则需要将该行中它 关心的信息读取出来。

进一步,所述测试例生成单元通过函数调用的方式将相应字段中的内容 填充到所述脚本模板中。

在本发明的一个优选实施例中,所述随机类型字段的内容包括两类:随 机数据和随机配置。

进一步,当随机类型字段的内容为随机数据时,所述测试例生成单元生 成的测试例为激励文件,也即脚本模板将标有此类型的寄存器变量解析为随 机数据,存放在激励文件中;当随机类型字段的内容为随机配置时,所述测 试例生成单元生成的测试例为配置文件,也即脚本模板将标有此类型的寄存 器变量解析为随机配置,存放在配置文件中。脚本模板解析随机取值字段, 为随机数据和随机配置加入约束,使得随机数据和随机配置的数据取值在验 证工程师的需求内。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明 的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见 即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比 较简单,相关之处参见方法实施例的部分说明即可。

以上对本发明所提供的一种利用脚本生成随机测试例方法和系统,进行 了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐 述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时, 对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范 围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号