Verilog에서 환경 변수를 읽으려면 어떻게해야합니까? 내가Verilog/System Verilog에서 환경 변수를 읽으려면 어떻게해야합니까?
File=$fopen("$PATH/FileName","r");
$ 경로를 달성하기 위해 노력하고
(VCS는 시뮬레이터에서 실행) 환경 변수입니다.
Verilog에서 환경 변수를 읽으려면 어떻게해야합니까? 내가Verilog/System Verilog에서 환경 변수를 읽으려면 어떻게해야합니까?
File=$fopen("$PATH/FileName","r");
$ 경로를 달성하기 위해 노력하고
(VCS는 시뮬레이터에서 실행) 환경 변수입니다.
SystemVerilog DPI를 사용하면 환경을 가져올 수 있습니다. 그리고 getenv
은 모든 POSIX 플랫폼에 대한 표준 C 라이브러리이므로 함수 정의를 위해 getenv()
동등한 기능을 다시 구현할 필요가 없습니다.
SV의 예제 코드.
vcs -sverilog dpi.v
그것은
env = /home/user/FileName
그리고 원래 문제의 또 하나의 문제를 보여줍니다
ncverilog -sv dpi.v
또는
실행 는import "DPI-C" function string getenv(input string env_name);
module top;
initial begin
$write("env = %s\n", {getenv("HOME"), "/FileName"});
end
endmodule
, PATH는 실행 파일 검색 경로에 대한 환경입니다 연결하고 ":" 캐릭터. 나는 그것이 실제로 "PATH"환경이 아니라 여기에 예가되어야한다고 생각한다. 그렇지 않으면 fopen 파일 이름이 "/bin:/usr/bin:/usr/local/bin/FileName"
일 수 있습니다.
오타를 지적 해 주셔서 감사합니다. – jclin
간단한 PLI 응용 프로그램을 사용하여 환경 변수를 읽을 수 있습니다. 다음은 오류 체크가없는 샘플입니다.
#include <stdlib.h>
#include <string.h>
#include "vpi_user.h"
PLI_INT32 pli_getenv (PLI_BYTE8 * arg) {
vpiHandle tf_obj = vpi_handle (vpiSysTfCall, NULL);
vpiHandle arg_iter = vpi_iterate (vpiArgument, tf_obj);
vpiHandle arg1, arg2;
arg1 = vpi_scan (arg_iter);
arg2 = vpi_scan (arg_iter);
s_vpi_value vi, vo;
vi.format = vpiStringVal;
vpi_get_value (arg2, &vi);
vo.format = vpiStringVal;
vo.value.str = strdup (getenv (vi.value.str));
vpi_put_value (arg1, &vo, NULL, vpiNoDelay);
return 0;
}
VCS 설명서에는이를 시뮬레이터에 연결하는 방법이 설명되어 있습니다.
DPI를 사용하면 훨씬 간단 해집니다. 다른 대답을 참조하십시오. –
내가 이카루스와 함께 이것을 사용
$(SIM) -DPATH_FILENAME=\"$PATH/FileName\" blah.v ...
를 대체하기 위해 그런 다음 메이크/쉘 스크립트에서 지정하는 값을 시뮬레이터를 호출하는 Verilog를 전처리에게
File = $fopen(`PATH_FILENAME, "r");
를 사용하는 것이 간단합니다 'iverilog
, vsim
그리고 친구들도 비슷한 것을 지원할 것입니다.
전치사가 리터럴 값 내에서 대체하지 않으므로 따옴표가 이스케이프 처리되어 대체 된 값에 포함됩니다. 예를 들어이 조합은 작동하지 않습니다
File = $fopen("`PATH_FILENAME", "r");
...
`$(SIM) -DPATH_FILENAME=$PATH/FileName blah.v ...`
일반적인 솔루션은 현재 디렉토리에 필요한 파일을 복사하는 것입니다 그냥'$하면 fopen ("파일 이름", " r "); 시뮬레이션 실행은 대개 스크립트의 일부이므로 스크립트의 한 단계 더 나아갑니다. – toolic