Based on the VHDL 2017 Standard Draft
This document is copyrighted by the IEEE. It is made available for a wide variety of both public and private uses. These include both use, by reference, in laws and regulations, and use in private self-regulation, standardization, and the promotion of engineering practices and methods. By making this document available for use and adoption by public authorities and private users, the IEEE does not waive any rights in copyright to this document.
Sigasi has created this browsable version of the grammar, hoping that it would be useful to you, but without any warranty whatsoever.
More browsable grammars of Hardware Description and Verification languages.
Grammar
- absolute_pathname
- . partial_pathname
- abstract_literal
- decimal_literal
| based_literal - access_incomplete_type_definition
- access access_incomplete_subtype_indication
- access_type_definition
- access subtype_indication
- actual_designator
- [ inertial ] expression
| signal_name
| variable_name
| file_name
| subtype_indication
| subprogram_name
| instantiated_package_name
| open - actual_part
- actual_designator
| function_name ( actual_designator )
| type_mark ( actual_designator ) - adding_operator
- +
| –
| & - aggregate
- ( element_association { , element_association } )
- alias_declaration
- alias alias_designator [ : subtype_indication ] is name [ signature ] ;
- alias_designator
- identifier
| character_literal
| operator_symbol - allocator
- new subtype_indication
| new qualified_expression - anonymous_type_indication
- type is incomplete_type_definition
- architecture_body
- architecture identifier of entity_name is architecture_declarative_part begin architecture_statement_part end [ architecture ] [ architecture_simple_name ] ;
- architecture_declarative_part
- { block_declarative_item }
- architecture_path_name
- entity_simple_name ( architecture_simple_name )
- architecture_statement_part
- { concurrent_statement }
- array_constraint
- index_constraint [ array_element_constraint ]
| ( open ) [ array_element_constraint ] - array_element_constraint
- element_constraint
- array_element_resolution
- resolution_indication
- array_incomplete_type_definition
- array ( array_index_incomplete_type_list ) of element_incomplete_subtype_indication
- array_index_incomplete_type
- index_subtype_definition
| index_constraint
| anonymous_type_indication - array_index_incomplete_type_list
- array_index_incomplete_type { , array_index_incomplete_type }
- array_mode_view_indication
- view ( mode_view_name ) of unresolved_array_subtype_indication
- array_type_definition
- unbounded_array_definition
| constrained_array_definition - assertion
- assert condition [ report expression ] [ severity expression ]
- assertion_statement
- [ label : ] assertion ;
- association_element
- [ formal_part => ] actual_part
- association_list
- association_element { , association_element }
- attribute_declaration
- attribute identifier : type_mark ;
- attribute_designator
- attribute_simple_name
- attribute_name
- prefix [ signature ] ' attribute_designator [ ( expression ) ]
- attribute_specification
- attribute attribute_designator of entity_specification is conditional_expression ;
- base
- integer
- base_specifier
- B
| O
| X
| UB
| UO
| UX
| SB
| SO
| SX
| D - based_integer
- extended_digit { [ _ ] extended_digit }
- based_literal
- base # based_integer [ . based_integer ] # [ exponent ]
- basic_character
- basic_graphic_character
| format_effector - basic_graphic_character
- upper_case_letter
| digit
| special_character
| space_character - basic_identifier
- letter { [ _ ] letter_or_digit }
- binary_miscellaneous_operator
- **
- binding_indication
- [ use entity_aspect ] [ generic_map_aspect ] [ port_map_aspect ]
- bit_string_literal
- [ integer ] base_specifier " [ bit_value ] "
- bit_value
- graphic_character { [ _ ] graphic_character }
- block_configuration
- for block_specification { use_clause } { configuration_item } end for ;
- block_declarative_item
- subprogram_declaration
| subprogram_body
| subprogram_instantiation_declaration
| package_declaration
| package_body
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| mode_view_declaration
| constant_declaration
| signal_declaration
| shared_variable_declaration
| file_declaration
| alias_declaration
| component_declaration
| attribute_declaration
| attribute_specification
| configuration_specification
| disconnection_specification
| use_clause
| group_template_declaration
| group_declaration
| PSL_Property_Declaration
| PSL_Sequence_Declaration
| PSL_Clock_Declaration - block_declarative_part
- { block_declarative_item }
- block_header
- [ generic_clause [ generic_map_aspect ; ] ] [ port_clause [ port_map_aspect ; ] ]
- block_specification
- architecture_name
| block_statement_label
| generate_statement_label [ ( generate_specification ) ] - block_statement
- block_label : block [ ( guard_condition ) ] [ is ] block_header block_declarative_part begin block_statement_part end block [ block_label ] ;
- block_statement_part
- { concurrent_statement }
- case_generate_alternative
- when [ alternative_label : ] choices => generate_statement_body
- case_generate_statement
- generate_label : case expression generate case_generate_alternative { case_generate_alternative } end generate [ generate_label ] ;
- case_statement
- [ case_label : ] case [ ? ] expression is case_statement_alternative { case_statement_alternative } end case [ ? ] [ case_label ] ;
- case_statement_alternative
- when choices => sequential_statement_body
- character_literal
- ' graphic_character '
- choice
- simple_expression
| discrete_range
| element_simple_name
| others - choices
- choice { | choice }
- component_configuration
- for component_specification [ binding_indication ; ] { verification_unit_binding_indication ; } [ block_configuration ] end for ;
- component_declaration
- component identifier [ is ] [ local_generic_clause ] [ local_port_clause ] end component [ component_simple_name ] ;
- component_instantiation_statement
- instantiation_label : instantiated_unit [ generic_map_aspect ] [ port_map_aspect ] ;
- component_specification
- instantiation_list : component_name
- composite_type_definition
- array_type_definition
| record_type_definition - compound_configuration_specification
- for component_specification binding_indication ; verification_unit_binding_indication ; { verification_unit_binding_indication ; } end for ;
- concurrent_assertion_statement
- [ label : ] [ postponed ] assertion ;
- concurrent_conditional_signal_assignment
- target <= [ guarded ] [ delay_mechanism ] conditional_waveforms ;
- concurrent_procedure_call_statement
- [ label : ] [ postponed ] procedure_call ;
- concurrent_selected_signal_assignment
- with expression select [ ? ] target <= [ guarded ] [ delay_mechanism ] selected_waveforms ;
- concurrent_signal_assignment_statement
- [ label : ] [ postponed ] concurrent_simple_signal_assignment
| [ label : ] [ postponed ] concurrent_conditional_signal_assignment
| [ label : ] [ postponed ] concurrent_selected_signal_assignment - concurrent_signal_association_statement
- [ label : ] concurrent_simple_signal_association
- concurrent_simple_signal_assignment
- target <= [ guarded ] [ delay_mechanism ] waveform ;
- concurrent_simple_signal_association
- lhs_signal_association_target <=> rhs_signal_association_target ;
- concurrent_statement
- block_statement
| process_statement
| concurrent_procedure_call_statement
| concurrent_assertion_statement
| concurrent_signal_assignment_statement
| concurrent_signal_association_statement
| component_instantiation_statement
| generate_statement
| PSL_PSL_Directive - condition
- expression
- condition_clause
- until condition
- condition_operator
- ??
- conditional_expression
- expression { when condition else expression }
- conditional_or_unaffected_expression
- expression_or_unaffected { when condition else expression_or_unaffected } [ when condition ]
- conditional_signal_assignment
- target <= [ delay_mechanism ] conditional_waveforms ;
- conditional_waveforms
- waveform when condition { else waveform when condition } [ else waveform ]
- configuration_declaration
- configuration identifier of entity_name is configuration_declarative_part { verification_unit_binding_indication ; } block_configuration end [ configuration ] [ configuration_simple_name ] ;
- configuration_declarative_item
- use_clause
| attribute_specification
| group_declaration - configuration_declarative_part
- { configuration_declarative_item }
- configuration_item
- block_configuration
| component_configuration - configuration_specification
- simple_configuration_specification
| compound_configuration_specification - constant_declaration
- constant identifier_list : subtype_indication [ := conditional_expression ] ;
- constrained_array_definition
- array index_constraint of element_subtype_indication
- constraint
- range_constraint
| array_constraint
| record_constraint - context_clause
- { context_item }
- context_declaration
- context identifier is context_clause end [ context ] [ context_simple_name ] ;
- context_item
- library_clause
| use_clause
| context_reference - context_reference
- context selected_name { , selected_name } ;
- decimal_literal
- integer [ . integer ] [ exponent ]
- delay_mechanism
- transport
| [ reject time_expression ] inertial - design_file
- design_unit { design_unit }
- design_unit
- context_clause library_unit
- designator
- identifier
| operator_symbol - direction
- to
| downto - disconnection_specification
- disconnect guarded_signal_specification after time_expression ;
- discrete_range
- discrete_subtype_indication
| range - discrete_incomplete_type_definition
- ( <> )
- element_array_mode_view_indication
- view ( mode_view_name )
- element_association
- [ choices => ] expression
- element_constraint
- array_constraint
| record_constraint - element_declaration
- identifier_list : element_subtype_definition ;
- element_mode_indication
- mode
| element_mode_view_indication - element_mode_view_indication
- element_record_mode_view_indication
| element_array_mode_view_indication - element_record_mode_view_indication
- view mode_view_name
- element_resolution
- array_element_resolution
| record_resolution - element_subtype_definition
- subtype_indication
- entity_aspect
- entity entity_name [ ( architecture_identifier ) ]
| configuration configuration_name
| open - entity_class
- entity
| architecture
| configuration
| procedure
| function
| package
| type
| subtype
| constant
| variable
| component
| label
| literal
| units
| group
| file
| property
| sequence - entity_class_entry
- entity_class [ <> ]
- entity_class_entry_list
- entity_class_entry { , entity_class_entry }
- entity_declaration
- entity identifier is entity_header entity_declarative_part [ begin entity_statement_part ] end [ entity ] [ entity_simple_name ] ;
- entity_declarative_item
- subprogram_declaration
| subprogram_body
| subprogram_instantiation_declaration
| package_declaration
| package_body
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| mode_view_declaration
| constant_declaration
| signal_declaration
| shared_variable_declaration
| file_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| disconnection_specification
| use_clause
| group_template_declaration
| group_declaration
| PSL_Property_Declaration
| PSL_Sequence_Declaration
| PSL_Clock_Declaration - entity_declarative_part
- { entity_declarative_item }
- entity_designator
- entity_tag [ signature ]
- entity_header
- [ formal_generic_clause ] [ formal_port_clause ]
- entity_name_list
- entity_designator { , entity_designator }
| others
| all - entity_specification
- entity_name_list : entity_class
- entity_statement
- concurrent_assertion_statement
| passive_concurrent_procedure_call_statement
| passive_process_statement
| PSL_PSL_Directive - entity_statement_part
- { entity_statement }
- entity_tag
- simple_name
| character_literal
| operator_symbol - enumeration_literal
- identifier
| character_literal - enumeration_type_definition
- ( enumeration_literal { , enumeration_literal } )
- exit_statement
- [ label : ] exit [ loop_label ] [ when condition ] ;
- exponent
- E [ + ] integer
| E – integer - expression
- condition_operator primary
| logical_expression - expression_or_unaffected
- expression
| unaffected - extended_digit
- digit
| letter - extended_identifier
- \ graphic_character { graphic_character } \
- external_name
- external_constant_name
| external_signal_name
| external_variable_name - external_constant_name
- << constant external_pathname : subtype_indication >>
- external_signal_name
- << signal external_pathname : subtype_indication >>
- external_variable_name
- << variable external_pathname : subtype_indication >>
- external_pathname
- package_pathname
| absolute_pathname
| relative_pathname - factor
- unary_expression [ ** unary_expression ]
- file_declaration
- file identifier_list : subtype_indication [ file_open_information ] ;
- file_incomplete_type_definition
- file of file_incomplete_type_mark
- file_logical_name
- string_expression
- file_open_information
- [ open file_open_kind_expression ] is file_logical_name
- file_type_definition
- file of type_mark
- floating_incomplete_type_definition
- range <> . <>
- floating_type_definition
- range_constraint
- for_generate_statement
- generate_label : for generate_parameter_specification generate generate_statement_body end generate [ generate_label ] ;
- force_mode
- in
| out - formal_designator
- generic_name [ signature ]
| port_name
| parameter_name - formal_parameter_list
- parameter_interface_list
- formal_part
- formal_designator
| function_name ( formal_designator )
| type_mark ( formal_designator ) - full_type_declaration
- type identifier is type_definition ;
- function_call
- function_name [ generic_map_aspect ] [ parameter_map_aspect ]
- function_specification
- [ pure | impure ] function designator subprogram_header [ [ parameter ] ( formal_parameter_list ) ] return [ return_identifier of ] type_mark
- generate_specification
- static_discrete_range
| static_expression
| alternative_label - generate_statement
- for_generate_statement
| if_generate_statement
| case_generate_statement - generate_statement_body
- [ block_declarative_part begin ] { concurrent_statement } [ end [ alternative_label ] ; ]
- generic_clause
- generic ( generic_list ) ;
- generic_list
- generic_interface_list
- generic_map_aspect
- generic map ( generic_association_list )
- graphic_character
- basic_graphic_character
| lower_case_letter
| other_special_character - group_constituent
- name
| character_literal - group_constituent_list
- group_constituent { , group_constituent }
- group_declaration
- group identifier : group_template_name ( group_constituent_list ) ;
- group_template_declaration
- group identifier is ( entity_class_entry_list ) ;
- guarded_signal_specification
- guarded_signal_list : type_mark
- identifier
- basic_identifier
| extended_identifier - identifier_list
- identifier { , identifier }
- if_generate_statement
- generate_label : if [ alternative_label : ] condition generate generate_statement_body { elsif [ alternative_label : ] condition generate generate_statement_body } [ else [ alternative_label : ] generate generate_statement_body ] end generate [ generate_label ] ;
- if_statement
- [ if_label : ] if condition then sequential_statement_body { elsif condition then sequential_statement_body } [ else sequential_statement_body ] end if [ if_label ] ;
- incomplete_subtype_indication
- subtype_indication
| anonymous_type_indication - incomplete_type_declaration
- type identifier ;
- incomplete_type_definition
- private_incomplete_type_definition
| scalar_incomplete_type_definition
| discrete_incomplete_type_definition
| integer_incomplete_type_definition
| physical_incomplete_type_definition
| floating_incomplete_type_definition
| array_incomplete_type_definition
| access_incomplete_type_definition
| file_incomplete_type_definition - incomplete_type_mark
- type_mark
| anonymous_type_indication - index_constraint
- ( discrete_range { , discrete_range } )
- index_subtype_definition
- type_mark range <>
- indexed_name
- prefix ( expression { , expression } )
- instantiated_unit
- [ component ] component_name
| entity entity_name [ ( architecture_identifier ) ]
| configuration configuration_name - instantiation_list
- instantiation_label { , instantiation_label }
| others
| all - integer
- digit { [ _ ] digit }
- integer_incomplete_type_definition
- range <>
- integer_type_definition
- range_constraint
- interface_constant_declaration
- [ constant ] identifier_list : [ in ] interface_type_indication [ := static_conditional_expression ]
- interface_declaration
- interface_object_declaration
| interface_type_declaration
| interface_subprogram_declaration
| interface_package_declaration - interface_element
- interface_declaration
- interface_file_declaration
- file identifier_list : subtype_indication
- interface_function_specification
- [ pure | impure ] function designator [ [ parameter ] ( formal_parameter_list ) ] return type_mark
- interface_incomplete_type_declaration
- type identifier
- interface_list
- interface_element { ; interface_element }
- interface_object_declaration
- interface_constant_declaration
| interface_signal_declaration
| interface_variable_declaration
| interface_file_declaration - interface_package_declaration
- package identifier is new uninstantiated_package_name interface_package_generic_map_aspect
- interface_package_generic_map_aspect
- generic_map_aspect
| generic map ( <> )
| generic map ( default ) - interface_procedure_specification
- procedure designator [ [ parameter ] ( formal_parameter_list ) ]
- interface_signal_declaration
- [ signal ] identifier_list : [ mode ] interface_type_indication [ bus ] [ := static_conditional_expression ]
- interface_subprogram_declaration
- interface_subprogram_specification [ is interface_subprogram_default ]
- interface_subprogram_default
- subprogram_name
| <> - interface_subprogram_specification
- interface_procedure_specification
| interface_function_specification - interface_type_declaration
- interface_incomplete_type_declaration
- interface_type_indication
- subtype_indication
| anonymous_type_indication - interface_variable_declaration
- [ variable ] identifier_list : [ mode ] interface_type_indication [ := static_expression ]
- iteration_scheme
- while condition
| for loop_parameter_specification - label
- identifier
- letter
- upper_case_letter
| lower_case_letter - letter_or_digit
- letter
| digit - library_clause
- library logical_name_list ;
- library_unit
- primary_unit
| secondary_unit - literal
- numeric_literal
| enumeration_literal
| string_literal
| bit_string_literal
| null - logical_expression
- relation { and relation }
| relation { or relation }
| relation { xor relation }
| relation [ nand relation ]
| relation [ nor relation ]
| relation { xnor relation } - logical_name
- identifier
- logical_name_list
- logical_name { , logical_name }
- logical_operator
- and
| or
| nand
| nor
| xor
| xnor - loop_statement
- [ loop_label : ] [ iteration_scheme ] loop sequential_statement_body end loop [ loop_label ] ;
- miscellaneous_operator
- **
| abs
| not - mode
- in
| out
| inout
| buffer
| linkage - mode_indication
- simple_mode_indication
| mode_view_indication - mode_view_declaration
- view identifier of unresolved_record_subtype_indication is { mode_view_element_definition } end view [ mode_view_simple_name ] ;
- mode_view_element_definition
- record_element_list : element_mode_indication ;
- mode_view_indication
- record_mode_view_indication
| array_mode_view_indication - multiplying_operator
- *
| /
| mod
| rem - name
- simple_name
| operator_symbol
| character_literal
| selected_name
| indexed_name
| slice_name
| attribute_name
| external_name - next_statement
- [ label : ] next [ loop_label ] [ when condition ] ;
- null_statement
- [ label : ] null ;
- numeric_literal
- abstract_literal
| physical_literal - object_declaration
- constant_declaration
| signal_declaration
| variable_declaration
| file_declaration - operator_symbol
- string_literal
- package_body
- package body package_simple_name is package_body_declarative_part end [ package body ] [ package_simple_name ] ;
- package_body_declarative_item
- subprogram_declaration
| subprogram_body
| subprogram_instantiation_declaration
| package_declaration
| package_body
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| mode_view_declaration
| constant_declaration
| variable_declaration
| file_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| use_clause
| group_template_declaration
| group_declaration - package_body_declarative_part
- { package_body_declarative_item }
- package_declaration
- package identifier is package_header package_declarative_part end [ package ] [ package_simple_name ] ;
- package_declarative_item
- subprogram_declaration
| subprogram_instantiation_declaration
| package_declaration
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| constant_declaration
| signal_declaration
| variable_declaration
| file_declaration
| alias_declaration
| component_declaration
| attribute_declaration
| attribute_specification
| disconnection_specification
| use_clause
| group_template_declaration
| group_declaration
| PSL_Property_Declaration
| PSL_Sequence_Declaration - package_declarative_part
- { package_declarative_item }
- package_header
- [ generic_clause [ generic_map_aspect ; ] ]
- package_instantiation_declaration
- package identifier is new uninstantiated_package_name [ generic_map_aspect ] ;
- package_pathname
- @ library_logical_name . { package_simple_name . } object_simple_name
- parameter_map_aspect
- [ parameter map ] ( parameter_association_list )
- parameter_specification
- identifier in discrete_range
- partial_pathname
- { pathname_element . } object_simple_name
- pathname_element
- entity_simple_name
| component_instantiation_label
| block_label
| generate_statement_label [ ( static_expression ) ]
| package_simple_name - physical_incomplete_type_definition
- units <>
- physical_literal
- [ abstract_literal ] unit_name
- physical_type_definition
- range_constraint units primary_unit_declaration { secondary_unit_declaration } end units [ physical_type_simple_name ]
- plain_return_statement
- [ label : ] return [ when condition ] ;
- port_clause
- port ( port_list ) ;
- port_list
- port_interface_list
- port_map_aspect
- port map ( port_association_list )
- prefix
- name
| function_call - primary
- name
| literal
| aggregate
| function_call
| qualified_expression
| type_conversion
| allocator
| ( conditional_expression ) - primary_unit
- entity_declaration
| configuration_declaration
| package_declaration
| package_instantiation_declaration
| context_declaration
| PSL_Verification_Unit - primary_unit_declaration
- identifier ;
- private_variable_declaration
- private variable_declaration
- private_incomplete_type_definition
- private
- procedure_call
- procedure_name [ parameter_map_aspect ]
- procedure_call_statement
- [ label : ] procedure_call ;
- procedure_specification
- procedure designator subprogram_header [ [ parameter ] ( formal_parameter_list ) ]
- process_declarative_item
- subprogram_declaration
| subprogram_body
| subprogram_instantiation_declaration
| package_declaration
| package_body
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| constant_declaration
| variable_declaration
| file_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| use_clause
| group_template_declaration
| group_declaration - process_declarative_part
- { process_declarative_item }
- process_sensitivity_list
- all
| sensitivity_list - process_statement
- [ process_label : ] [ postponed ] process [ ( process_sensitivity_list ) ] [ is ] process_declarative_part begin process_statement_part end [ postponed ] process [ process_label ] ;
- process_statement_part
- { sequential_statement }
- protected_type_body
- protected body protected_type_body_declarative_part end protected body [ protected_type_simple_name ]
- protected_type_body_declarative_item
- subprogram_declaration
| subprogram_body
| subprogram_instantiation_declaration
| package_declaration
| package_body
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| constant_declaration
| variable_declaration
| file_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| use_clause
| group_template_declaration
| group_declaration - protected_type_body_declarative_part
- { protected_type_body_declarative_item }
- protected_type_declaration
- protected protected_type_header protected_type_declarative_part end protected [ protected_type_simple_name ]
- protected_type_declarative_item
- subprogram_declaration
| subprogram_instantiation_declaration
| attribute_specification
| use_clause
| private_variable_declaration
| alias_declaration - protected_type_declarative_part
- { protected_type_declarative_item }
- protected_type_definition
- protected_type_declaration
| protected_type_body - protected_type_header
- [ generic_clause [ generic_map_aspect ; ] ]
- protected_type_instantiation_definition
- new uninstantiated_protected_type_name [ generic_map_aspect ]
- qualified_expression
- type_mark ( expression )
| type_mark aggregate
| type_mark ' ( ) - range
- range_attribute_name
| simple_range
| range_expression - range_constraint
- range range
- record_constraint
- ( record_element_constraint { , record_element_constraint } )
- record_element_constraint
- record_element_simple_name element_constraint
- record_element_list
- record_element_simple_name { , record_element_simple_name }
- record_element_resolution
- record_element_simple_name resolution_indication
- record_resolution
- record_element_resolution { , record_element_resolution }
- record_type_definition
- record { element_declaration } end record [ record_type_simple_name ]
- record_mode_view_indication
- view mode_view_name [ of unresolved_record_subtype_indication ]
- relation
- shift_expression [ relational_operator shift_expression ]
- relational_operator
- =
| /=
| <
| <=
| >
| >=
| ?=
| ?/=
| ?<
| ?<=
| ?>
| ?>= - relative_pathname
- { ^ . } partial_pathname
- report_statement
- [ label : ] report expression [ severity expression ] ;
- resolution_indication
- resolution_function_name
| ( element_resolution ) - return_statement
- plain_return_statement
| value_return_statement - scalar_incomplete_type_definition
- <>
- scalar_type_definition
- enumeration_type_definition
| integer_type_definition
| floating_type_definition
| physical_type_definition - secondary_unit
- architecture_body
| package_body - secondary_unit_declaration
- identifier = physical_literal ;
- selected_expressions
- { expression when choices , } expression when choices
- selected_force_assignment
- with expression select [ ? ] target <= force [ force_mode ] selected_expressions ;
- selected_name
- prefix . suffix
- selected_signal_assignment
- selected_waveform_assignment
| selected_force_assignment - selected_variable_assignment
- with expression select [ ? ] target := selected_expressions ;
- selected_waveform_assignment
- with expression select [ ? ] target <= [ delay_mechanism ] selected_waveforms ;
- selected_waveforms
- { waveform when choices , } waveform when choices
- sensitivity_clause
- on sensitivity_list
- sensitivity_list
- signal_name { , signal_name }
- sequence_of_statements
- { sequential_statement }
- sequential_block_statement
- [ sequential_block_label : ] block [ is ] sequential_block_declarative_part begin sequential_block_statement_part end [ block ] [ block_label ] ;
- sequential_block_declarative_part
- { process_declarative_item }
- sequential_block_statement_part
- { sequential_statement }
- sequential_statement
- wait_statement
| assertion_statement
| report_statement
| signal_assignment_statement
| variable_assignment_statement
| procedure_call_statement
| if_statement
| case_statement
| loop_statement
| next_statement
| exit_statement
| return_statement
| null_statement
| sequential_block_statement - sequential_statement_body
- [ sequential_statement_declarative_part begin ] sequence_of_statements
- sequential_statement_declarative_part
- { process_declarative_item }
- hared_variable_declaration
- [ shared ] variable identifier_list : subtype_indication [ generic_map_aspect ] [ := conditional_expression ] ;
- shift_expression
- simple_expression [ shift_operator simple_expression ]
- shift_operator
- sll
| srl
| sla
| sra
| rol
| ror - sign
- +
| – - signal_assignment_statement
- [ label : ] simple_signal_assignment
| [ label : ] conditional_signal_assignment
| [ label : ] selected_signal_assignment - signal_association_target
- signal_name
- signal_declaration
- signal identifier_list : subtype_indication [ signal_kind ] [ := expression ] ;
- signal_kind
- register
| bus - signal_list
- signal_name { , signal_name }
| others
| all - signature
- [ [ type_mark { , type_mark } ] [ return type_mark ] ]
- simple_configuration_specification
- for component_specification binding_indication ; [ end for ; ]
- simple_expression
- [ sign ] term { adding_operator term }
- simple_force_assignment
- target <= force [ force_mode ] conditional_or_unaffected_expression ;
- simple_mode_indication
- [ mode ] subtype_indication interface_type_indication [ bus ] [ := static_expression ]
- simple_name
- identifier
- simple_range
- simple_expression direction simple_expression
- simple_release_assignment
- target <= release [ force_mode ] ;
- simple_signal_assignment
- simple_waveform_assignment
| simple_force_assignment
| simple_release_assignment - simple_waveform_assignment
- target <= [ delay_mechanism ] waveform ;
- simple_variable_assignment
- target := conditional_or_unaffected_expression ;
- slice_name
- prefix ( discrete_range )
- string_literal
- " { graphic_character } "
- subprogram_body
- subprogram_specification is subprogram_declarative_part begin subprogram_statement_part end [ subprogram_kind ] [ designator ] ;
- subprogram_declaration
- subprogram_specification ;
- subprogram_declarative_item
- subprogram_declaration
| subprogram_body
| subprogram_instantiation_declaration
| package_declaration
| package_body
| package_instantiation_declaration
| type_declaration
| subtype_declaration
| constant_declaration
| variable_declaration
| file_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| use_clause
| group_template_declaration
| group_declaration - subprogram_declarative_part
- { subprogram_declarative_item }
- subprogram_header
- [ generic ( generic_list ) [ generic_map_aspect ] ]
- subprogram_instantiation_declaration
- subprogram_kind identifier is new uninstantiated_subprogram_name [ signature ] [ generic_map_aspect ] ;
- subprogram_kind
- procedure
| function - subprogram_specification
- procedure_specification
| function_specification - subprogram_statement_part
- { sequential_statement }
- subtype_declaration
- subtype identifier is subtype_indication ;
- subtype_indication
- [ resolution_indication ] type_mark [ constraint ]
- suffix
- simple_name
| character_literal
| operator_symbol
| all - target
- name
| aggregate - term
- factor { multiplying_operator factor }
- timeout_clause
- for time_expression
- tool_directive
- ` identifier { graphic_character }
- type_conversion
- type_mark ( expression )
- type_declaration
- full_type_declaration
| incomplete_type_declaration - type_definition
- scalar_type_definition
| composite_type_definition
| access_type_definition
| file_type_definition
| protected_type_definition
| protected_type_instantiation_definition - type_mark
- type_name
| subtype_name - unary_expression
- primary
| abs primary
| not primary
| unary_logical_operator primary - unary_miscellaneous_operator
- abs
| not
| unary_logical_operator - unbounded_array_definition
- array ( index_subtype_definition { , index_subtype_definition } ) of element_subtype_indication
- use_clause
- use selected_name { , selected_name } ;
- value_return_statement
- [ label : ] return conditional_or_unaffected_expression ;
- variable_assignment_statement
- [ label : ] simple_variable_assignment
| [ label : ] selected_variable_assignment - variable_declaration
- [ shared ] variable identifier_list : subtype_indication [ := expression ] ;
- verification_unit_binding_indication
- use vunit verification_unit_list
- verification_unit_list
- verification_unit_name { , verification_unit_name }
- wait_statement
- [ label : ] wait [ sensitivity_clause ] [ condition_clause ] [ timeout_clause ] ;
- waveform
- waveform_element { , waveform_element }
| unaffected - waveform_element
- value_expression [ after time_expression ]
| null [ after time_expression ]
Lexical elements and others
- format_effector
- horizontal tab
| vertical tab
| cariage return
| line feed
| form feed - upper_case_letter
- upper_case_letter
- digit
- digit
- special_character
- special_character
- space_character
- space_character
- lower_case_letter
- lower_case_letter
- other_special_character
- other_special_character
- PSL_Property_Declaration
- external
- PSL_Sequence_Declaration
- external
- PSL_Clock_Declaration
- external
- PSL_Directive
- external
- PSL_Verification_Unit
- external
See also
- VHDL 2017: new and noteworthy (legacy)
- VHDL IEEE 1076-2008 Grammar (blog post)
- Using Sigasi Studio's Graphics Configuration (legacy)
- Formatting VHDL with the Xtext formatting2 API (legacy)
- Making sense of HDL Verification Methodologies (opinion)