Arrays “分享”;数组的数组";在两个VHDL模块之间

Arrays “分享”;数组的数组";在两个VHDL模块之间,arrays,module,vhdl,Arrays,Module,Vhdl,我在两个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,但收到一条错误消息 有人能帮我吗?您需要在包中定义您的类型,然后通过

我在两个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,但收到一条错误消息


有人能帮我吗?

您需要在包中定义您的
类型
,然后通过
使用
将其包含在两个实体中,如下所示:

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;

然后在周围体系结构的端口图中使用它(包也必须包含在其中)。。。还有其他方法,但这是我建议的方法…

下面的整个示例,包括p_avg包(如BennyBarns建议的)、my_e子模块my_e和tb top模块的定义;可以使用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;
ieee库;
使用ieee.std_logic_1164.all;
包p_平均值为
avg_log类型是标准逻辑向量(19到0)的数组(0到31);
端包p_平均值;
图书馆ieee;
使用ieee.std_logic_1164.all;
图书馆工作;
使用work.p_avg.all;
我的实体是
港口(
v1_o:输出平均值(日志);
终端实体;
我的e的架构模拟是
开始
v1_o(其他=>0');
终端架构;
图书馆ieee;
使用ieee.std_logic_1164.all;
图书馆工作;
使用work.p_avg.all;
实体结核是
终端实体;
tb-is的sim体系结构
信号v1:平均对数;
开始
my_e_1:实体工作。my_e
港口地图(
v1_o=>v1);
终端架构;

正如您所提到的,我已经尝试过了,但在端口(V1:out:avg_log:=(others=>others=>others=>0')上出现了错误“error:HDLParsers:164解析错误,意外冒号,需要标识符或字符串_LITERAL”;在我的顶部模块上,请提供帮助。@karthik,如错误消息所示,在输出模式值和子类型指示avg_log之间有一个虚假的“:”。下面的MortenZdk示例还显示了所需的一对括号,其中包含std_逻辑_向量数组的端口输出默认值中最右边的其他关联。他的示例代码实际上可以无错误地进行分析。这里有一条关于在答案中信任(并使用)伪代码的消息。