首页 > 其他分享 >IC验证中$test$plusargs(),$value$plusargs()怎么用?有什么坑?

IC验证中$test$plusargs(),$value$plusargs()怎么用?有什么坑?

时间:2024-01-19 18:45:15浏览次数:26  
标签:jerry value JERRY 字符串 plusargs test display

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

$test$plusargs ( string )

$value$plusargs ( user_string, variable )

 

01 怎么用?

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

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

上代码!

 

if( $test$plusargs ( “JERRY_IS_COOL”) )

$display(“jerry is so cool !! ”);

else

$display(“jerry is handsome !! ”);

int jerry_face_score;

if( $value$plusargs ( “JERRY_FACE_SCORE= %0d”, jerry_face_score ) )

$display(“^_^ jerry_face_score=%0d ^_^”, jerry_face_score );

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

 

+JERRY_IS_COOL

+JERRY_FACE_SCORE=100

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

 

jerry is so cool !!

^_^ jerry_face_score=100 ^_^

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

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

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

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

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

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

if( $test$plusargs (“ENABLE”) )

begin

……

end

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

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

02 有什么坑?

大家看这样一段代码!!

 

if( $test$plusargs ( “JERRY”) )

$display(“JERRY”);

if( $test$plusargs ( “JERRY1”) )

$display(“JERRY1”);

if( $test$plusargs ( “JERRY11”) )

$display(“JERRY11”);

if( $test$plusargs ( “JERRY111”) )

$display(“JERRY111”);

if( $test$plusargs ( “JERRY_IS_COOL”) )

$display(“JERRY_IS_COOL”);

如果外面传

+JERRY11

请问会打印哪句话???

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

JERRY11

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

这句话其实会打印这三句:

JERRY

JERRY1

JERRY11

 

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

为什么会打印这三句呢?

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

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

 

 

 

标签:jerry,value,JERRY,字符串,plusargs,test,display
From: https://www.cnblogs.com/NoviceVerifer/p/17975352

相关文章

  • Contest3376 - 2024寒假集训-排位赛竞赛(一)
    A:幂位和高精度。用高精度加法或乘法算出\(2^{1000}\),再将各位累加即为答案。#include<bits/stdc++.h>usingnamespacestd;#definecctieios::sync_with_stdio(0);cin.tie(0);cout.tie(0)stringAP_add(stringA,stringB)//高精度加法{intlena=A.size()......
  • 【测试自动化覆盖率】记录统计自动化的工具testrail 如何实现自动统计覆盖率
        点击编辑来到这个页面 点击自己想要统计的testplan里面的用例选择selectcases   先选择右边的过滤所有Automated 为yes的tag,然后在底下点击确定 在左边呈现的就是出现的  取消不要的用例  ......
  • AtCoder Beginner Contest 335
    A-2023(abc335A)题目大意给定一个字符串,将最后一位改成4。解题思路模拟即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);strings;......
  • test
    <!--4.br,换行,p标签一般表示一段连续的文字,p内的换行通过br实现,并不成对出现--><p>你觉得<br/>你能<br/>杀!死!我?!</p><!--5.hr:生成一条水平线,主要起装饰作用。单标签,最好闭合(加上/)--><hr/><hrwidth="80%"align="center"color="red"height......
  • The 2021 Sichuan Provincial Collegiate Programming Contest
    题目链接:The2021SichuanProvincialCollegiateProgrammingContestA.Chuanpai题意:定义每一张川牌包含两个数字x,y,并且1<=x<= y<=6,求牌面上数字之和为n的牌种类解题思路:签到,预处理枚举即可查看代码map<int,int>mp;voidinit(){ for(inti=1;i<=6;i......
  • npm ERR! code ENOENT npm ERR! syscall open npm ERR! path C:\Users\shuzi\Des
    打开一个新的项目,因为当前项目文件夹下没有npm,"dev":"npmrunstart:dev",所以所以没有展示对应的运行图,如下图: 打开一个新的前端项目,执行npminstall,报错如图:WindowsPowerShell版权所有(C)MicrosoftCorporation。保留所有权利。安装最新的PowerShell,了解新功能和改进......
  • 开发遇到的问题总结---mysql建表报SQL 错误 [1067] [42000]: Invalid default value f
    报错内容:SQL错误[1067][42000]:Invaliddefaultvaluefor'begin_time'sql语句:CREATETABLE`tb_seckill_voucher`(`voucher_id`bigint(20)UNSIGNEDNOTNULLCOMMENT'关联的优惠券的id',`stock`int(8)NOTNULLCOMMENT'库存',`creat......
  • 【更新公告】Airtest更新至1.3.3版本
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途1.前言本次更新为Airtest、Poco库更新,Airtest版本提升至1.3.3版本,Poco版本提升至1.0.94版本,主要是Airtest新增点击和滑动的相对坐标支持,Poco修复了1.0.93运行......
  • 记录 | conda报错:conda json.decoder.JSONDecodeError: Expecting value: line 1 colu
    condacreate的时候报错:condajson.decoder.JSONDecodeError:Expectingvalue:line1column1(char0)解决办法:condaclean-i......
  • 分层测试(Layered Testing Approach)
    提纲为什么要做分层测试怎么做分层测试分层测试的好处为什么要做分层测试从软件工程的角度,结合软件开发的V模型、MVC架构、测试金字塔,综合起来便于理解1.借鉴与软件开发的V模型从V模型的底部往右上方向,先做单元测试,再做集成测试一直到最后的验收测试。  2.来源于MVC架构......