2013-02-22 6 views
5

Verilog에서 환경 변수를 읽으려면 어떻게해야합니까? 내가Verilog/System Verilog에서 환경 변수를 읽으려면 어떻게해야합니까?

File=$fopen("$PATH/FileName","r"); 

$ 경로를 달성하기 위해 노력하고

(VCS는 시뮬레이터에서 실행) 환경 변수입니다.

+2

일반적인 솔루션은 현재 디렉토리에 필요한 파일을 복사하는 것입니다 그냥'$하면 fopen ("파일 이름", " r "); 시뮬레이션 실행은 대개 스크립트의 일부이므로 스크립트의 한 단계 더 나아갑니다. – toolic

답변

12

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" 일 수 있습니다.

+0

오타를 지적 해 주셔서 감사합니다. – jclin

2

간단한 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 설명서에는이를 시뮬레이터에 연결하는 방법이 설명되어 있습니다.

+0

DPI를 사용하면 훨씬 간단 해집니다. 다른 대답을 참조하십시오. –

0

내가 이카루스와 함께 이것을 사용

$(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 ...` 
관련 문제