A component declaration declares a virtual design entity interface that may be used in component instantiation statement.
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 design entity.
The binding of a design entity to a given component may be delayed and may be placed either in the configuration specification or configuration declaration.
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
port(A,B: in BIT_VECTOR(0 to 3);
C: out 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
A component declaration does not define which entity/architecture pair is bound to each instance. Such an information is defined by configuration.