A named collection of named entities. Groups relate different named entities for the purposes not specified by the language. In particular, groups may be decorated with attributes.
group group_template_name is ( entity_class_list ) ;
group group_name : group_template_name ( group_constituent_list );
The user-defined attributes are connected individually with each named entity. That is why each separate named entity can have its own attributes. In case when the user wants to assign information to several related named entities, he/she should define a group consisting of these units, and then specify attributes for the entire group. The set of units with the specified characteristics can be defined by means of group declaration. The group declaration in turn requires group template declaration to be defined earlier.
The group template declaration defines pattern of a group connecting named entities with the specified class. The set of possible entity classes contains entity, architecture, configuration, procedure, function, package, type, subtype, constant, signal, variable, component, label, literal, units, group, and file. Each entity class entry defines an entity class that may appear at that particular position in the group type (Example 1).
The box symbol (<>) can be used together with the name of an entity class to allow zero or more units belonging to this group (Example 2). If such a declaration appears on the list, it must be the last one.
Group declaration connects named entities having the specified characteristics.
The group declaration consists of identifier, group template name and group constituent list. The identifier represents a group, the group template name indicates group's template declaration, and the group constituent indicates the chosen named entities belonging to this group (Example 3).
The attribute specification of a group is realized in a similar way to other attribute specifications. First, the attribute of a given type is declared and it is specified for the given group in its declaration part which contains declaration of the particular group (Example 4).
Example 1
group Variable_group is ( variable, variable );
The Variable_group template group declaration creates two variables
which serve as a pattern for the variables belonging to this group.
Example 2
group Component_group is ( component <> );
The Component_group pattern declaration creates a group, which
consists of a component list of arbitrary length.
Example 3
group Input_pair : Variable_group ( A1, A2 );
The Input_pair group declaration creates a group, which consists of
A1 and A2 variables and is based on the Variable_group group template
(declared in Example
1).
Example 4
function Compute_Values (A,
B:Integer) return BOOLEAN is
variable A1, A2: Integer;
group Variable_group is
( variable, variable );
group Input_pair :
Variable_group ( A1, A2 );
attribute Input_name: String;
attribute Input_name of
Input_pair : group is
"Input variables";
begin
.......
end function;
The value of the attribute Input_name for the group Input_pair is
equal to Input variables.
Groups can be nested.