我正在学习VHDL并发现令人困惑的事情.假设您有以下实体:
entity alu32 is
port(a, b : in STD_LOGIC_VECTOR(31 downto 0);
alucontrol : in STD_LOGIC_VECTOR(2 downto 0);
result : buffer STD_LOGIC_VECTOR(31 downto 0);
zero : out STD_LOGIC);
end alu32;
Run Code Online (Sandbox Code Playgroud)
当将它用作另一个实体架构中的组件时,它的定义如下:
component alu32
port(
a, b : in STD_LOGIC_VECTOR(31 downto 0);
alucontrol : in STD_LOGIC_VECTOR(2 downto 0);
result : buffer STD_LOGIC_VECTOR(31 downto 0);
zero : out STD_LOGIC
);
end component;
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么要重新定义港口?这似乎是一个毫无意义的练习,因为它与实体声明中的完全相同.为什么VHDL设计不允许您简单地使用这样的组件:
component alu32;
Run Code Online (Sandbox Code Playgroud)
你可以,因为VHDL-93.您可以实例化使用
Alu_0: entity work.alu32
port map (
...
);
Run Code Online (Sandbox Code Playgroud)
在此片段中,您可以替换work
要实例化的组件的VHDL库,work
它始终是VHDL源所在的当前库.
为什么要使用组件声明?首先,如果要实例化的内容不是VHDL,则需要它们,例如Verilog,IP内核和网表.其次,使用配置允许更改端口/实体绑定,但您需要组件声明.