Получить системное время в 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
Другие вопросы по тегам