Получить системное время в VCS
Есть ли способ получить системное время в VCS/UVM? Я ищу что-то похожее на Perl's localtime(time)
, Есть ли способ распечатать системное время для каждого uvm_info
напечатано?
3 ответа
Одним из способов является использование $system()
выполнить любую системную команду, включая системную команду даты.
initial
begin
$system("date");
end
От IEEE 1800 LRM:
$system
делает вызов функции системы C (). Функция C выполняет переданный ей аргумент так, как если бы аргумент был выполнен из терминала.$system
может быть вызван как задача или функция. Когда вызывается как функция, она возвращает возвращаемое значение вызова system() с типом данных int. Если$system
вызывается без строкового аргумента, функция C системы () вызывается со строкой NULL.
Также смотрите здесь.
Зависит от версии VCS, которую вы используете. Последняя версия должна поддерживать $system
как определено в IEEE Std 1800-2012 § 20.18.1. Предполагая, что вы работаете в среде 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 и скомпилируйте ее в VCS с вашими файлами SystemVerilog. В SystemVerilog добавьте import
чтобы разрешить доступ к вашей функции C. Предполагая, что имя вашего метода - my_localtime, а время возврата - строка, импорт должен выглядеть следующим образом:
import "DPI" function string my_localtime();
В 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