param0
クラスとparam1
が宣言されているパッケージがあります。誰かがこれらのクラスのインスタンス化の理由を説明してもらえますか
( ex:param0 = new() )
パッケージ自体の内部ではなく、最上位のモジュールで実行する必要がありますか?
パッケージ内でそれを実行したい理由は、クラスparam0
内でクラスのいくつかのパラメーターを使用するためparam1
です。
param0
クラスとparam1
が宣言されているパッケージがあります。誰かがこれらのクラスのインスタンス化の理由を説明してもらえますか
( ex:param0 = new() )
パッケージ自体の内部ではなく、最上位のモジュールで実行する必要がありますか?
パッケージ内でそれを実行したい理由は、クラスparam0
内でクラスのいくつかのパラメーターを使用するためparam1
です。
を使用VCS
していますが、クラス オブジェクトをパッケージに割り当てることができない理由がわかりません。次のコードは と で動作しVCS
ていncverilog
ます。
package pkg;
class Base;
int x;
function new();
x=1;
endfunction
function int value();
return x;
endfunction
endclass : Base
class C;
Base b;
function new();
b = new;
endfunction
function get();
return b.value();
endfunction
endclass : C
C d = new;
endpackage
pkg::C e = new;
module top;
import pkg::*;
C c;
initial begin
c = new;
$display("c=%d", c.get());
$display("d=%d", d.get());
$display("e=%d", e.get());
end
endmodule
ただし、パッケージ内でグローバル変数やインスタンスなどを宣言するのは、適切なコーディング スタイルではありません。パッケージは、宣言を記述するためだけに使用する必要があります。パッケージ内でそうしていなくても、module
/ program
/の外で宣言すると、パッケージpackage
に属し$unit
ます。もちろん、new
クラスのインスタンス化のための任意の操作を使用して、クラス関数本体の定義、関数またはタスクを作成できます。パッケージの考え方は宣言のみであるため、クラス、関数、タスク、ネット/変数はモジュールまたはプログラムにインポートされます。
パッケージは宣言のみを目的としており、チェッカー以外のプロセスを含めることはできません。class new は特別な関数呼び出しであるため、プロセス コンテキストで使用する必要があり、パッケージでは使用できません。
class1::parameter1 を使用して、クラス メンバーのパラメーターを直接参照できます。