2013-02-22 40 views
5

Verilogで環境変数を読み取るにはどうすればよいですか?私はVerilog/System Verilogで環境変数を読み取るにはどうすればよいですか?

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

の$ PATHを達成しようとしています

(VCSシミュレータ上で実行する)環境変数です。

+2

一般的な解決策は、現在のディレクトリに必要なファイルをコピーすることで、単に '$のfopen(「ファイル名を」、」 r "));'。実行シミュレーションは通常スクリプトの一部ですので、これはスクリプトのもう1つのステップに過ぎません。 – toolic

答えて

12

SystemVerilog DPIを使用して環境を取得できます。 getenvはすべてのPOSIXプラットフォーム用の標準Cライブラリであるため、関数定義のために独自のgetenv()同等の関数を再度実装する必要はありません。

SVのコード例。

それはあなたの元の質問で

env = /home/user/FileName 

そして、もう一つの問題は、PATHは、実行可能な検索パスの環境で表示されます

ncverilog -sv dpi.v 

または

vcs -sverilog 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"環境ではなくここの例であるべきだと思います。それ以外の場合、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 ...

を置換するためにあなたのMakefile /シェルスクリプトから指定値をシミュレータを起動するVerilogのプリプロセッサに

File = $fopen(`PATH_FILENAME, "r"); 

を使用することがしばしば簡単です'iverilog、しばしばvsimと友人はおそらく同様のサポートします。

引用符は、置換された値に含まれるようにエスケープされます。プリプロセッサはリテラル値の代わりに使用されないためです。たとえば、この組み合わせはを動作しません:

File = $fopen("`PATH_FILENAME", "r"); 

...

`$(SIM) -DPATH_FILENAME=$PATH/FileName blah.v ...` 
関連する問題