仿真文件常用系统函数

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一样放在第一个参数上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值