假设我的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
答案 0 :(得分:2)
你以某种错误的方式解决这个问题。
entity y1
提供y1
实体的接口。它指定您有实体的输入b
。这意味着您可以从b
声明中读取architecture
的值。然后,您应该在y1
内实现您希望architecture behav1
模块执行的操作。
根据我的理解,您希望实例化x1
和y1
,然后将它们连接在一起。为此,您需要提供x1
和y1
的实现,然后在单独的顶级实例化并将它们连接在一起。像这样:
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)对于正式的模式端口链接,相关的实际可以是任何模式的端口。