====== Attribute specification ======
===== attribute_specification =====
attribute attribute_designator of entity_specification is expression ;
===== Parents =====
* entity_declarative_part
* architecture_declarative_part
* configuration_declarative_part
* package
* block_declarative_part
* function_declarative_part
* procedure_declarative_part
* process_declarative_part
===== Further definitions =====
==== attribute_designator ====
''attribute _[[.:bnf#simple_name]]''
==== entity_specification ====
''[[.:bnf#entity_name_list]] : [[.:bnf#entity_class]]''
==== expression ====
* [[.:bnf#relation]] { and relation }
* relation { or relation }
* relation { xor relation }
* relation [ nand relation ]
* relation [ nor relation ]
* relation { xnor relation }
===== Examples =====
Values for the attribute //pin_number// are determined. For the signal //cin// the attribute value is //10// and for the signal //cout// it is //5// .
ATTRIBUTE pin_number OF cin :
SIGNAL IS 10 ;
ATTRIBUTE pin_number OF cout :
SIGNAL IS 5 ;
----
For the label //adder_1// the value of the attribute //instance_location// is (//10,15//) ; for all other labels it is (//25,65//) .
ATTRIBUTE instance_location OF
adder_1 : LABEL IS ( 10, 15 ) ;
ATTRIBUTE instance_location OF
OTHERS : LABEL IS ( 25, 65 ) ;
----
* The attribute //author// of the entity //add_entity// is seized by the string //Martin// .
* The attribute //is_generic// of the component //cmos_nand// is seized by the value //false// .
* The attribute //creation_date// of the architecture //add_arc// is seized by the Record (//14,Aug,95//) .
* The attribute //safety// of the procedure //arithm_conv// is seized by the value //bug// .
* The attribute //confidentiality// of the package //cmos_pkg// is seized by the value //restrictive// .
ATTRIBUTE author OF add_entity :
ENTITY IS "Martin" ;
ATTRIBUTE is_generic OF cmos_nand :
COMPONENT IS false ;
ATTRIBUTE creation_date OF add_arc :
ARCHITECTURE IS (11, aug, 95) ;
ATTRIBUTE safety OF arithm_conv :
PROCEDURE IS bug ;
ATTRIBUTE confidentiality OF cmos_pkg : PACKAGE IS restrictive ;
----
By using [[.:predefined attributes]] the loop instruction can be written in a different way as well:
FOR i IN a1'LOW TO a1'HIGH
FOR i IN a1'RIGHT TO a1'LEFT
FOR i IN a1'REVERSE_RANGE
FOR i IN a1'RANGE
SIGNAL a1: bit_vector(3 DOWNTO 0) ;
...
PROCESS (a)
BEGIN
z<= "0000" :
FOR i in 0 TO 3 LOOP
IF (a = i) THEN
z(i) <= '1' ;
END IF ;
END LOOP ;
END PROCESS ;
...