做二手车网站需要什么手续,大连网站开发招聘,青岛的互联网公司排名,三网合一网站建设#学习记录#
目录
Abstract
1 使用宏定义的条件编译
2 $test$plusargs
3 $value$plusargs
参考文献 Abstract 我们在进行verilog仿真时#xff0c;经常喜欢采用宏定义#xff0c;来做条件判断#xff0c;但是通过宏定义做条件判断的这种方法#xff0c;存在很大的弊端…#学习记录#
目录
Abstract
1 使用宏定义的条件编译
2 $test$plusargs
3 $value$plusargs
参考文献 Abstract 我们在进行verilog仿真时经常喜欢采用宏定义来做条件判断但是通过宏定义做条件判断的这种方法存在很大的弊端就是条件改变的时候需要重新编译这样会导致在项目后期进行回归测试和后仿的时候很多时间都浪费在重复编译上面效率非常低下。 $test$plusargs和$value$plusargs作为进行Verilog和SystemVerilog仿真运行时调用的系统函数可以在仿真命令中直接通过进行赋值的方式将参数传递进入到设计中并且不局限于不同仿真器对于参数在仿真命令中定义格式不同的限制也避免了调换参数带来的频繁编译等问题。
1 使用宏定义的条件编译
initial
beginifdef dump_fsdb$dumpfile(test.fsdb);$dumpvars;endif
end如果要能够成功调用$dump等函数需要在编译compile时指定define的宏定义其使用方法如下
compile-option -define dump_fsdb但是这种宏定义的方式实现条件编译当条件改变时需要重新编译这样会造成仿真效率底下特别在项目后期对测试用例进行回归的时候会有相当一部分时间浪费在编译上。
2 $test$plusargs 使用条件编译函数$test$plusargs的代码如下
initialbeginif($test$plusargs(test1))$readmemh(test1.dat,mem1);if($test$plusargs(test2))$readmemh(test2.dat,mem2);end仿真运行命令如下如果仿真不需要test1只需要在运行命令中去掉test1。
run-options test1 test2
3 $value$plusargs $value$plusargs可以将运行命令run-options中的参数值传递给指定的信号或者字符其语法格式如下
$value$plusargs(“string”,signalname);
其中stringplusarg_formatformat_string,plusarg_format指明了用户定义的要进行传递的值。format_string指定了要传递的值的格式类似$display中定义的%s、%h等。并且在string中plusarg_format和format_string的格式应该为plusarg_format/plusarg_format。如果转换后的位宽和传递的值不一致则按照如下规则转换
plusarg位宽与sigalname的关系signalname值plusarg左补零plusarg截位plusarg为负数按照正数处理不匹配若为指定默认值则reg类型为x 代码如下
if($value$plusargs(finish%d, finish))
beginrepeat(finish); $display(finish%d, finish);$finish;
endif($value$plusargs(freq%f,frequency))
begin$display(freq%f, frequency);
endif($value$plusargs(testname%stestname))
begin$display(testname%s,testname);
end运行命令
run-options finish100 freq1.23 testnametest1 结果
finish100
freq1.23
testnametest1
参考文献
[1] verilog仿真测试中的参数传递——$test$plusargs和$value$plusargs-CSDN博客
[2] Verilog之“$test$plusargs和$value$plusargs用法小结“ - 知乎 (zhihu.com)