Есть ли способ узнать системное время в VCS / UVM? Я ищу что-то похожее на Perl localtime(time). Есть ли способ распечатать системное время для каждого напечатанного uvm_info?

4
Jean 25 Сен 2014 в 23:23

3 ответа

Лучший ответ

Один из способов - использовать $system() для запуска любой системной команды, включая системную команду date.

initial
 begin
    $system("date");
 end

Из IEEE 1800 LRM:

$system вызывает функцию C system (). Функция C выполняет переданный ему аргумент, как если бы аргумент был выполнен с терминала. $system можно назвать либо задачей, либо функция. При вызове как функции возвращает возвращаемое значение вызов system () с типом данных int. Если $system вызывается без строковый аргумент, функция C system () будет вызываться с NULL нить.

Также см. здесь.

4
Greg 25 Сен 2014 в 20:53

Зависит от используемой вами версии 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();
4
Greg 18 Дек 2017 в 20:56

В 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
1
Meir 15 Янв 2018 в 13:13