0

2 つの VHDL モジュール間で「配列の配列」を共有するという問題があります。

以下のように、VHDL サブモジュールで「配列の配列」を宣言しました。

type avg_log is array (0 to 31) of std_Logic_vector(19 downto 0); 
signal V1 :avg_log :=(others=>others=>'0');

の全要素を最上位モジュールに送りたくてV1()()、PORT&GENERICでやってみたのですが、エラーメッセージが出てしまいました。

誰でも私を助けてもらえますか?

4

2 に答える 2

2

パッケージで定義typeし、次のようにして両方のエンティティに含める必要がありますuse

library ieee;
use ieee.std_logic_1164.all;

package p_avg is
    type avg_log is array (0 to 31) of std_Logic_vector(19 downto 0);
end package p_avg;

そしてあなたのエンティティで

use work.p_avg.all;
entity my_e is
    port(
      ...
      V1 : out avg_log := (others => (others => '0'));
      ...
    );
end entity;

次に、周囲のアーキテクチャ(パッケージも含める必要がある場所)のポートマップで使用します...他の方法もありますが、これが私が提案する方法です...

于 2013-08-08T07:29:42.393 に答える
0

以下の全体の例では、p_avg パッケージ (BennyBarns が提案したように)、my_e サブモジュール my_e、および tb トップ モジュールの定義を使用しています。ModelSim でコンパイルできます。

library ieee;
use ieee.std_logic_1164.all;

package p_avg is
  type avg_log is array (0 to 31) of std_logic_vector(19 downto 0);
end package p_avg;



library ieee;
use ieee.std_logic_1164.all;
library work;
use work.p_avg.all;

entity my_e is
  port(
    v1_o : out avg_log);
end entity;

architecture sim of my_e is
begin
  v1_o <= (others => (others => '0'));
end architecture;



library ieee;
use ieee.std_logic_1164.all;
library work;
use work.p_avg.all;

entity tb is
end entity;

architecture sim of tb is
  signal v1 : avg_log;
begin

  my_e_1 : entity work.my_e
    port map(
      v1_o => v1);

end architecture;
于 2013-08-08T08:53:33.277 に答える