Application Notes
We have found some things
that are very useful while working as a team on the EE 552 project.
Last Modified: October 5, 2001
The start
symbol is design_file.
decimal_literal | based_literal
access subtype_indication
expression
| signal_name
| variable_name
| file_name
| open
parameter_association_list
actual_designator
| function_name ( actual_designator
)
| type_mark ( actual_designator )
+ | - | &
( element_association { , element_association
} )
alias alias_designator [ : subtype_indication ] is name
[ signature ] ;
identifier
| character_literal
| operator_symbol
new subtype_indication
| new qualified_expression
architectureidentifier of entity_name is
begin
end [ architecture ] [ architecture_simple_name ] ;
architecture_declarative_part ::=
architecture_statement_part ::=
unconstrained_array_definition | constrained_array_definition
assert condition
[ report expression ]
[ severity expression ]
[ formal_part => ] actual_part
association_element { , association_element
}
attribute identifier : type_mark ;
attribute_simple_name
prefix [ signature ] ' attribute_designator [ ( expression
) ]
attribute attribute_designator of
entity_specification is expression
;
B | O | X
extended_digit { [underline ] extended_digit
}
base # based_integer [ . based_integer ] # [ exponent ]
basic_graphic_character | format_effector
upper_case_letter | digit | special_character | space_character
letter { [ underline ] letter_or_digit
}
[ use entity_aspect ]
[ generic_map_aspect ]
[ port_map_aspect ]
base_specifier " [ bit_value
] "
extended_digit { [ underline ] extended_digit
}
{ use_clause }
{ configuration_item }
end for ;
subprogram_declaration
| subprogram_body
| type_declaration
| subtype_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
[ generic_clause
[ generic_map_aspect ; ] ]
[ port_clause
[ port_map_aspect ; ] ]
architecture_name
| block_statement_label
| generate_statement_label [ ( index_specification
) ]
block_label :
block [ ( guard_expression
) ] [ is ]
block_header
block_declarative_part
begin
end block [ block_label
] ;
[ case_label : ]
case expression is
case_statement_alternative
{ case_statement_alternative }
end case [ case_label
] ;
case_statement_alternative ::=
when choices =>
simple_expression
| discrete_range
| element_simple_name
| others
[ binding_indication ; ]
[ block_configuration ]
end for ;
component identifier [ is
]
[ local_generic_clause ]
[ local_port_clause ]
end component [ component_simple_name ] ;
component_instantiation_statement ::=
instantiation_label :
[ generic_map_aspect ]
[ port_map_aspect ] ;
instantiation_list : component_name
array_type_definition
| record_type_definition
concurrent_assertion_statement ::=
[ label : ] [ postponed ] assertion ;
concurrent_procedure_call_statement ::=
[ label : ] [ postponed ] procedure_call ;
concurrent_signal_assignment_statement ::=
[ label : ] [ postponed ] conditional_signal_assignment
| [ label : ] [ postponed ] selected_signal_assignment
block_statement
| process_statement
| concurrent_procedure_call_statement
| concurrent_assertion_statement
| concurrent_signal_assignment_statement
| component_instantiation_statement
| generate_statement
boolean_expression
until condition
conditional_signal_assignment ::=
target <= options conditional_waveforms ;
{ waveform when conditionelse
}
waveform [ when condition
]
configurationidentifier of entity_name is
configuration_declarative_part
block_configuration
end [ configuration ] [ configuration_simple_name ] ;
configuration_declarative_item ::=
use_clause
| attribute_specification
| group_declaration
configuration_declarative_part ::=
{ configuration_declarative_item }
block_configuration
| component_configuration
configuration_specification ::=
for component_specification
binding_indication ;
constant identifier_list : subtype_indication [ := expression ]
;
constrained_array_definition ::=
array index_constraint of
element_subtype_indication
range_constraint
| index_constraint
{ context_item }
integer [ . integer ] [ exponent ]
type_declaration
| subtype_declaration
| object_declaration
| interface_declaration
| alias_declaration
| attribute_declaration
| component_declaration
| group_template_declaration
| group_declaration
| entity_declaration
| configuration_declaration
| subprogram_declaration
| package_declaration
transport
| [ reject time_expression ] inertial
to | downto
disconnection_specification ::=
disconnectguarded_signal_specification
after time_expression ;
discrete_subtype_indication | range
[ choices => ] expression
identifier_list : element_subtype_definition
;
element_subtype_definition ::=
entity entity_name [ ( architecture_identifier ) ]
| configuration configuration_name
| open
entity
| architecture
| configuration
| procedure
| function
| package
| type
| subtype
| constant
| signal
| variable
| component
| label
| literal
| units
| group
| file
entity_class [ <> ]
entity_class_entry { , entity_class_entry
}
entity identifier is
entity_header
entity_declarative_part
[ begin
end [ entity ] [ entity_simple_name ] ;
subprogram_declaration
| subprogram_body
| type_declaration
| subtype_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
entity_tag [ signature ]
[ formal_generic_clause ]
[ formal_port_clause ]
entity_designator { , entity_designator
}
| others
| all
entity_name_list : entity_class
concurrent_assertion_statement
| passive_concurrent_procedure_call_statement
| passive_process_statement
{ entity_statement }
simple_name
| character_literal
| operator_symbol
identifier | character_literal
enumeration_type_definition ::=
( enumeration_literal { , enumeration_literal
} )
[ label : ] exit [ loop_label ] [ when condition ] ;
relation { and relation
}
| relation { or relation }
| relation { xor relation
}
| relation [ nand relation
]
| relation [ nor relation
]
| relation { xnor relation
}
digit | letter
\ graphic_character { graphic_character
} \
primary [ ** primary ]
| abs primary
| not primary
file identifier_list : subtype_indication [ file_open_information
] ;
string_expression
[ open file_open_kind_expression ] is
file_logical_name
file of type_mark
generic_name
| port_name
| parameter_name
parameter_interface_list
formal_designator
| function_name ( formal_designator
)
| type_mark ( formal_designator )
type identifier is type_definition ;
function_name [ ( actual_parameter_part ) ]
generate_label :
generation_scheme generate
begin ]
end generate [ generate_label ] ;
for generate_parameter_specification
| if condition
generic ( generic_list ) ;
generic_interface_list
generic map ( generic_association_list
)
basic_graphic_character | lower_case_letter |
other_special_character
group_constituent { , group_constituent
}
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
basic_identifier | extended_identifier
identifier { , identifier
}
[ if_label : ]
if condition then
{ elsif condition then
[ else
end if [ if_label
] ;
incomplete_type_declaration ::=
type identifier ;
( discrete_range { , discrete_range
} )
discrete_range
| static_expression
type_mark range <>
prefix ( expression { , expression } )
[ component ] component_name
| entity entity_name [ ( architecture_identifier ) ]
| configuration configuration_name
instantiation_label { , instantiation_label }
| others
| all
digit { [ underline ] digit }
interface_constant_declaration ::=
[ constant ] identifier_list : [ in
] subtype_indication [ := static_expression ]
interface_constant_declaration
| interface_signal_declaration
| interface_variable_declaration
| interface_file_declaration
interface_file_declaration ::=
file identifier_list : subtype_indication
interface_element { ; interface_element
}
interface_signal_declaration ::=
[ signal ] identifier_list : [ mode ] subtype_indication [ bus
] [ := static_expression ]
interface_variable_declaration ::=
[ variable ] identifier_list : [ mode ] subtype_indication [ := static_expression ]
while condition
| for loop_parameter_specification
upper_case_letter | lower_case_letter
letter | digit
library logical_name_list ;
numeric_literal
| enumeration_literal
| string_literal
| bit_string_literal
| null
logical_name { , logical_name
}
and | or | nand | nor | xor
| xnor
[ loop_label : ]
[ iteration_scheme ] loop
end loop [ loop_label
] ;
** | abs | not
in | out | inout | buffer | linkage
* | / | mod | rem
simple_name
| operator_symbol
| selected_name
| indexed_name
| slice_name
| attribute_name
[ label : ] next [ loop_label ] [ when condition ] ;
[ label : ] null ;
abstract_literal
| physical_literal
constant_declaration
| signal_declaration
| variable_declaration
| file_declaration
[ guarded ] [ delay_mechanism ]
package bodypackage_simple_name is
end [ package body ] [ package_simple_name ] ;
package_body_declarative_item ::=
subprogram_declaration
| subprogram_body
| type_declaration
| subtype_declaration
| constant_declaration
| shared_variable_declaration
| file_declaration
| alias_declaration
| use_clause
| group_template_declaration
| group_declaration
package_body_declarative_part ::=
{ package_body_declarative_item }
package identifier is
end [ package ] [ package_simple_name ] ;
subprogram_declaration
| type_declaration
| subtype_declaration
| constant_declaration
| signal_declaration
| shared_variable_declaration
| file_declaration
| alias_declaration
| component_declaration
| attribute_declaration
| attribute_specification
| disconnection_specification
| use_clause
| group_template_declaration
| group_declaration
[ abstract_literal ] unit_name
units
primary_unit_declaration
{ secondary_unit_declaration }
end units [ physical_type_simple_name ]
port ( port_list ) ;
port_interface_list
port map ( port_association_list
)
name
| literal
| aggregate
| function_call
| qualified_expression
| type_conversion
| allocator
| ( expression )
entity_declaration
| configuration_declaration
| package_declaration
procedure_name [ ( actual_parameter_part ) ]
[ label : ] procedure_call
;
subprogram_declaration
| subprogram_body
| type_declaration
| subtype_declaration
| constant_declaration
| variable_declaration
| file_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| use_clause
| group_template_declaration
| group_declaration
[ process_label : ]
[ postponed ] process [ ( sensitivity_list
) ] [ is ]
begin
end [ postponed ] process [ process_label ] ;
type_mark ' ( expression )
| type_mark ' aggregate
range_attribute_name
| simple_expression directionsimple_expression
range range
record
element_declaration
{ element_declaration }
end record [ record_type_simple_name ]
shift_expression [ relational_operatorshift_expression ]
= | /= | < | <= | > | >=
[ label : ]
report expression
[ severityexpression ] ;
[ label : ] return [ expression
] ;
enumeration_type_definition
| integer_type_definition
| floating_type_definition
| physical_type_definition
architecture_body
| package_body
secondary_unit_declaration ::=
identifier = physical_literal
;
selected_signal_assignment ::=
with expression select
target <= options selected_waveforms ;
{ waveform when choices
, }
waveform when choices
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
simple_expression [ shift_operatorsimple_expression ]
sll | srl | sla | sra | rol
| ror
+ | -
signal_assignment_statement ::=
[ label : ] target <= [
delay_mechanism ] waveform ;
signal identifier_list : subtype_indication [ signal_kind ] [
:= expression ] ;
register | bus
signal_name { , signal_name }
| others
| all
[ [ type_mark { , type_mark
} ] [ return type_mark ] ]
[ sign ] term { adding_operator term }
prefix ( discrete_range )
" { graphic_character } "
begin
end [ subprogram_kind ] [ designator ] ;
subprogram_declarative_item ::=
subprogram_declaration
| subprogram_body
| 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 }
procedure | function
procedure designator [ ( formal_parameter_list ) ]
| [ pure | impure ] function designator
[ ( formal_parameter_list ) ]
return type_mark
subtype identifier is subtype_indication ;
[ resolution_function_name ] type_mark [ constraint ]
simple_name
| character_literal
| operator_symbol
| all
factor { multiplying_operatorfactor }
for time_expression
type_mark ( expression )
full_type_declaration
| incomplete_type_declaration
scalar_type_definition
| composite_type_definition
| access_type_definition
| file_type_definition
unconstrained_array_definition ::=
array ( index_subtype_definition
{ , index_subtype_definition } )
of element_subtype_indication
use selected_name { , selected_name } ;
variable_assignment_statement ::=
[ label : ] target := expression ;
[ shared ] variable identifier_list
: subtype_indication [ := expression
] ;
[ label : ] wait [ sensitivity_clause
] [ condition_clause ] [ timeout_clause
] ;
waveform_element { , waveform_element
}
unaffected
value_expression [ after
time_expression ]
| null [ after time_expression ]
A: abs, access, after, alias, all, and,
architecture, array, assert, attribute,
B: begin, block, body, buffer, bus,
C: case, component, configuration, constant,
D: disconnect, downto,
E: else, elsif, end, entity, exit,
F: file, for, function,
G: generate, generic, group, guarded,
I: if, impure, in, inertial, inout, is,
L: label, library, linkage, literal, loop,
M: map, mod,
N: nand, new, next, nor, not, null,
O: of, on, open, or, others, out,
P: package, port, postponed, procedure,
process, pure,
R: range, record, register, reject, rem,
report, return, rol, ror,
S: select, severity, shared, signal, sla,
sll, sra, srl, subtype,
T: then, to, transport, type,
U: unaffected, units, until, use,
V: variable,
W: wait, when, while, with,
X: xnor, xor
(T = scalar
type or subtype, A = array type, S = signal, E = named entity)
T'BASE
T'LEFT
T'RIGHT
T'HIGH
T'LOW
T'ASCENDING
T'IMAGE(X)
T'VALUE(X)
T'POS(X)
T'VAL(X)
T'SUCC(X)
T'PRED(X)
T'LEFTOF(X)
T'RIGHTOF(X)
A'LEFT[(N)]
A'RIGHT[(N)]
A'HIGH[(N)]
A'LOW[(N)]
A'RANGE[(N)]
A'REVERSE_RANGE[(N)]
A'LENGTH[(N)]
A'ASCENDING[(N)]
S'DELAYED[(T)]
S'STABLE[(T)]
S'QUIET[(T)]
S'TRANSACTION
S'EVENT
S'ACTIVE
S'LAST_EVENT
S'LAST_ACTIVE
S'LAST_VALUE
S'DRIVING
S'DRIVING_VALUE
E'SIMPLE_NAME
E'INSTANCE_NAME
E'PATH_NAME
Reference: VHDL 1993 Syntax reprinted from
IEEE Std 1076-1993 "IEEE Standard VHDL Language Reference Manual,"
Copyright © 1993 by the Institute of Electrical and Electronics Engineers, Inc.