私の質問は、SV で $cast を使用することに関するものです。以下のコードでキャストという単語を検索すると、意図的に「!」が追加されています。失敗したキャストをチェックします。キャストが失敗した場合、bobsquare.bob(); を呼び出すとどうなるかを確認したかったのです。call_bob がポリゴン 'p' へのハンドルで呼び出される time=1ms で、square クラスの関数 'bob' が呼び出されて表示ステートメントを実行することに驚きました。どうすればそれが可能になりますか?Cadence の irun で実行し、SV クラス ブラウザーでデバッグしたところ、時間 = 1 ミリ秒でbobsquareにメモリ領域が割り当てられておらず、ポインタとして NULL が設定されていることがわかりました。ありがとう!
class figure;
endclass
class polygon extends figure;
virtual function void draw();
$display("polygon::draw");
endfunction
endclass
class square extends polygon;
virtual function void draw();
$display("square::draw");
endfunction
function void compute_area();
$display("square::compute_area");
endfunction
function void bob();
$display("square::I am bob");
$display("%t", $realtime);
endfunction
endclass
program top;
polygon p;
square s;
initial begin
s = new();
p = new();
#1ms;
call_bob(p);
#1ms;
call_bob(s);
end // initial begin
task call_bob(figure generic_ref_figure);
square bobsquare;
if (!($cast(bobsquare, generic_ref_figure)))
bobsquare.bob();
endtask // call_bob
endprogram