2

component のライブラリを作成したいのですが、コンポーネントは内部で 2 つの supcomponentsとにC分割されており、これらはジェネリックによって構成可能です。サブモジュールは、ジェネリックに依存するレコードで接続する必要があります。レコードは、コンポーネント内でも使用する必要があります。通常、レコードを でインスタンス化し、サブコンポーネントのファイルとコンポーネントのファイルでパッケージを使用します。ジェネリックなので、ジェネリック パッケージ (VHDL-2008) を使用すると解決策が得られる可能性があると考えました。c1c2package

問題は、サブコンポーネント内からもレコードにアクセスする必要があることです。そのためには が必要ですがuse thePackage、一般的なパッケージを使用するには、初期値を渡す必要があります (私の知る限り)。

だから私は試しました(注:ここではレコードを扱っていません。コンポーネントのパラメーターを使用してパッケージをパラメーター化(?)する汎用コンポーネントから汎用パッケージにアクセスしようとしています):

entity genericPackagePart is
    generic(
        outputValue : integer
    );
    port(
        result: out integer
    );
end entity;

architecture behav of genericPackagePart is
    package test is new work.genericPackage
    generic map(
        genSize => outputValue
    );

    use work.test.all;
begin
    result <= dummy;  -- dummy is a constant from genericPackage set to the value genSize (generic parameter)
end architecture;

ただし、modelsim から次のエラーが発生します。

** Error: (vcom-11) Could not find work.test.
** Error: genericPackagePart.vhd(17): (vcom-1195) Cannot find expanded name "work.test".
** Error: genericPackagePart.vhd(17): Unknown expanded name.
** Error: genericPackagePart.vhd(19): (vcom-1136) Unknown identifier "dummy".
** Error: genericPackagePart.vhd(20): VHDL Compiler exiting

更新: をジェネリック パッケージにラップして、そのパッケージ内からジェネリックをgenericPackagePart使用してインスタンス化 しようとしましgenericPackageたが、これも機能しませんでした。

フローは次のようになります。

  • テストベンチ => インスタンスgenericPackagePartgenericPackageし、ジェネリック パラメーターを使用
  • レコードは、次のテストベンチで利用できます。genericPackage
  • 内部genericPackagePart genericPackageは渡されたパラメータでインスタンス化されますgenericPackagePart
  • レコードは内部で利用可能ですgenericPackagePart

Modelsim は Errors を返しました (はintestのパラメーター化されたインスタンスに付けた名前です。これは のコンパイルからのものです):genericPackagegenericPackagePartgenericPackagePart

** Error: (vcom-11) Could not find work.test.
** Error: genericPackagePart.vhd(11): (vcom-1195) Cannot find expanded name "work.test".
** Error: genericPackagePart.vhd(11): Unknown expanded name.
** Error: genericPackagePart.vhd(13): near "entity": expecting END

Passing Generics to Record Port Typesを見ましたが、ジェネリックに基づくパッケージのインスタンス化の問題は解決しません。


完全を期すために、パッケージとテストベンチを以下に示します。

パッケージ:

package genericPackage is
    generic(genSize : integer := 1);

    constant dummy : integer := genSize;
end package;

テストベンチ:

package myGenericPackage is new work.genericPackage
generic map(
    genSize => 5
);

use work.myGenericPackage.all;

entity genericPackageTestbench is
end entity;

architecture testbench of genericPackageTestbench is
    signal testsignal : integer;
    signal testsignal2 : integer;
    signal dummy : integer := 12;

    component genericPackagePart is
    generic(
        outputValue : integer
    );
    port(
        result: out integer
    );
    end component;
begin
    test : process is
    begin
        wait for 20 ns;
        testsignal <= dummy;
        wait for 20 ns;
        testsignal <= work.myGenericPackage.dummy;
        wait;
    end process;

    testPart: genericPackagePart
        port map(result => testsignal2)
        generic map(outputValue => 128);
end architecture;
4

1 に答える 1