1、$test$plusargs
和$value$plusargs
有时候我们在进行仿真时,需要从外部传递参数,可以借助 $test$plusargs
和$value$plusargs
的功能,首先来看一个简单的例子:
VCS正常编译后,仿真时的命令如下:
run:
./simv +test_case=$(case) +$(option1) +$(option2) -l report.log
当运行 make run case=I2c option1=you option2=me
$test$plusargs
举例
$test$plusargs(string)
只有一个字符串参数,只要外面传入了这个字符串,函数就会返回1,否则返回0
如果有以下判断语句
if($test$plusargs(“`you”)) begin
.......
end
此时 begin-end块之间的内容会被执行。
$value$plusargs
举例
$value$plusargs(usr_string,variable)
有两个参数,前一个参数是格式,后一个是变量名
logic [159:0] test_case;
initial begin
$value$plusargs(“test_case = %s,tese_case”);
$timeformat(-9,3,“ns”,15);
if(test_case == “i2c”) begin
.......
end
end
此时 begin-end块之间的内容会被执行。
建议在命名时前缀尽量不要一致,option1=you和option1=youandme可能会被同时执行。
2、$timeformat
语法
$timeformat[( Units, Precision, Suffix, MinFieldWidth )];
规则
- Unit 是 0 到-15 之间的整数值,表示打印的时间的单位:0 表示秒,-3 表示毫秒,-6 表示微秒。-9 表示毫微秒; -12 表示微微秒; -15 表示毫微微秒;中间值也可以使用:例如-10表示100ps单位。
- Precision 是在小数点后面要打印的小数位数。
- Suffix 是在时间值后面打印的一个字符串。
- MinFieldWidth 是打印的最小数量字符,包括前面的空格。如果要求更多字符,那么打印的字符更多。
- 如果没有指定变量,默认地使用下面的值:Units:仿真精度;Precision:0;Suffix:空字符串;MinFieldWidth:20 个字符。
3、$readmemh
$readmemb 和 $ readmemh用来从文件中读取数据到存储器中。
语法
- $readmemh(“<数据文件名>”,<存储器名>);
- $readmemh(“<数据文件名>”,<存储器名>,<起始地址>);
- $readmemh(“<数据文件名>”,<存储器名>,<起始地址>,<终止地址>);
在verilog中有$readmemh(“filename”, mem_name)命令,在使用这个命令时,”filename”中的路径要用反斜杠’/’,而不是斜杠’\’。如:
$readmemh(“F:/mydesigen/re_input.txt”,re_input);
4、$sformatf
语法:
$ sformat(str,format,args);
$ sformatf(format,args);
规则:
$sformat是将字符串按照给定的格式填入相应的参数args中
$ sformatf任务和$ sformat相似,除了其返回字符串结果。字符串作为$ sformatf的返回值,而不是像$sformt一样放在第一个参数上