芯片验证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差异来执行不同的行为,还有很多其它方式,千变万化,大家可以自己想想,以上只是一个简单例子。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值