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举例
如果有以下判断语句
if($ test$plusargs(“`you”)) begin
.......
end
此时 begin-end块之间的内容会被执行。
$ value$ plusargs举例
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块之间的内容会被执行。
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一样放在第一个参数上
5、Dump波形命令
$fsdbDumpfile(fsdb_name[,limit_size])
指定波形文件名,第二个参数可选择用来限制波形的大小(MB)。 f s d b D u m p f i l e ( “ t b t o p . f s d b ” , 500 ) ; 其 中 文 件 名 可 能 被 fsdbDumpfile(“tb_top.fsdb”,500); 其中文件名可能被 fsdbDumpfile(“tbtop.fsdb”,500);其中文件名可能被fsdbDumpvars覆盖。
$fsdbDumpvars([depth, instance][, “option”])*
depth表示要加载波形的层次;0表示当前instance下的所有变量一级其他module实例的波形,1表示当前instance中的变量的波形,不包括当前instance中的其他module实例的波形,2表示包含当前instance以及其中的第一级子instance的波形;以此类推。
instance指定要加载波形的module名。
option加载波形的选项,如:
+IO_Only – 只加载IO port信号;
+Reg_Only – 只加载reg类型信号;
+mda – 加载memory和MDA信号;
+packedmda – 加载packed MDA;
+struct – 加载structs;
+parameter – 加载parameter;
+fsdbfile+filename – 指定fsdb文件名字。
$fsdbDumpon([“option”])
$fsdbDumpoff([“option”])
控制波形加载的开始和结束;
fsdbDumpoff之后,将停止记录信号值的变化,直到$fsdbDumpon,从当前时刻开始记录信号值的变化。
option—选项,如:
+fsdbfile+filename – 指定将特定文件的波形加载打开与关闭,如果不指定,则默认指当前仿真所有的波形文件;
$fsdbAutoSwitchDumpfile(file_size, “fsdb_name”, number_of_files[, “log_file_name”, “+fsdb+no_overwrite”])
当波形的大小达到限制后自动以一个新的波形文件起始加载波形;
在所有的波形文件加载完成后,会创建一个virtual FSDB文件,查看波形时只需要加载此文件就可以合并所有的波形文件。
file_size—波形文件大小限制,单位为MB,最小为10M,若值小于10M则默认10M;
file_name—波形文件的名字,在实际加载波形时,文件名为file_name_000.fsdb file_name_001.fsdb…;
number_of_files—最多可以加载多少个file_size这么大的波形文件,如果写为0,则默认没有限制;
log_file_name—指定log文件的名字;
+fsdb+no_overwrite—当number_of_files限制的个数达到时停止dump波形;
$fsdbDumpflush()
在仿真过程中强制将信号值加载到波形中,便于在仿真过程中查看波形;
$fsdbDumpFinish()
在仿真过程中调用,停止dump波形;
$fsdbSwitchDumpfile(“new_file_name”[, “+fsdbfile+src_file”])
关闭现有的波形文件,以一个新的文件名开始加载波形;
new_file_name—创建一个新的波形文件,将波形加载到这个文件中;
+fsdbfile+src_file—指定要停止加载并关闭的波形文件, 这个参数不指定时,将默认使用当前正在加载的波形文件;
$fsdbDumpvarsByFile(“text_file_name”[, “option”])
类似于$ fsdbDumpvars,这个方法支持将需要加载波形的instance写在文件中。
text_file_name—文本文件,指定要dump波形的instance;
option—同$fsdbDumpvars中的option参数;