1

param0クラスとparam1が宣言されているパッケージがあります。誰かがこれらのクラスのインスタンス化の理由を説明してもらえますか

( ex:param0 = new() ) 

パッケージ自体の内部ではなく、最上位のモジュールで実行する必要がありますか?

パッケージ内でそれを実行したい理由は、クラスparam0内でクラスのいくつかのパラメーターを使用するためparam1です。

4

3 に答える 3

1

を使用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クラスのインスタンス化のための任意の操作を使用して、クラス関数本体の定義、関数またはタスクを作成できます。パッケージの考え方は宣言のみであるため、クラス、関数、タスク、ネット/変数はモジュールまたはプログラムにインポートされます。

于 2012-11-14T14:50:00.530 に答える
0

パッケージは宣言のみを目的としており、チェッカー以外のプロセスを含めることはできません。class new は特別な関数呼び出しであるため、プロセス コンテキストで使用する必要があり、パッケージでは使用できません。

class1::parameter1 を使用して、クラス メンバーのパラメーターを直接参照できます。

于 2012-11-13T14:43:41.460 に答える