A component declaration declares a
virtual design entity interface that may be used in component
component component_name [ is ]
end component component_name;
A component represents an entity/architecture pair. It specifies a
subsystem, which can be instantiated
in another architecture leading to a hierarchical
specification. Component instantiation is like plugging a hardware
component into a socket in a board (Fig. 1 in Example 1).
A component must be declared before it is instantiated. The component
declaration defines the virtual interface of the instantiated design
entity ("the socket") but it does not directly indicate the
The binding of a design entity to a given component may be delayed
and may be placed either in the configuration specification or
The component can be defined in package,
design entity, architecture, or block
declarations. If the component is declared in an architecture, it
must be declared before the begin
statement of the architecture. In such a case, the component can be
used (instantiated) in the architecture only.
A more universal approach is to declare a component in the package.
Such a component is visible in any architecture, which uses this package.
Generics and ports of a component are copies of generics and ports of
the entity the component represents.
architecture STRUCTURE_2 of
component XOR_4 is
BIT_VECTOR(0 to 3);
BIT_VECTOR(0 to 3));
end component XOR_4;
signal S1,S2 : BIT_VECTOR(0 to 3);
signal S3 : BIT_VECTOR(0 to 3);
X1 : XOR_4 port map(S1,S2,S3);
end architecture STRUCTURE_2;
The XOR_4 component has two 4-bit input ports (A and B) and the 4-bit
output port C. The declaration of this component is located in the
declaration part of the architecture body STRUCTURE_2. The component
instantiation statement assigns the X1 label to instantiated XOR_4
component and it associates its input-output interface with the S1,
S2 and S3 signals.
Figure 1. Example of component
declaration and instantiation