Verilog中的条件执行:$test$plusargs和$value$plusargs

$test$plusargs和$value$plusargs
$test$plusargs和$value$plusargs作为进行Verilog和SystemVerilog仿真运行时调用的系统函数,可以在仿真命令直接进行赋值,并且不局限于不同仿真器对于参数在仿真命令中定义格式不同的限制,也避免了调换参数带来的频繁编译等问题。使用这两条函数对于搭建测试平台有一定的便利,同时对于理解Factory中用例是如何传递进Proxy Class有一定的帮助。

直接点说就是将执行的判断条件放在命令行中决定,由用户在启动仿真时输入。
if ($test$plusargs("DISPLAY_VAR")) begin
.....
end

if($value$plusargs("test_var = %d", test_var) begin
.....
end  
第一个if语句的表达式中使用了$test$plusargs作为判断条件,如果想要执行后面的begin块,就得在启动仿真的运行命令中加入指定的参数即DISPLAY_VAR,这样仿真在运行时,$test$plusargs会搜索参数字符,如果找到了匹配的选项,就会返回1,否则返回0。
run-options+DISPLAY_VAR…
由上面的描述可以看出,$test$plusargs的功能和`ifdef机制很相似,很多仿真工具也可以在仿真运行命令后面加上宏定义从而打开ifdef。

$value$plusargs的功能更为高级一些,如果想要第二个if语句后的begin块执行,需要在仿真运行命令后加入test_var = *,它一方面既可以实现$test$plusargs的功能,另一方面还同时给仿真变量test_var赋值。
run-options+test_var=10…
详细描述参考
http://www.cnblogs.com/nanoty/p/4355245.html


$test\pulsargs和$value$pusargs用来在编译(compile)之后再传递参数
传递参数的时刻应该是执行可执行文件simv文件之后,详见
https://blog.csdn.net/zxb3558493/article/details/46447471
但是如果想在编译的时候就传递plusarg,需要在编译的对象文件之前加上-R指令:
http://www.project-veripage.com/plusarg.php

原文链接:https://blog.csdn.net/weixin_43249032/article/details/84034172
发布了67 篇原创文章 · 获赞 7 · 访问量 4931

猜你喜欢

转载自blog.csdn.net/qq_43042339/article/details/104295262