2014-09-25 2 views

ответ

3

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

initial 
begin 
    $system("date"); 
end 

От IEEE 1800 LRM:

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

Также см. here.

+0

Есть ли способ извлечь выход команды? – Jean

+0

$ система сразу возвращает возвращаемое значение системного вызова при выходе, но это значение составляет только один-два байта, и обычно это либо 0, либо код ошибки. Общим методом для извлечения времени в симуляторе является запись его в файл, как описано в ссылке, опубликованной в моем ответе. – Ari

+0

В UVM можно сбросить время настенных часов, проведенное на каждой фазе? – Jean

3

В зависимости от версии 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(); 
+2

'localtime()' является функцией библиотеки C и возвращает 'struct tm *' не строку. Назовите свою собственную функцию, отличную от 'localtime', в противном случае симулятор может вызывать неправильную функцию из-за зависимости заказа на библиотечную систему. – jclin

+0

Есть ли встроенная функция DPI, чтобы получить время, так что мне не нужно писать? – Jean

+0

@Greg: выход команды linux 'date' будет выглядеть примерно так:' Mon Aug 7 14:00:34 PDT 2017'. Когда вы вызываете '$ fscanf', вы используете'% s' в качестве формата, поэтому он будет соответствовать строке (которая представляет собой последовательность символов небелого пробела в соответствии с LRM).Поскольку 4-й символ - это пробел, строка 'localtime' будет содержать только первые 3 символа вывода (т. Е. День недели). – AndresM

0

В с файлом 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 
Смежные вопросы