2014-09-25 34 views
4

VCS/UVM에서 시스템 시간을 얻는 방법이 있습니까? Perl의 localtime(time)과 비슷한 것을 찾고 있습니다. uvm_info을 인쇄 할 때마다 시스템 시간을 인쇄 할 수 있습니까?VCS에서 시스템 시간 받기

답변

3

$system()을 사용하면 system 'date 명령을 포함하여 시스템 명령을 실행할 수 있습니다. IEEE 1800 LRM에서

initial 
begin 
    $system("date"); 
end 

:

$system은 C 함수 시스템 호출한다(). C 함수 은 전달 된 인수를 실행합니다. 인수가 터미널에서 실행 된 것처럼 입니다. $system은 작업 또는 함수로 호출 할 수 있습니다. 함수로 호출되면 데이터 유형이 int 인 system()에 대한 호출 인 의 반환 값을 반환합니다. 문자열 인수로 $system을 호출하면 NULL 문자열로 C 함수 시스템()이 호출됩니다.

또한 here을 참조하십시오.

+0

명령의 출력을 추출하는 방법이 있습니까? – Jean

+0

$ 시스템은 종료시 시스템 호출의 반환 값을 직접 반환하지만이 값은 1-2 바이트이며 대개 0 또는 오류 코드입니다. 시뮬레이터에서 시간을 추출하는 일반적인 방법은 내가 답변에 게시 한 링크에 설명 된대로 파일에 작성하는 것입니다. – Ari

+0

UVM에서는 각 단계에서 사용 된 벽시계 시간을 버릴 수 있습니까? – Jean

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 

C와 더 정합 경우/C++는 다음 DPI를 사용 (IEEE Std 1800-2012 § 35 참조) 버전 VCS는 또는 $system를 지원하지 않는 경우. C로 함수를 생성하고 SystemVerilog 파일로 VCS에서 컴파일합니다. SystemVerilog에서 C 함수에 액세스 할 수 있도록 import을 추가합니다. C 파일 wallclock.c에서

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에 따라 비 공백 문자 시퀀스)과 일치합니다.네 번째 문자는 공백이므로 'localtime'문자열에는 출력의 처음 세 문자 (즉, 요일) 만 포함됩니다. – AndresM

0

: 당신의 메서드 이름을 가정하면 my_localtime과 시간을 반환하는 문자열입니다, 가져 오기가 같아야합니다

#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