テストベンチで次のようなコード スニペットがあります
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 を返さない理由は何でしょうか?