当前位置:   article > 正文

芯片验证Systemverilog用例可重用方法_芯片验证测试用例怎么丢回归

芯片验证测试用例怎么丢回归

对于芯片验证来说,验证平台的可重用和验证效率至关重要,在早期写测试用例时就要想好如何可以复用,来提升效率。本文讲下在芯片验证中,如何采用SystemVerilog语法中的`define生成大量类似用例。一方面可以让用例简洁明了,方便维护,另一方面可以快捷生成各种用例。
`define经常用来代替某些复杂的文本内容或数字,比如:1、`define D(x,y) initial $display("start", x , y, "end");2、`define test_num 1414;。

但`define还有更强大的功能,就是从参数构造字符串,采用``来达到这一效果。如:

`define append(f) f``_master     =》  `append(clock)   =》  clock_master

在SystemVerilog中,双引号内的文本默认都处理为字符串,即便define(x)  "the x",这种情况传入任何x的值都没有用,最终替换的结果肯定是"the x"。但如果在双引号"前面加上撇号`就不一样了,如define(x) `"the x`",这是假如为define(man),那么最终替换的结果就为"the man"了。

在`define中,如何后面的语句太长了,想要分成多行来写,可以在每一行的结尾处使用反斜杠\来结尾,切记,必须是最后一个。如果在define后面的内容想用反斜杠\,那么可以在反斜杠前加上撇号`\就行了。

基于上述`define的功能,我们在写class的时候,可以留一些后门,然后用case等方法,可以改某些变量的值,从而达到不同的sequences和用例等效果,以下举个例子:

定义一个基类class:

`define seq_gen(sequence_name, conditions);  \

string cond = conditions;\

class sequence_name extend uvm_sequence\

uvm_object_utils(sequence_name);\

function new(string name=`"sequence_name`")\

    super.new(name);\

endfunction\

case(cond)\

     zhao: beign...end\

    qian:  begin...end\

    sun:   begin...end\

    :li:      begin..end\

    default:...\

endcase\

其它语句\

endclass

有了以上的define,我们可以如下来使用:

`define(zhao_seq, zhao)

`define(qian_seq, qian)

`define(sun_seq, sun)

`define(li_seq, li)

通过这个可以看出,我们可以很方便的构造出四个sequence,每个sequence的功能不同点可以在case里体现,从而让用例差异化。当然也可以采用不同的方法,比如用string.match(stings)这个SystemVerilog自带的字符串匹配函数,识别要生成的seq_name差异来执行不同的行为,还有很多其它方式,千变万化,大家可以自己想想,以上只是一个简单例子。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/603142
推荐阅读
  

闽ICP备14008679号