前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >$test$plusargs(),$value$plusargs()怎么用?有什么坑?

$test$plusargs(),$value$plusargs()怎么用?有什么坑?

作者头像
IC验证
发布2020-06-30 13:58:33
2.7K0
发布2020-06-30 13:58:33
举报
文章被收录于专栏:杰瑞IC验证杰瑞IC验证

“如果验证平台是一杯奶茶,他们就是喝奶茶的那根吸管”

来源| 杰瑞IC验证(ID:Jerry_IC) |原创

作者| Jerry Ren

各位朋友,在SystemVerilog中有两个函数作用很大,他们是:

代码语言:javascript
复制
testplusargs ( string )
valueplusargs ( user_string, variable )

如果验证平台是人类的宠物,他们就是人与宠物之间沟通的钥匙。

如果验证平台是一座雄伟的城堡,他们就是城堡内部与外界联系的电话。

如果验证平台是一杯奶茶,他们就是喝奶茶的那根吸管!!

太感动了,这首诗太美了!

01

怎么用?

相信从这首诗中大家已经很清楚的知道这两个函数什么作用了!没错!

我们在仿真运行过程中可以“+”很多的命令字符串,而这两个函数就是与这些命令字符串里应外合,从而改变验证平台的!

上代码!

if( testplusargs ( “JERRY_IS_COOL”) ) $display(“jerry is so cool !! ”); else $display(“jerry is handsome !! ”); int jerry_face_score; if( valueplusargs ( “JERRY_FACE_SCORE= %0d”, jerry_face_score ) ) $display(“^_^ jerry_face_score=%0d ^_^”, jerry_face_score );

我们在平台中加入如上的代码,然后在仿真运行的命令中加入如下命令:

代码语言:javascript
复制
+JERRY_IS_COOL
+JERRY_FACE_SCORE=100

最后平台会打印出什么呢?是的,会打印出如下的字符出来:

代码语言:javascript
复制
jerry is so cool !!
^_^ jerry_face_score=100 ^_^

我们来分析分析哈,稍微观察不难发现:

testplusargs (“JERRY_IS_COOL”) 这个函数只有一个参数,是一个字符串!只要外面传了这个字符串,那这个函数就会反回1,否则返回0. 如上代码,当我们传“JERRY_IS_COOL”时,就返回了1.

valueplusargs ( “JERRY_FACE_SCORE= %0d”, jerry_face_score ),这个就更厉害了,两个参数,前面的参数是一个传数据的格式,后面是要改变的变量!我们传+JERRY_FACE_SCORE=100

结合这个函数是什么意思呢?意思等价于:jerry_face_score=100;

所以通过上面的分析,各位初学者应该明白这两个函数多牛逼了吧?

testplusargs()意味着我们可以通过外面的标记改平台的逻辑,比如我想给某段代码加个使能,那有了这个就太方便了!

if( testplusargs (“ENABLE”) )

begin

……

end

外面不传这个ENABLE,它就不使能!

valueplusargs ( ) 就更厉害了,相当于想传什么值就传什么值啊!你可以在外面给值!当然这个函数不一定给值,还可以给字符串!传字符串时,我们可以在sequence的重载等处,用处非常广哦~

02

有什么坑?

各位观众!Jerry要强调的重点来啦!!

大家看这样一段代码!!

代码语言:javascript
复制
if( testplusargs ( “JERRY”)   )
       $display(“JERRY”);
if( testplusargs ( “JERRY1”)   )
       $display(“JERRY1”);
if( testplusargs ( “JERRY11”)   )
       $display(“JERRY11”);
if( testplusargs ( “JERRY111”)   )
       $display(“JERRY111”);
if( testplusargs ( “JERRY_IS_COOL”)   )
      $display(“JERRY_IS_COOL”);

如果外面传

+JERRY11

请问会打印哪句话???

有人说,这个不是很明显吗?肯定是打印这句:

JERRY11

注意注意!错了!这就是坑啊!

这句话其实会打印:

代码语言:javascript
复制
JERRY
JERRY1
JERRY11

这三句!!

为什么强调这个,你用这个功能用的很爽的时候突然发现逻辑和想象中的不一样了!也许就是这种坑!

为什么会打印这三句呢?

testplusargs()其实是由括号里往外匹配,只要外面传的命令有相同的字符串,就算匹配成功!这个字符串可能是外面命令完整的字符串,也可能是外传字符串的子串!!

所以在此,Jerry建议,就不要打擦边球了!用这个传参数的时候尽量不要产生这种问题,可以多加一些下划线后缀什么的嘛~

哈哈,好了,今天Jerry就和大家聊的这里,你会了吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杰瑞IC验证 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档