覆盖率收集代码的重用方法、计算机可读介质
技术领域
本发明涉及芯片验证技术领域,特别涉及一种覆盖率收集代码的重用方法及计算机可读介质。
背景技术
如图1所示,是对一款芯片的功能逻辑进行抽象后的示例图。
各个端口信号如下:
op:运算指令,包括加法ADD,减法SUB,乘法MUL,除法DIV运算;
A:运算操作数,使用寄存器组来运算和寄存操作数;B:运算操作数,使用寄存器组来运算和寄存操作数;rslt:运算结果,使用寄存器组来运算和寄存结果。
通常为了面向不同的市场需要,会制定不同的产品策略,并进行相应的产品规划,规划出多种不同性能的同类型系列芯片,那么对该芯片支持的性能参数可以做如下抽象:
support_mode:支持的工作模式,包括HIGH_MODE,MEDIUM_MODE,LOW_MODE,性能越高,其支持的模式就越多;
support_op:支持的运算指令,包括ADD,SUB,MUL,DIV性能越高,其支持的运算指令种类就越多,而这取决于其支持的工作模式support_mode;
support_reg:支持的寄存器组,包括寄存器R0~R7,性能越高,其对运算指令进行运算时,运算的操作数和运算后的结果使用的寄存器就越多,那么运算速度就越快,而这同样取决于其支持的工作模式support_mode。
那么简单对其运算指令进行抽象,并在验证平台中用枚举型变量来表示。具体包括:
mode:工作模式;
op:运算指令;
A_reg:运算操作数A所使用的寄存器组;
B_reg:运算操作数B所使用的寄存器组;
rslt_reg:运算结果rslt所使用的寄存器组。
通常需要编写覆盖率组件coverage来对该芯片的一些重要覆盖点做覆盖率收集统计,该组件获取来自monitor监测到的事务数据,可以通过订阅者模式来实现,也可以通过TLM通信端口连接来实现。
该覆盖率组件包含的覆盖点一般至少包括:
mode:收集覆盖到所支持的工作模式;
op:收集覆盖到所支持的运算指令;
A_reg:收集覆盖到的运算操作数A所使用的寄存器组;
B_reg:收集覆盖到的运算操作数B所使用的寄存器组;
rslt_reg:收集覆盖到的运算结果rslt所使用的寄存器组。
一些交叉覆盖点,比如运算指令和运算操作数A所使用的寄存器组等其他一些corner覆盖点。
前面说为了面向不同的市场需要,会制定不同的产品策略,并进行相应的产品规划,规划出多种不同性能的同类型系列芯片,因此为了对多款不同性能的同类型芯片进行验证,那么可能就需要维护多套覆盖率收集代码。比如,规划面向中低端市场的同类型芯片不再支持HIGH_MODE工作模式,此时该芯片也就不再支持乘法MUL和除法 DIV的运算指令,同时该芯片的运算速度也会降低,即此时其运算操作数和运算结果不再能使用全部的寄存器组R0~R7,而只能使用寄存器组R0~R3,那么需要重写上述覆盖率收集代码coverage并增加一些ignore_bins来忽略当前不再支持的一些性能特性的覆盖率收集。
对此,虽然仅需增加一些ignore_bins,但是需要对之前的coverage覆盖率收集代码进行完整的复制,同样如果还有其他性能的同类型芯片,那么会存在大量的重复代码,此时需要同时维护多套几乎一样的覆盖率收集代码。另外如果后面需要修改的话,可能需要同步修改多个地方,麻烦且容易遗漏出错。
发明内容
根据本发明实施例,提供了一种覆盖率收集代码的重用方法,包含如下步骤:
创建覆盖仓基类;
根据需要,覆盖仓基类派生覆盖仓子类,覆盖仓子类为需要忽略的覆盖率收集特性,并重载覆盖仓基类的静态方法;
创建覆盖率收集组件基类,用于代码重载;
对覆盖率收集组件基类进行派生,派生为参数化类,该参数化类的参数为覆盖仓子类;
将覆盖仓子类作为参数传入上述参数化的类,获取覆盖率收集参数类;
声明和实例化覆盖率收集组件基类,通过代码重载将覆盖率收集组件基类替换为覆盖率收集参数类。
优选地,初始状态下,覆盖仓基类中不存在需要忽略的覆盖率收集。
优选地,覆盖仓基类和覆盖仓子类中的函数供静态调用。
优选地,覆盖仓基类和覆盖仓子类中的函数通过static关键字实现静态调用。
优选地,需要忽略的不再支持的覆盖率代码派生于覆盖仓基类。
优选地,采用factory机制进行代码重载。
根据本发明又一实施例,提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质,程序代码使处理器运行上述任一项覆盖率收集代码的重用方法。
根据本发明实施例的覆盖率收集代码的重用方法和计算机可读介质,通过将需要忽略的覆盖率收集特性传入参数化的类以实现对覆盖率的代码重用;同时,通过调用覆盖仓子类的静态方法来获得目标需要忽略的覆盖仓ignore_bins。
要理解的是,前面的一般描述和下面的详细描述两者都是示例性的,并 且意图在于提供要求保护的技术的进一步说明。
附图说明
图1为现有技术中对芯片功能逻辑进行抽象后的示例图;
图2为根据本发明实施例覆盖率收集代码的重用方法的流程图;
图3为根据图2的方法原理示意图。
具体实施方式
以下将结合附图,详细描述本发明的优选实施例,对本发明做进一步阐述。
首先,将结合图2~3描述根据本发明实施例的覆盖率收集代码的重用方法,用于不同性能和不同模式的芯片验证,其应用场景很广。
如图2~3所示,本发明实施例的覆盖率收集代码的重用方法,具有如下步骤:
具体地,如图2~3所示,在步骤S1中,创建覆盖仓基类cg_ignore_bins_default,在本实施例中,覆盖仓基类的函数加有关键字static,以方便后续步骤通过::符号进行静态调用。
进一步,初始状态下,是没有ignore_bins的,即不存在需要忽略的不再支持的一些性能特性的覆盖率收集。
具体地,如图2~3所示,在步骤S2中,根据实际项目需要,对覆盖仓基类cg_ignore_bins_default进行派生,派生出覆盖仓子类subclass_cg_ignore_bins_default,覆盖仓子类为需要忽略的覆盖率收集特性,并重载覆盖仓基类的静态方法;在本实施例中,覆盖仓子类的函数同样需要加上static关键字,以方便后面通过::符号进行静态调用。
具体地,如图2~3所示,在步骤S3中,创建覆盖率收集组件基类coverage_base,用于代码重载。在本实施例中,采用factory机制进行代码重载。
具体地,如图2~3所示,在步骤S4中,对覆盖率收集组件基类coverage_base进行派生,派生为参数化类,该参数化类的参数为覆盖仓子类。
具体地,如图2~3所示,在步骤S5中,将覆盖仓子类subclass_cg_ignore_bins_default作为参数传入参数化的类,从而,覆盖率收集组件基类coverage_base的覆盖率收集对象coverage忽略需要忽略的不再支持的覆盖率代码,生成覆盖率收集参数类。在本实施例中,需要忽略的不再支持的覆盖率代码派生于覆盖仓基类cg_ignore_bins_default。
具体地,如图2~3所示,在步骤S6中,声明和实例化覆盖率收集组件基类coverage_base,通过代码重载将覆盖率收集组件基类coverage_base替换为覆盖率收集参数类,从而实现对覆盖率收集代码的重用。在本实施例中,采用factory机制进行代码重载。
如上,在根据本发明实施例的覆盖率收集代码的重用方法中,通过将需要忽略的覆盖率收集特性传入参数化的类以实现对覆盖率的代码重用;同时,通过调用覆盖仓子类的静态方法来获得目标需要忽略的覆盖仓ignore_bins。
以上结合附图2~3描述了根据本发明实施例的覆盖率收集代码的重用方法。进一步地,本发明还可以应用于具有处理器可执行的非易失的程序代码的计算机可读介质。
本发明实施例的具有处理器可执行的非易失的程序代码的计算机可读介质,程序代码使处理器运行上述实施例的覆盖率收集代码的重用方法。
以上,参照图2~3描述了根据本发明实施例的覆盖率收集代码的重用方法和计算机可读介质,通过将需要忽略的覆盖率收集特性传入参数化的类以实现对覆盖率的代码重用;同时,通过调用覆盖仓子类的静态方法来获得目标需要忽略的覆盖仓ignore_bins。
需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包含……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。