1

テストベンチで次のようなコード スニペットがあります

function void write_to_port( my_data_type_base data );
    my_data_type_extended data_ext;
    if(!$cast(data_ext, data));
        `uvm_error(get_type_name(), "failed to cast");
   `uvm_info(get_name(), $psprintf("data_ext :\n%s", data_ext.sprint()), UVM_MEDIUM)
  // write data_ext out to another port....
endfunction

実行すると、「キャストに失敗しました」という uvm_error が表示されます。$cast が 1 を返さない理由はよくわかりません。ご覧のとおり、uvm_info でキャストした後に拡張クラス データ項目を出力しています。ちゃんとキャストされているのがわかります。if 条件で $cast を使用しない場合、実行時エラーは発生しません。$cast が 1 を返すかどうかを確認するために、動的キャストで if を常に使用するのは良いコーディング方法ではないでしょうか?

上記のケースでキャストが 1 を返さない理由は何でしょうか?

4

1 に答える 1

2

「if」の行のセミコロンは当てはまらないと思いますか?

それは if ステートメントを消費すると思います。その後、if の評価方法に関係なく、uvm_error が実行されます。

if(!$cast(data_ext, data)); <- no semicolon
    `uvm_error(get_type_name(), "failed to cast");
于 2014-05-30T23:35:32.163 に答える