VCS/UVM에서 시스템 시간을 얻는 방법이 있습니까? Perl의 localtime(time)
과 비슷한 것을 찾고 있습니다. uvm_info
을 인쇄 할 때마다 시스템 시간을 인쇄 할 수 있습니까?VCS에서 시스템 시간 받기
답변
$system()
을 사용하면 system 'date 명령을 포함하여 시스템 명령을 실행할 수 있습니다. IEEE 1800 LRM에서
initial
begin
$system("date");
end
:
$system
은 C 함수 시스템 호출한다(). C 함수 은 전달 된 인수를 실행합니다. 인수가 터미널에서 실행 된 것처럼 입니다.$system
은 작업 또는 함수로 호출 할 수 있습니다. 함수로 호출되면 데이터 유형이 int 인 system()에 대한 호출 인 의 반환 값을 반환합니다. 문자열 인수로$system
을 호출하면 NULL 문자열로 C 함수 시스템()이 호출됩니다.
또한 here을 참조하십시오.
사용중인 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();
'localtime()'은 C 라이브러리의 함수이며 문자열이 아닌'struct tm *'을 반환합니다. 'localtime'이 아닌 다른 함수의 이름을 지정하십시오. 그렇지 않으면 시뮬레이터가 공유 라이브러리 순서 종속성으로 인해 잘못된 함수를 호출 할 수 있습니다. – jclin
DPI 함수가 내장되어 있으므로 쓸 필요가 없습니다. – Jean
@Greg : linux'date' 명령 출력은'Mon Aug 7 14:00:34 PDT 2017'과 같습니다. '$ fscanf'를 호출하면 형식으로 '% s'을 (를) 사용하므로 문자열 (LRM에 따라 비 공백 문자 시퀀스)과 일치합니다.네 번째 문자는 공백이므로 'localtime'문자열에는 출력의 처음 세 문자 (즉, 요일) 만 포함됩니다. – AndresM
: 당신의 메서드 이름을 가정하면 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
명령의 출력을 추출하는 방법이 있습니까? – Jean
$ 시스템은 종료시 시스템 호출의 반환 값을 직접 반환하지만이 값은 1-2 바이트이며 대개 0 또는 오류 코드입니다. 시뮬레이터에서 시간을 추출하는 일반적인 방법은 내가 답변에 게시 한 링크에 설명 된대로 파일에 작성하는 것입니다. – Ari
UVM에서는 각 단계에서 사용 된 벽시계 시간을 버릴 수 있습니까? – Jean