VHDL 元件例化语句的问题,

VHDL 元件例化语句的问题,
元件例化语句怎么用? 简单说就是在写一个 全加器时候,引用半加器
实体是
Entity full_adder is
Port(a ,b,,cin: in std_logic;
S,co: out std_logic);
End full_adder;
在结构体中先说明
Component half_adder
Port(a,b: in std_logic;
s,co: out std_logic);
end component;
然后就引用,。。
有点搞不清楚,
是不是只能引用work库中的元件?
Work库中有那些元件?
我是刚刚开始学VHDL,想学FPGA。

例化的写法是:
hf_add_gen Component half_adder
Port MAP(a =>a
b =>b
s =>s
co =>co
);
这个写法的意思就是将全加器的端口信号(符号=>后面的那几个)映射到半加器的端口上(符号=>前面的那几个)

在一个工程中自己写的代码都包含在work库中,也就是说work库中只包括在这个工程中写的几个Entity。 除了work库以外还有很多标准库比如ieee库,FPGA开发商写的库比如altera公司的lpm库和altra_mf库以及xilinx公司提供的标准器件库。还有就是自己或者其他人写的一些库文件。标准库和开发商提供的库在文件头直接声明后就可以调用了。 自己写的库需要在编译器里设置好库文件的路径,然后在像标准库一样调用就可以。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-22
引用的东西要在同一个project里的其他文件里有定义才行。
给你个例子看下就明白了,这是引用一位全加器构成一个四位全加器。
project名是adder,里面两个vhd文件,分别为fulladder.vhd和adder.vhd
fulladder.vhd内容如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY FullAdder is --这是一位全加器
port(
A:in std_logic;
B:in std_logic;
C:in std_logic;
Carry:out std_logic;
Sum:out std_logic
);
END FullAdder;

architecture a of FullAdder is
begin
Sum<=A xor B xor C;
Carry<=(A and B) or (A and C) or (B and C);
end a;

adder.vhd内容如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity adder is --四位全加器
port(
A,B:in std_logic_vector(3 downto 0);
S:out std_logic_vector(3 downto 0);
C:inout std_logic_vector(4 downto 0)
);
end adder;

architecture a of adder is
component FullAdder --声明component
port(
A:in std_logic;
B:in std_logic;
C:in std_logic;
Carry:out std_logic;
Sum:out std_logic
);
end component;

begin
u1:FullAdder port map(A(0),B(0),C(0),C(1),S(0));
--引用component,u1,u2,u3,u4为映像的标识名,port map是关键字,端口按对应顺序写
u2:FullAdder port map(A(1),B(1),C(1),C(2),S(1));
u3:FullAdder port map(A(2),B(2),C(2),C(3),S(2));
u4:FullAdder port map(A(3),B(3),C(3),C(4),S(3));

C(0)<='0';
end a;

呵呵,来拿分了,我也刚学,以后一起研究吧:)本回答被提问者采纳