uvm_cmdline_procに対して、以下のような関数を実行して、コマンドラインの処理を行います。
function void get_args ( output string args[$] ); function void get_plusargs ( output string args[$] ); function int get_arg_matches ( string match, ref string args[$] ); function int get_arg_value ( string match, output string value ); function int get_arg_values ( string match, ref string values[$] );
get_args関数の引数argsには、シミュレータの引数すべてが格納されます。
実装は、超簡単です。
実装は、超簡単です。
function void get_args (output string args[$]); args = m_argv; endfunction
get_plusargs関数の引数argsには、シミュレータの引数で+で始まるものが格納されます。
こちらの実装も同様に、超簡単です。
こちらの実装も同様に、超簡単です。
function void get_plusargs (output string args[$]); args = m_plus_argv; endfunction
argsは、Queueですので、次のようにすると各引数を表示できます。
for ( int i = 0; i < args.size() ; i++ ) $display( "args[%d] = %s\n", i, args[i] );
get_arg_matches関数は、match(正規表現)にマッチする引数をargsに、マッチした数を戻り値として返します。
get_arg_value関数は、matchにマッチする最初の値をvalueに、マッチした数を戻り値として返します。
get_arg_values関数は、matchにマッチするすべての引数をvaluesに、マッチした数を戻り値として返します。
get_arg_values関数は、matchにマッチするすべての引数をvaluesに、マッチした数を戻り値として返します。
おっと、get_arg_value関数の実装で戻り値がおかしくなると思うのだが、いかがだろうか?
function int get_arg_value (string match, ref string value); int chars = match.len(); get_arg_value = 0; foreach (m_argv[i]) begin if(m_argv[i].len() >= chars) begin if(m_argv[i].substr(0,chars-1) == match) begin get_arg_value++; if(get_arg_value == 1) value = m_argv[i].substr(chars,m_argv[i].len()-1); end end end endfunction
次回に続く。
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology