3

次のように、別の「mytypes.vhd」ファイルで型を宣言しようとしています。

library ieee;
use ieee.std_logic_1164.all;

package mytypes is 
   type my_bus_array_type is array (0 to 3) of std_logic_vector(7 downto 0);
end package mytypes;

次に、エンティティを次のように定義します。

library ieee;
use ieee.std_logic_1164.all;

library work;
use work.mytypes.all; 

entity my_entity is
   port(
      bus_array : in my_bus_array_type;
      ...
   );
end my_entity;

さて、これは機能していません。Altera Qsys ツールを使用してコンポーネントをライブラリに追加しようとすると、次のエラーが発生します。

Error: Verilog HDL or VHDL XML Interface error at my_entity.vhd(41): port "bus_array" has an unsupported type File: /home/project/my_entity.vhd Line: 41

問題は、エンティティ内で standard_logic_vector の配列、つまり多次元配列を定義しようとしていることに注意してください。代わりに std_logic の配列を定義すると、このコードは正しく機能します。

4

5 に答える 5

1

あなたは Quartus を使用していると述べましたが、std_logic_vectors を他の項目の基本型として使用することにうるさい場合があります。

サブタイプを使用して、Quartusであなたが求めていると思うことを行います:

mytypes.vhd ファイル:

library ieee;
use ieee.std_logic_1164.all;

package mytypes is 
  subtype BYTE_T            is std_logic_vector(7 downto 0);
  type    BYTE_A            is array (natural range <>) of BYTE_T;
  type    my_bus_array_type is array (0 to 3) of BYTE_T;
end package mytypes;

my_entity.vhd ファイル:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use work.mytypes.all

entity my_entity is
port ( 
  my_bus_array1 : in BYTE_A(0 to 3);
  my_bus_array2 : in my_bus_array_type;
  ...

配列範囲をエンティティで (おそらくジェネリックを使用して) 定義するか、パッケージで定義するかはあなた次第です。

于 2012-06-05T03:34:35.573 に答える
0

私は VHDL の専門家ではありませんが、次のようにコードを記述する必要があると思います。

私は編集しました:代わりにこれを試してください:

    package mytypes is 
     type my_bus_array_type is array (0 to 3) of std_logic_vector(7 downto 0);  
end package mytypes;

    entity my_entity is
    port ( my_bus_array : in my_bus_array_type; 
    ...);
    end my_entity
于 2012-06-04T09:33:19.360 に答える
0

mytypes パッケージで作成した型を使用するようにコンパイラに指示する必要があります。

use work.mytypes.all

entity my_entity is
port ( my_bus_array : in my_bus_array_type;
...
于 2012-06-04T11:19:37.983 に答える
0

同様の問題がありましたが、VHDL ライブラリの処理に関係していました。Qsys のすべての HDL コンポーネントは、ライブラリ名が Qsys プロジェクトの名前に設定された VHDL ライブラリに割り当てられます。パッケージはライブラリを使用して明示的にアクセスする必要があり(work.あなたの場合)、これは混乱を招く可能性があります。そうは言っても、通常、Qsys コンポーネントでパッケージを使用することは、私にとってはうまくいきwork.ました ( .

Quartus がライブラリに割り当ててコンパイルする方法を確認するには、Quartus の "Design units" タブを確認してください。ライブラリのフォルダー内のユニットを一覧表示します。ただし、何らかの理由でパッケージがここにリストされないことがわかりました。.qipQsys プロジェクトのファイルも参照してください。ここでは、Quartus が HDL ファイルをライブラリに割り当てた方法を正確に確認できます。

コードを Qsys コンポーネントとしてではなく、Quartus プロジェクトで直接インスタンス化するときに問題が発生しないという事実は、ライブラリの問題がこれの説明であることを示唆しています。

Qsys ライブラリの処理に関する参照を 2 つだけ見つけました : http://www.alteraforum.com/forum/showthread.php?t=33605 http://www.alterawiki.com/wiki/New_Qsys_Issues設計単位の衝突」)

std_logic_vector(ちなみに、私は Qsys コンポーネントで配列をよく使用しますが、それで問題を経験したことはありません。)

于 2014-09-26T08:13:52.253 に答える