component-declaration :
COMPONENT simple-name
[ generic-clause ]
[ port-clause ]
END COMPONENT ";"
Let's divert from the subject of declarations momentarily to describe the component specification. The component declaration only describes the interface to the component. In the introduction to the structural model, it was mentioned that, by default, the compiler assumes there are entities declared elsewhere with the same name as the components. The componenet specification is used to indicate which entity or architecture to use for a component, overriding the default behavior.
The following is the grammar rule for the component specification:
instantiation-list : name-list | OTHERS | ALL
entity-aspect : ENTITY name(entity) [ "(" name(architecture) ")" ]
binding-specification : entity-aspect [ generic-map ] [ port-map ]
component-specification :
FOR instantiation-list ":" name(component) USE
binding-specification ";"
The entity aspect part names the entity that is used for the component. If the architecture name does not appear in the entity aspect, then the last architecture compiled for that entity is used. The generic and port map parts describe how the ports and generics of the entity are mapped to the ports and generics of the component. If the port or generic map does not appear, then a default mapping is used, mapping ports and generics of the same name together. Port and generic maps are described more in the concurrent statement section describing block statements.