有没有办法在VCS / UVM中获得系统时间?我正在寻找类似于Perl localtime(time)
的东西。有没有办法打印每uvm_info
个打印的系统时间?
答案 0 :(得分:4)
一种方法是使用$system()
来运行任何系统命令,包括系统'date命令。
initial
begin
$system("date");
end
来自IEEE 1800 LRM:
$system
调用C函数系统()。 C功能 执行传递给它的参数,就好像参数已执行一样 从终端。$system
可以被称为任务或者 功能。当作为函数调用时,它返回的返回值 对数据类型为int的system()的调用。如果调用$system
而没有 字符串参数,将使用NULL调用C函数system() 字符串。
另请参阅here。
答案 1 :(得分:3)
取决于您使用的VCS版本。最新版本应支持IEEE Std 1800-2012§20.18.1中定义的$system
。假设您在基于UNIX的环境中运行,您可以执行以下操作:
function string get_localtime();
int fd;
string localtime;
void'($system("data > localtime")); // temp file
fd = $fopen("localtime", "r");
void'($fscanf(fd,"%s",localtime));
$fclose(fd);
void'($system("rm localtime")); // delete file
return localtime;
endfunction
如果您的VCS版本不支持$system
或者您更符合C / C ++,那么请使用DPI(请参阅IEEE Std 1800-2012§35)。在C中创建一个函数,并使用SystemVerilog文件在VCS中编译它。在SystemVerilog中,添加import
以允许访问您的C函数。假设您的方法名称是my_localtime并且返回时间是字符串,则导入应如下所示:
import "DPI" function string my_localtime();
答案 2 :(得分:0)
在c文件wallclock.c中:
#include <time.h>
wallclock() {
time_t t;
t = time(NULL);
return (ctime(&t));
//return time(NULL);
}
在SV文件中:
import "DPI-C" function string wallclock();
module try;
//int unsigned t;
string t;
initial begin
t = wallclock();
$write("time=%0s\n", t);
end
endmodule