SystemVerilog|pure virtual について考える

Systemverilog
田中太郎
田中太郎

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で宣言しておくと

コンパイルエラーが発生するので検証者は気づくことができます

一部改変する必要がある検証部品では、ミスを減らす助けになるので積極的に使用していきましょう

コメント

タイトルとURLをコピーしました