
田中太郎
pure virtualの意味について考えていきます
はじめに
UVMでpure virtualがついたfunction/taskがあったので、サンプルコードを作成して動作を確認しました
pure virtualの動作をサンプルコードで確認する
pure virtual function/taskは、継承先で中身を書くことを強制する言語仕様です
以下、サンプルコードです
virtual class base_class;
pure virtual function void print(); // pure virtualのfunctionを定義
endclass
class extends_class extends base_class;
function void print(); // base_classのprint()の中身を記述する
$display("extends_class");
endfunction
endclass
module tb;
initial begin
extends_class e_class = new();
e_class.print;
end
endmodule
// 実行結果
// extends_class
pure virtualの動作を解説する
pure virtualの動作について解説します
pure virtualはfunction/taskに付けることができ、virtual class内でのみ使用することができます
virtual class base_class;
pure virtual function void print(); // 中身は記述しない
endclass
base_class内では、print()の動作を書きません。
その代わりに、pure virtualを付けて定義されたfunction/taskは、継承先のクラスで必ず中身を書く必要があります
virtual class base_class;
pure virtual function void print();
endclass
class extends_class extends base_class;
function void print(); // base_classで定義したprint()の中身を記述する
$display("extends_class");
endfunction
endclass
もし、中身をかかなかったらコンパイルエラーが発生します
まとめ
pure virtual function/taskの動作について解説しました
必ず記述してほしいfunction/taskがあるときは、pure virtualで宣言しておくと
コンパイルエラーが発生するので検証者は気づくことができます
一部改変する必要がある検証部品では、ミスを減らす助けになるので積極的に使用していきましょう
コメント