仿真文件常用系统函数

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.fsdb500);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参数;

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值