2012-03-12 10 views
1

私はこのようなovm_sequenceオブジェクトにコマンドライン・オーバーライドを適用したいと思います:SystemVerilog ovm_sequenceオブジェクトにコマンドラインオーバーライドを適用するにはどうすればよいですか?

+ovm_set_config_int=*,max_timeout,100000

max_timeoutフィールドがovm_sequence_utilsマクロ内で宣言されています。

これを行う方法はありますか?私の理解では、ovmシーケンスはovm階層の一部ではないため、おそらくコマンドラインから変更することはできません。

答えて

2

は、私はそれがtask body()で私ovm_sequenceに以下を追加することによって、(http://www.testbench.in/OT_10_OVM_SEQUENCE_5.htmlから、次の手順に)取り組んだ:

if(!(p_sequencer.get_config_int("max_timeout",max_timeout))) 
    max_timeout = ... // some default value 

ここで重要なコマンドラインの設定は、シーケンサのために設定する必要があるということである、とシーケンスは、上記のコードを使用してその設定を取得できます。

2

私は、コマンドラインからのような設定スペースを設定できる仕組みに気づいていません。 OVMソースの簡単なgrepには何も表示されません。

OVMシーケンスの迅速なコメントが彼らはビルド時に構築されていないOVM階層

の一部ではない、それが正しいのです。これらは通常、私はこのようなもののためにargをプラス、およびセットを使用したい


)彼らはシーケンサー上で実行を開始する直前に作成されますが、任意のovm_objectベースのクラスは(get_config_int経由で設定する整数を調べることができますそのプラス引数に基づいて私のベーステストクラスの設定int。

+max_timeout=100000 

を...そして、すべて私のテストから継承し、私の基本テストクラス、中:たとえば、コマンドラインが持っているでしょう

function void build(); 
    int timeout; 
    [....] 
    if ($value$plusargs("max_timeout=%d", timeout)) begin 
     `ovm_info(get_type_name(), "Setting timeout", OVM_MEDIUM); 
     set_config_int("*", "max_timeout", timeout"); 
    end 
    [....] 
endfunction 

通常、私の用途にはそれほどリテラルではありませんそれで、複数の値を設定するフラグを持っていますが、それがその基本です。

関連する問題