如何将一个模块的输出信号连接到其他模块的输入信号

时间:2015-04-11 10:43:28

标签: vhdl

假设我的VHDL代码是这样的:

entity x1:
port(a: out std_logic;
....
....
);
architecture behv1 of x1 is
....
end behv1;

entity y1 
port(b: in std_logic;
....
....
);
architecture behv1 of y1 is
begin
m1: x1 port map(a=>b);    
end behv1;

所以,这里a是实体x1的输出信号whcih直接连接到其他实体y1的输入b

2 个答案:

答案 0 :(得分:2)

你以某种错误的方式解决这个问题。

entity y1提供y1实体的接口。它指定您有实体的输入b。这意味着您可以从b声明中读取architecture的值。然后,您应该在y1内实现您希望architecture behav1模块执行的操作。

根据我的理解,您希望实例化x1y1,然后将它们连接在一起。为此,您需要提供x1y1的实现,然后在单独的顶级实例化并将它们连接在一起。像这样:

entity x1:
port(a: out std_logic;
....
....
);
architecture behv1 of x1 is
    -- Do something...
end behv1;

entity y1 
port(b: in std_logic;
....
....
);
architecture behv1 of y1 is
begin
    -- Do something...    
end behv1;

entity toplevel
port (
    clk : in std_logic;
    ...
);
architecture toplevel_arch of toplevel is
    signal x1_output : std_logic; -- Temp to connect both modules
begin
    m_x1: x1 port map(a => x1_output);
    m_y1: y1 port map(b => x1_output);
end toplevel_arch;

答案 1 :(得分:1)

以下示例分析,阐述和模拟。

它说明了如何分层次连接输入和输出。

library ieee;
use ieee.std_logic_1164.all;

entity x3 is
    port (
        x3in:   in  std_logic;
        x3out:  out std_logic
    );
end entity;

architecture behv3 of x3 is
begin
    x3out <= x3in;
end architecture;

library ieee;
use ieee.std_logic_1164.all;

entity y3 is
    port (
        y3in:   in  std_logic;
        y3out:  out std_logic
    );
end entity;

architecture behv3 of y3 is
begin   
    y3out <= y3in;
end architecture;

library ieee;
use ieee.std_logic_1164.all;
entity z3 is
    port (
        z3in:   in  std_logic;
        z3out:  out std_logic
    );
end entity;

architecture foo of z3 is

    component x3 is
        port (
            x3in:   in  std_logic;
            x3out:  out std_logic
        );
    end component;

    component y3 is
        port (
            y3in:   in  std_logic;
            y3out:  out std_logic
        );
    end component;

    signal x3out:   std_logic;

begin
u0:
    x3 
        port map ( 
            x3in => z3in,
            x3out => x3out
        );
u1:
    y3 
        port map ( 
            y3in => x3out,
            y3out => z3out
        );
end architecture;

适用的规则可在语言参考手册(LRM),IEEE Std 1076-2008 6.5.6.3端口条款中找到:

  

在详细阐述了给定的描述之后(参见第14章),如果正式端口与实际本身是端口相关联,则以下限制适用于模式(见6.5.2),如果有的话,正式港口:

     
    

a)对于 in 中的正式模式端口,相关的实际应为中的模式端口输出 inout 缓冲区。此限制既适用于作为关联元素实际部分中的名称关联的实际值,也适用于作为关联元素实际部分中表达式的一部分关联的实际值。     b)对于模式 out 的正式端口,相关实际应为模式 out inout 缓冲区<的端口/ b>的。
    c)对于模式 inout 的正式端口,相关的实际应为模式 out inout 缓冲区<的端口/ b>的。
    d)对于模式缓冲区的正式端口,相关的实际应为模式 out inout 缓冲区<的端口/ b>的。
    e)对于正式的模式端口链接,相关的实际可以是任何模式的端口。