1abstract_literal ::= decimal_literal | based_literal 2 3access_type_definition ::= access subtype_indication 4 5actual_designator ::= 6 expression 7 | signal_name 8 | variable_name 9 | file_name 10 | open 11 12actual_parameter_part ::= parameter_association_list 13 14actual_part ::= 15 actual_designator 16 | function_name ( actual_designator ) 17 | type_mark ( actual_designator ) 18 19adding_operator ::= + | - | & 20 21aggregate ::= 22 ( element_association { , element_association } ) 23 24alias_declaration ::= 25 alias alias_designator [ : subtype_indication ] is name [ signature ] ; 26 27alias_designator ::= identifier | character_literal | operator_symbol 28 29allocator ::= 30 new subtype_indication 31 | new qualified_expression 32 33architecture_body ::= 34 architecture identifier of entity_name is 35 architecture_declarative_part 36 begin 37 architecture_statement_part 38 end [ architecture ] [ architecture_simple_name ] ; 39 40architecture_declarative_part ::= 41 { block_declarative_item } 42 43architecture_statement_part ::= 44 { concurrent_statement } 45 46array_type_definition ::= 47 unconstrained_array_definition | constrained_array_definition 48 49assertion ::= 50 assert condition 51 [ report expression ] 52 [ severity expression ] 53 54assertion_statement ::= [ label : ] assertion ; 55 56association_element ::= 57 [ formal_part => ] actual_part 58 59association_list ::= 60 association_element { , association_element } 61 62attribute_declaration ::= 63 attribute identifier : type_mark ; 64 65attribute_designator ::= attribute_simple_name 66 67attribute_name ::= 68 prefix [ signature ] ' attribute_designator [ ( expression ) ] 69 70attribute_specification ::= 71 attribute attribute_designator of entity_specification is expression ; 72 73base ::= integer 74 75base_specifier ::= B | O | X 76 77base_unit_declaration ::= identifier ; 78 79based_integer ::= 80 extended_digit { [ underline ] extended_digit } 81 82based_literal ::= 83 base # based_integer [ . based_integer ] # [ exponent ] 84 85basic_character ::= 86 basic_graphic_character | format_effector 87 88basic_graphic_character ::= 89 upper_case_letter | digit | special_character| space_character 90 91basic_identifier ::= 92 letter { [ underline ] letter_or_digit } 93 94binding_indication ::= 95 [ use entity_aspect ] 96 [ generic_map_aspect ] 97 [ port_map_aspect ] 98 99bit_string_literal ::= base_specifier " bit_value " 100 101bit_value ::= extended_digit { [ underline ] extended_digit } 102 103block_configuration ::= 104 for block_specification 105 { use_clause } 106 { configuration_item } 107 end for ; 108 109block_declarative_item ::= 110 subprogram_declaration 111 | subprogram_body 112 | type_declaration 113 | subtype_declaration 114 | constant_declaration 115 | signal_declaration 116 | shared_variable_declaration 117 | file_declaration 118 | alias_declaration 119 | component_declaration 120 | attribute_declaration 121 | attribute_specification 122 | configuration_specification 123 | disconnection_specification 124 | use_clause 125 | group_template_declaration 126 | group_declaration 127 128block_declarative_part ::= 129 { block_declarative_item } 130 131block_header ::= 132 [ generic_clause 133 [ generic_map_aspect ; ] ] 134 [ port_clause 135 [ port_map_aspect ; ] ] 136 137block_specification ::= 138 architecture_name 139 | block_statement_label 140 | generate_statement_label [ ( index_specification ) ] 141 142block_statement ::= 143 block_label : 144 block [ ( guard_expression ) ] [ is ] 145 block_header 146 block_declarative_part 147 begin 148 block_statement_part 149 end block [ block_label ] ; 150 151block_statement_part ::= 152 { concurrent_statement } 153 154case_statement ::= 155 [ case_label : ] 156 case expression is 157 case_statement_alternative 158 { case_statement_alternative } 159 end case [ case_label ] ; 160 161case_statement_alternative ::= 162 when choices => 163 sequence_of_statements 164 165character_literal ::= ' graphic_character ' 166 167choice ::= 168 simple_expression 169 | discrete_range 170 | element_simple_name 171 | others 172 173choices ::= choice { | choice } 174 175component_configuration ::= 176 for component_specification 177 [ binding_indication ; ] 178 [ block_configuration ] 179 end for ; 180 181component_declaration ::= 182 component identifier [ is ] 183 [ local_generic_clause ] 184 [ local_port_clause ] 185 end component [ component_simple_name ] ; 186 187component_instantiation_statement ::= 188 instantiation_label : 189 instantiated_unit 190 [ generic_map_aspect ] 191 [ port_map_aspect ] ; 192 193component_specification ::= 194 instantiation_list : component_name 195 196composite_type_definition ::= 197 array_type_definition 198 | record_type_definition 199 200concurrent_assertion_statement ::= 201 [ label : ] [ postponed ] assertion ; 202 203concurrent_procedure_call_statement ::= 204 [ label : ] [ postponed ] procedure_call ; 205 206concurrent_signal_assignment_statement ::= 207 [ label : ] [ postponed ] conditional_signal_assignment 208 | [ label : ] [ postponed ] selected_signal_assignment 209 210concurrent_statement ::= 211 block_statement 212 | process_statement 213 | concurrent_procedure_call_statement 214 | concurrent_assertion_statement 215 | concurrent_signal_assignment_statement 216 | component_instantiation_statement 217 | generate_statement 218 219condition ::= boolean_expression 220 221condition_clause ::= until condition 222 223conditional_signal_assignment ::= 224 target <= options conditional_waveforms ; 225 226conditional_waveforms ::= 227 { waveform when condition else } 228 waveform [ when condition ] 229 230configuration_declaration ::= 231 configuration identifier of entity_name is 232 configuration_declarative_part 233 block_configuration 234 end [ configuration ] [ configuration_simple_name ] ; 235 236configuration_declarative_item ::= 237 use_clause 238 | attribute_specification 239 | group_declaration 240 241configuration_declarative_part ::= 242 { configuration_declarative_item } 243 244configuration_item ::= 245 block_configuration 246 | component_configuration 247 248configuration_specification ::= 249 for component_specification binding_indication ; 250 251constant_declaration ::= 252 constant identifier_list : subtype_indication [ := expression ] ; 253 254constrained_array_definition ::= 255 array index_constraint of element_subtype_indication 256 257constraint ::= 258 range_constraint 259 | index_constraint 260 261context_clause ::= { context_item } 262 263context_item ::= 264 library_clause 265 | use_clause 266 267decimal_literal ::= integer [ . integer ] [ exponent ] 268 269declaration ::= 270 type_declaration 271 | subtype_declaration 272 | object_declaration 273 | interface_declaration 274 | alias_declaration 275 | attribute_declaration 276 | component_declaration 277 | group_template_declaration 278 | group_declaration 279 | entity_declaration 280 | configuration_declaration 281 | subprogram_declaration 282 | package_declaration 283 284delay_mechanism ::= 285 transport 286 | [ reject time_expression ] inertial 287 288design_file ::= design_unit { design_unit } 289 290design_unit ::= context_clause library_unit 291 292designator ::= identifier | operator_symbol 293 294direction ::= to | downto 295 296disconnection_specification ::= 297 disconnect guarded_signal_specification after time_expression ; 298 299discrete_range ::= discrete_subtype_indication | range 300 301element_association ::= 302 [ choices => ] expression 303 304element_declaration ::= 305 identifier_list : element_subtype_definition ; 306 307element_subtype_definition ::= subtype_indication 308 309entity_aspect ::= 310 entity entity_name [ ( architecture_identifier) ] 311 | configuration configuration_name 312 | open 313 314entity_class ::= 315 entity | architecture | configuration 316 | procedure | function | package 317 | type | subtype | constant 318 | signal | variable | component 319 | label | literal | units 320 | group | file 321 322entity_class_entry ::= entity_class [ <> ] 323 324entity_class_entry_list ::= 325 entity_class_entry { , entity_class_entry } 326 327entity_declaration ::= 328 entity identifier is 329 entity_header 330 entity_declarative_part 331 [ begin 332 entity_statement_part ] 333 end [ entity ] [ entity_simple_name ] ; 334 335entity_declarative_item ::= 336 subprogram_declaration 337 | subprogram_body 338 | type_declaration 339 | subtype_declaration 340 | constant_declaration 341 | signal_declaration 342 | shared_variable_declaration 343 | file_declaration 344 | alias_declaration 345 | attribute_declaration 346 | attribute_specification 347 | disconnection_specification 348 | use_clause 349 | group_template_declaration 350 | group_declaration 351 352entity_declarative_part ::= 353 { entity_declarative_item } 354 355entity_designator ::= entity_tag [ signature ] 356 357entity_header ::= 358 [ formal_generic_clause ] 359 [ formal_port_clause ] 360 361entity_name_list ::= 362 entity_designator { , entity_designator } 363 | others 364 | all 365 366entity_specification ::= 367 entity_name_list : entity_class 368 369entity_statement ::= 370 concurrent_assertion_statement 371 | passive_concurrent_procedure_call_statement 372 | passive_process_statement 373 374entity_statement_part ::= 375 { entity_statement } 376 377entity_tag ::= simple_name | character_literal | operator_symbol 378 379enumeration_literal ::= identifier | character_literal 380 381enumeration_type_definition ::= 382 ( enumeration_literal { , enumeration_literal } ) 383 384exit_statement ::= 385 [ label : ] exit [ loop_label ] [ when condition ] ; 386 387exponent ::= E [ + ] integer | E - integer 388 389expression ::= 390 relation { and relation } 391 | relation { or relation } 392 | relation { xor relation } 393 | relation [ nand relation ] 394 | relation [ nor relation ] 395 | relation { xnor relation } 396 397extended_digit ::= digit | letter 398 399extended_identifier ::= 400 \ graphic_character { graphic_character } \ 401 402factor ::= 403 primary [ ** primary ] 404 | abs primary 405 | not primary 406 407file_declaration ::= 408 file identifier_list : subtype_indication file_open_information ] ; 409 410file_logical_name ::= string_expression 411 412file_open_information ::= 413 [ open file_open_kind_expression ] is file_logical_name 414 415file_type_definition ::= 416 file of type_mark 417 418floating_type_definition := range_constraint 419 420formal_designator ::= 421 generic_name 422 | port_name 423 | parameter_name 424 425formal_parameter_list ::= parameter_interface_list 426 427formal_part ::= 428 formal_designator 429 | function_name ( formal_designator ) 430 | type_mark ( formal_designator ) 431 432full_type_declaration ::= 433 type identifier is type_definition ; 434 435function_call ::= 436 function_name [ ( actual_parameter_part ) ] 437 438generate_statement ::= 439 generate_label : 440 generation_scheme generate 441 [ { block_declarative_item } 442 begin ] 443 { concurrent_statement } 444 end generate [ generate_label ] ; 445 446generation_scheme ::= 447 for generate_parameter_specification 448 | if condition 449 450generic_clause ::= 451 generic ( generic_list ) ; 452 453generic_list ::= generic_interface_list 454 455generic_map_aspect ::= 456 generic map ( generic_association_list ) 457 458graphic_character ::= 459 basic_graphic_character | lower_case_letter | other_special_character 460 461group_constituent ::= name | character_literal 462 463group_constituent_list ::= group_constituent { , group_constituent } 464 465group_template_declaration ::= 466 group identifier is ( entity_class_entry_list ) ; 467 468group_declaration ::= 469 group identifier : group_template_name ( group_constituent_list ) ; 470 471guarded_signal_specification ::= 472 guarded_signal_list : type_mark 473 474identifier ::= 475 basic_identifier | extended_identifier 476 477identifier_list ::= identifier { , identifier } 478 479if_statement ::= 480 [ if_label : ] 481 if condition then 482 sequence_of_statements 483 { elsif condition then 484 sequence_of_statements } 485 [ else 486 sequence_of_statements ] 487 end if [ if_label ] ; 488 489incomplete_type_declaration ::= type identifier ; 490 491index_constraint ::= ( discrete_range { , discrete_range } ) 492 493index_specification ::= 494 discrete_range 495 | static_expression 496 497index_subtype_definition ::= type_mark range <> 498 499indexed_name ::= prefix ( expression { , expression } ) 500 501instantiated_unit ::= 502 [ component ] component_name 503 | entity entity_name [ ( architecture_identifier ) ] 504 | configuration configuration_name 505 506instantiation_list ::= 507 instantiation_label { , instantiation_label } 508 | others 509 | all 510 511integer ::= digit { [ underline ] digit } 512 513integer_type_definition ::= range_constraint 514 515interface_constant_declaration ::= 516 [ constant ] identifier_list : [ in ] subtype_indication [ := static_expression ] 517 518interface_declaration ::= 519 interface_constant_declaration 520 | interface_signal_declaration 521 | interface_variable_declaration 522 | interface_file_declaration 523 524interface_element ::= interface_declaration 525 526interface_file_declaration ::= 527 file identifier_list : subtype_indication 528 529interface_list ::= 530 interface_element { ; interface_element } 531 532interface_signal_declaration ::= 533 [signal] identifier_list : [ mode ] subtype_indication [ bus ] [ := static_expression ] 534 535interface_variable_declaration ::= 536 [variable] identifier_list : [ mode ] subtype_indication [ := static_expression ] 537 538iteration_scheme ::= 539 while condition 540 | for loop_parameter_specification 541 542label ::= identifier 543 544letter ::= upper_case_letter | lower_case_letter 545 546letter_or_digit ::= letter | digit 547 548library_clause ::= library logical_name_list ; 549 550library_unit ::= 551 primary_unit 552 | secondary_unit 553 554literal ::= 555 numeric_literal 556 | enumeration_literal 557 | string_literal 558 | bit_string_literal 559 | null 560 561logical_name ::= identifier 562 563logical_name_list ::= logical_name { , logical_name } 564 565logical_operator ::= and | or | nand | nor | xor | xnor 566 567loop_statement ::= 568 [ loop_label : ] 569 [ iteration_scheme ] loop 570 sequence_of_statements 571 end loop [ loop_label ] ; 572 573miscellaneous_operator ::= ** | abs | not 574 575mode ::= in | out | inout | buffer | linkage 576 577multiplying_operator ::= * | / | mod | rem 578 579name ::= 580 simple_name 581 | operator_symbol 582 | selected_name 583 | indexed_name 584 | slice_name 585 | attribute_name 586 587next_statement ::= 588 [ label : ] next [ loop_label ] [ when condition ] ; 589 590null_statement ::= [ label : ] null ; 591 592numeric_literal ::= 593 abstract_literal 594 | physical_literal 595 596object_declaration ::= 597 constant_declaration 598 | signal_declaration 599 | variable_declaration 600 | file_declaration 601 602operator_symbol ::= string_literal 603 604options ::= [ guarded ] [ delay_mechanism ] 605 606package_body ::= 607 package body package_simple_name is 608 package_body_declarative_part 609 end [ package body ] [ package_simple_name ] ; 610 611package_body_declarative_item ::= 612 subprogram_declaration 613 | subprogram_body 614 | type_declaration 615 | subtype_declaration 616 | constant_declaration 617 | shared_variable_declaration 618 | file_declaration 619 | alias_declaration 620 | use_clause 621 | group_template_declaration 622 | group_declaration 623 624package_body_declarative_part ::= 625 { package_body_declarative_item } 626 627package_declaration ::= 628 package identifier is 629 package_declarative_part 630 end [ package ] [ package_simple_name ] ; 631 632package_declarative_item ::= 633 subprogram_declaration 634 | type_declaration 635 | subtype_declaration 636 | constant_declaration 637 | signal_declaration 638 | shared_variable_declaration 639 | file_declaration 640 | alias_declaration 641 | component_declaration 642 | attribute_declaration 643 | attribute_specification 644 | disconnection_specification 645 | use_clause 646 | group_template_declaration 647 | group_declaration 648 649package_declarative_part ::= 650 { package_declarative_item } 651 652parameter_specification ::= 653 identifier in discrete_range 654 655physical_literal ::= [ abstract_literal ] unit_name 656 657physical_type_definition ::= 658 range_constraint 659 units 660 base_unit_declaration 661 { secondary_unit_declaration } 662 end units [ physical_type_simple_name ] 663 664port_clause ::= 665 port ( port_list ) ; 666 667port_list ::= port_interface_list 668 669port_map_aspect ::= 670 port map ( port_association_list ) 671 672prefix ::= 673 name 674 | function_call 675 676primary ::= 677 name 678 | literal 679 | aggregate 680 | function_call 681 | qualified_expression 682 | type_conversion 683 | allocator 684 | ( expression ) 685 686primary_unit ::= 687 entity_declaration 688 | configuration_declaration 689 | package_declaration 690 691procedure_call ::= procedure_name [ ( actual_parameter_part ) ] 692 693procedure_call_statement ::= 694 [ label : ] procedure_call ; 695 696process_declarative_item ::= 697 subprogram_declaration 698 | subprogram_body 699 | type_declaration 700 | subtype_declaration 701 | constant_declaration 702 | variable_declaration 703 | file_declaration 704 | alias_declaration 705 | attribute_declaration 706 | attribute_specification 707 | use_clause 708 | group_template_declaration 709 | group_declaration 710 711process_declarative_part ::= 712 { process_declarative_item } 713 714process_statement ::= 715 [ process_label : ] 716 [ postponed ] process [ ( sensitivity_list ) ] [ is ] 717 process_declarative_part 718 begin 719 process_statement_part 720 end [ postponed ] process [ process_label ] ; 721 722process_statement_part ::= 723 { sequential_statement } 724 725qualified_expression ::= 726 type_mark ' ( expression ) 727 | type_mark ' aggregate 728 729range ::= 730 range_attribute_name 731 | simple_expression direction simple_expression 732 733range_constraint ::= range range 734 735record_type_definition ::= 736 record 737 element_declaration 738 { element_declaration } 739 end record [ record_type_simple_name ] 740 741relation ::= 742 shift_expression [ relational_operator shift_expression ] 743 744relational_operator ::= = | /= | < | <= | > | >= 745 746report_statement ::= 747 [ label : ] 748 report expression 749 [ severity expression ] ; 750 751return_statement ::= 752 [ label : ] return [ expression ] ; 753 754scalar_type_definition ::= 755 enumeration_type_definition | integer_type_definition 756 | floating_type_definition | physical_type_definition 757 758secondary_unit ::= 759 architecture_body 760 | package_body 761 762secondary_unit_declaration ::= identifier = physical_literal ; 763 764selected_name ::= prefix . suffix 765 766selected_signal_assignment ::= 767 with expression select 768 target <= options selected_waveforms ; 769 770selected_waveforms ::= 771 { waveform when choices , } 772 waveform when choices 773 774sensitivity_clause ::= on sensitivity_list 775 776sensitivity_list ::= signal_name { , signal_name } 777 778sequence_of_statements ::= 779 { sequential_statement } 780 781sequential_statement ::= 782 wait_statement 783 | assertion_statement 784 | report_statement 785 | signal_assignment_statement 786 | variable_assignment_statement 787 | procedure_call_statement 788 | if_statement 789 | case_statement 790 | loop_statement 791 | next_statement 792 | exit_statement 793 | return_statement 794 | null_statement 795 796shift_expression ::= 797 simple_expression [ shift_operator simple_expression ] 798 799shift_operator ::= sll | srl | sla | sra | rol | ror 800 801sign ::= + | - 802 803signal_assignment_statement ::= 804 [ label : ] target <= [ delay_mechanism ] waveform ; 805 806signal_declaration ::= 807 signal identifier_list : subtype_indication [ signal_kind ] [ := expression ] ; 808 809signal_kind ::= register | bus 810 811signal_list ::= 812 signal_name { , signal_name } 813 | others 814 | all 815 816signature ::= [ [ type_mark { , type_mark } ] [ return type_mark ] ] 817 818simple_expression ::= 819 [ sign ] term { adding_operator term } 820 821simple_name ::= identifier 822 823slice_name ::= prefix ( discrete_range ) 824 825string_literal ::= " { graphic_character } " 826 827subprogram_body ::= 828 subprogram_specification is 829 subprogram_declarative_part 830 begin 831 subprogram_statement_part 832 end [ subprogram_kind ] [ designator ] ; 833 834subprogram_declaration ::= 835 subprogram_specification ; 836 837subprogram_declarative_item ::= 838 subprogram_declaration 839 | subprogram_body 840 | type_declaration 841 | subtype_declaration 842 | constant_declaration 843 | variable_declaration 844 | file_declaration 845 | alias_declaration 846 | attribute_declaration 847 | attribute_specification 848 | use_clause 849 | group_template_declaration 850 | group_declaration 851 852subprogram_declarative_part ::= 853 { subprogram_declarative_item } 854 855subprogram_kind ::= procedure | function 856 857subprogram_specification ::= 858 procedure designator [ ( formal_parameter_list ) ] 859 | [ pure | impure ] function designator [ ( formal_parameter_list ) ] 860 return type_mark 861 862subprogram_statement_part ::= 863 { sequential_statement } 864 865subtype_declaration ::= 866 subtype identifier is subtype_indication ; 867 868subtype_indication ::= 869 [ resolution_function_name ] type_mark [ constraint ] 870 871suffix ::= 872 simple_name 873 | character_literal 874 | operator_symbol 875 | all 876 877target ::= 878 name 879 | aggregate 880 881term ::= 882 factor { multiplying_operator factor } 883 884timeout_clause ::= for time_expression 885 886type_conversion ::= type_mark ( expression ) 887 888type_declaration ::= 889 full_type_declaration 890 | incomplete_type_declaration 891 892type_definition ::= 893 scalar_type_definition 894 | composite_type_definition 895 | access_type_definition 896 | file_type_definition 897 898type_mark ::= 899 type_name 900 | subtype_name 901 902unconstrained_array_definition ::= 903 array ( index_subtype_definition { , index_subtype_definition } ) 904 of element_subtype_indication 905 906use_clause ::= 907 use selected_name { , selected_name } ; 908 909variable_assignment_statement ::= 910 [ label : ] target := expression ; 911 912variable_declaration ::= 913 [ shared ] variable identifier_list : subtype_indication [ := expression ] ; 914 915wait_statement ::= 916 [ label : ] wait [ sensitivity_clause ] [ condition_clause ] [ timeout_clause ] ; 917 918waveform ::= 919 waveform_element { , waveform_element } 920 | unaffected 921 922waveform_element ::= 923 value_expression [ after time_expression ] 924 | null [ after time_expression ] 925 926