$test$plusargs(),$value$plusargs()使用注意,学习笔记
在项目开发中,遇到了一个问题,我们的共用文件中有一个parameter类型的变量,用来定义时钟周期,由于这个文件是通用的时序信号生成文件,所以不建议直接在这里修改这个变量的值。
最直接的办法是,通过宏来定义这个parameter的值,在运行我自己的test的时候,有我自己的宏来控制这个值。
我在想有没有什么办法能够不修改这个文件,而通过编译时在编译指令里加一些东西来修改这个值,一番讨论后,虽然没有找到合适的方法,不过我学习了一下$test$plusargs(),$value$plusargs()这两个Verilog的系统函数。
关于这两个函数,网上的资料还是蛮多的,这两个函数的用法也比较简单,但是有一个细节需要我们注意,如下代码:
if( $test$plusargs ( “JOB”) )
$display(“JOB”);
if( $test$plusargs ( “JOB1”) )
$display(“JOB1”);
if( $test$plusargs ( “JOB11”) )
$display(“JOB11”);
if( $test$plusargs ( “JOB111”) )
$display(“JOB111”);
那么我们在编译时,如果通过terminal传入+JOB11,会打印出什么?
理想上,打印出的应该是JOB11,
但是事实是,打印出来的是
JOB
JOB1
JOB11
这样我们能够了解,$test$plusargs()的匹配机制不是完全字符匹配,而是根据括号内的内容 ,在编译指令里寻找,只要有匹配到即可,所以我们在使用的时候,要尽量避免这种情况出现。
推荐看这两篇文章
https://baijiahao.baidu.com/s?id=1665681948769998524&wfr=spider&for=pc