TWiki
>
P1076 Web
>
Vhdl2019CollectedRequirements
>
TopLCS2016_080b
(2020-02-17,
JimLewis
)
(raw view)
E
dit
A
ttach
---+!! Language Change Specification for Deferred Shared Variables Proposal ---++!! Secondary LCS: This LCS details changes to enhance semantic information in BNF productions. This is applied to BNF 'subtype indicator' non-terminals indicating their limitations, plus BNF 'package declaration' and 'package body' non-terminals to indicate the enclosing VHDL declarative region. %TOC% | <sticky><b>LCS Number:</b></sticky> | LCS-2016-080b | | <sticky><b>Version:</b></sticky> | 2 | | <sticky><b>Date:</b></sticky> | 18-Dec-16 | | <sticky><b>Status:</b></sticky> | Ballot | | <sticky><b>Author:</b></sticky> | [[Main.BrentHahoe][Brent Hayhoe]] | | <sticky><b>Email:</b></sticky> | %USERINFO{"BrentHahoe" format="$emails"}% | | <sticky><b>Source Doc:</b></sticky> | [[DeferredSharedVariables][Deferred Shared Variables]] | | <sticky><b>Summary:</b></sticky> | Clarification of semantics in BNF productions relating to '<b>subtype</b> indications' and '<b>package</b> declarative items' | | <sticky><b>Depends on LCS:</b></sticky> | [[TopLCS2016_080a][LCS-2016-80a]] | ---++ Voting Results: Cast your votes here * Yes: 1 %USERSIG{BrentHahoe - 2016-12-18}% - Version 2 1 %USERSIG{PatrickLehmann - 2016-12-31}% - Version 2 * No: 1 %USERSIG{ErnstChristen - 2017-03-21}% - Version 2 * Abstain: 1 %USERSIG{MartinThompson - 2017-02-17}% - Version 2 1 %USERSIG{KevinJennings - 2016-12-20}% - Version 2 ---++ Details of Language Change: Key: * LRM text is shown between single quotes <sticky>%BLACK%'... P1076 LRM quoted text ...'%ENDCOLOR%</sticky> * Existing LRM text is shown in <sticky>%BLACK%<b>BLACK</b> coloured font%ENDCOLOR%</sticky> * Additional LRM text is shown in <sticky>%RED%<b>RED</b> coloured font%ENDCOLOR%</sticky> * Deleted LRM text is shown in <sticky>%RED%<strike><b>RED</b> with strike-through</strike>%ENDCOLOR%</sticky> * In order to try and emphasize text in italic font: * Italic font in existing LRM text is shown in <sticky>%GRAY%<i><b>GRAY</b> italic font</i>%BLACK%</sticky> * Italic font in new LRM text is shown in <sticky>%ORANGE%<i><b>ORANGE</b> italic font</i>%ENDCOLOR%</sticky> * Italic font in deleted LRM text is shown in <sticky>%ORANGE%<strike><i><b>ORANGE</b> with strike-through</i></strike>%ENDCOLOR%</sticky> * Editing instructions are shown in <sticky>%GREEN%<b>GREEN</b> coloured font%ENDCOLOR%</sticky> ---+++ LRM 3.2.3 Entity declarative part ---++++!! page 8 bottom %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% entity_declarative_part ::= { entity_declarative_item } entity_declarative_item ::= subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_body | %ORANGE%<i>nonsequential_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%signal_declaration | %ORANGE%<strike><i>shared_</i></strike>%RED%normal_shared_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | disconnection_specification | use_clause | group_template_declaration | group_declaration | %GRAY%<i>PSL_</i>%BLACK%Property_Declaration | %GRAY%<i>PSL_</i>%BLACK%Sequence_Declaration | %GRAY%<i>PSL_</i>%BLACK%Clock_Declaration </pre></sticky> ---+++ LRM 3.3.2 Architecture declarative part ---++++!! page 11 middle %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% architecture_declarative_part ::= { block_declarative_item } block_declarative_item ::= subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_body | %ORANGE%<i>nonsequential_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%signal_declaration | %ORANGE%<strike><i>shared_</i></strike>%RED%normal_shared_%BLACK%variable_declaration | file_declaration | alias_declaration | component_declaration | attribute_declaration | attribute_specification | configuration_specification | disconnection_specification | use_clause | group_template_declaration | group_declaration | %GRAY%<i>PSL_</i>%BLACK%Property_Declaration | %GRAY%<i>PSL_</i>%BLACK%Sequence_Declaration | %GRAY%<i>PSL_</i>%BLACK%Clock_Declaration </pre></sticky> ---+++ LRM 4.3 Subprogram bodies ---++++!! page 23 bottom & 24 top %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% subprogram_body ::= subprogram_specification <b>is</b> subprogram_declarative_part <b>begin</b> subprogram_statement_part <b>end</b> [ subprogram_kind ] [ designator ] ; subprogram_declarative_part ::= { subprogram_declarative_item } subprogram_declarative_item ::= subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_body | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | use_clause | group_template_declaration | group_declaration subprogram_statement_part ::= { sequential_statement } subprogram_kind ::= <b>procedure</b> | <b>function</b> </pre></sticky> ---+++ LRM 5.3.2.1 General ---++++!! page 44 bottom %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% array_type_definition ::= unbounded_array_definition | constrained_array_definition unbounded_array_definition ::= <b>array</b> ( index_subtype_definition { , index_subtype_definition } ) <b>of</b> %ORANGE%<i>array_%GRAY%element_</i>%BLACK%subtype_indication constrained_array_definition ::= <b>array</b> index_constraint <b>of</b> %ORANGE%<i>array_%GRAY%element_</i>%BLACK%subtype_indication index_subtype_definition ::= type_mark <b>range</b> <> </pre></sticky> ---+++ LRM 5.3.3 Record types ---++++!! page 51 %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% record_type_definition ::= <b>record</b> element_declaration { element_declaration } <b>end record</b> [ %GRAY%<i>record_type_</i>%BLACK%simple_name ] element_declaration ::= identifier_list : element_subtype_definition ; identifier_list ::= identifier { , identifier } element_subtype_definition ::= %ORANGE%<i>record_element_</i>%BLACK%subtype_indication record_constraint ::= ( record_element_constraint { , record_element_constraint } ) record_element_constraint ::= %GRAY%<i>record_element_</i>%BLACK%simple_name element_constraint </pre></sticky> ---+++ LRM 5.6.3 Protected type bodies ---++++!! page 59 middle %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% protected_type_body ::= <b>protected body</b> protected_type_body_declarative_part <b>end protected body</b> [ %GRAY%<i>protected_type_</i>%BLACK%simple name ] protected_type_body_declarative_part ::= { protected_type_body_declarative_item } protected_type_body_declarative_item ::= subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_body | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | use_clause | group_template_declaration | group_declaration </pre></sticky> ---+++ LRM 6.4.2.5 File declarations ---++++!! page 72 top %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% file_declaration ::= <b>file</b> identifier_list : %ORANGE%<i>file_</i>%BLACK%subtype_indication [ file_open_information ] ; file_open_information ::= [ <b>open</b> file_open_kind_expression ] <b>is</b> file_logical_name file_logical_name ::= string_expression </pre></sticky> ---+++ LRM 8.7 External names ---++++!! page 113 middle %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% external_name ::= external_constant_name | external_signal_name | external_variable_name external_constant_name ::= << <b>constant</b> external_pathname : %ORANGE%<i>constant_</i>%BLACK%subtype_indication >> external_signal_name ::= << <b>signal</b> external_pathname : %ORANGE%<i>signal_</i>%BLACK%subtype_indication >> external_variable_name ::= << <b>variable</b> external_pathname : %ORANGE%<i>protected_</i>%BLACK%subtype_indication >> external_pathname ::= package_pathname | absolute_pathname | relative_pathname package_pathname ::= @ %GRAY%<i>library_</i>%BLACK%logical_name . %GRAY%<i>package_</i>%BLACK%simple_name . { %GRAY%<i>package_</i>%BLACK%simple_name . } %GRAY%<i>object_</i>%BLACK%simple_name absolute_pathname ::= . partial_pathname relative_pathname ::= { ^ . } partial_pathname partial_pathname ::= { pathname_element . } %GRAY%<i>object_</i>%BLACK%simple_name </pre></sticky> ---+++ LRM 11.3 Process statement ---++++!! page 170 middle & 171 top %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% process_statement ::= [ %GRAY%<i>process_</i>%BLACK%label : ] [ <b>postponed</b> ] <b>process</b> [ ( process_sensitivity_list ) ] [ <b>is</b> ] process_declarative_part <b>begin</b> process_statement_part <b>end</b> [ <b>postponed</b> ] <b>process</b> [ %GRAY%<i>process_</i>%BLACK%label ] ; process_sensitivity_list ::= <b>all</b> | sensitivity_list process_declarative_part ::= { process_declarative_item } process_declarative_item ::= subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_body | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | use_clause | group_template_declaration | group_declaration process_statement_part ::= { sequential_statement } </pre></sticky> ---+++ LRM 13.1 Design units ---++++!! page 195 top %GREEN%Replace the BNF productions with:%BLACK% <sticky><pre>%BLACK% design_file ::= design_unit { design_unit } design_unit ::= context_clause library_unit library_unit ::= primary_unit | secondary_unit primary_unit ::= entity_declaration | configuration_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_instantiation_declaration | context_declaration | %GRAY%<i>PSL_</i>%BLACK%Verification_Unit secondary_unit ::= architecture_body | %ORANGE%<i>nonsequential_</i>%BLACK%package_body </pre></sticky> ---+++ LRM Annex C Syntax summary ---++++!! page 479 %GREEN%Replace the %BLACK%'block_declarative_item'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% block_declarative_item ::= [§ 3.3.2] subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_body | %ORANGE%<i>nonsequential_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%signal_declaration | %ORANGE%<strike><i>shared_</i></strike>%RED%normal_shared_%BLACK%variable_declaration | file_declaration | alias_declaration | component_declaration | attribute_declaration | attribute_specification | configuration_specification | disconnection_specification | use_clause | group_template_declaration | group_declaration | %GRAY%<i>PSL_</i>%BLACK%Property_Declaration | %GRAY%<i>PSL_</i>%BLACK%Sequence_Declaration | %GRAY%<i>PSL_</i>%BLACK%Clock_Declaration </pre></sticky> ---++++!! page 483 %GREEN%Replace the %BLACK%'constrained_array_definition'%GREEN% BNF production with %the following:%BLACK% <sticky><pre>%BLACK% constrained_array_definition ::= [§ 5.3.2.1] <b>array</b> index_constraint <b>of</b> %ORANGE%<i>array_%GRAY%element_</i>%BLACK%subtype_indication </pre></sticky> ---++++!! page 484 %GREEN%Replace the %BLACK%'element_subtype_definition'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% element_subtype_definition ::= %ORANGE%<i>record_element_</i>%BLACK%subtype_indication [§ 5.3.3] </pre></sticky> ---++++!! page 484 & 485 %GREEN%Replace the %BLACK%'entity_declarative_item'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% entity_declarative_item ::= [§ 3.2.3] subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_body | %ORANGE%<i>nonsequential_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%signal_declaration | %ORANGE%<strike><i>shared_</i></strike>%RED%normal_shared_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | disconnection_specification | use_clause | group_template_declaration | group_declaration | %GRAY%<i>PSL_</i>%BLACK%Property_Declaration | %GRAY%<i>PSL_</i>%BLACK%Sequence_Declaration | %GRAY%<i>PSL_</i>%BLACK%Clock_Declaration </pre></sticky> ---++++!! page 486 %GREEN%Replace the %BLACK%'external_constant_name'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% external_constant_name ::= [§ 8.7] << <b>constant</b> external_pathname : %ORANGE%<i>constant_</i>%BLACK%subtype_indication >> </pre></sticky> ----- %GREEN%Replace the %BLACK%'external_signal_name'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% external_signal_name ::= [§ 8.7] << <b>signal</b> external_pathname : %ORANGE%<i>signal_</i>%BLACK%subtype_indication >> </pre></sticky> ----- %GREEN%Replace the %BLACK%'external_variable_name'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% external_variable_name ::= [§ 8.7] << <b>variable</b> external_pathname : %ORANGE%<i>protected_</i>%BLACK%subtype_indication >> </pre></sticky> ----- %GREEN%Replace the %BLACK%'file_declaration'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% file_declaration ::= [§ 6.4.2.5] <b>file</b> identifier_list : %ORANGE%<i>file_</i>%BLACK%subtype_indication [ file_open_information ] ; </pre></sticky> ---++++!! page 489 %GREEN%Replace the %BLACK%'interface_file_declaration'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% interface_file_declaration ::= [§ 6.5.2] <b>file</b> identifier_list : %ORANGE%<i>file_</i>%BLACK%subtype_indication </pre></sticky> ---++++!! page 493 %GREEN%Replace the %BLACK%'primary_unit'%GREEN% BNF production with the following:%BLACK% <sticky><pre>%BLACK% primary_unit ::= [§ 13.1] entity_declaration | configuration_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_declaration | %ORANGE%<i>nonsequential_</i>%BLACK%package_instantiation_declaration | context_declaration | %GRAY%<i>PSL_</i>%BLACK%Verification_Unit </pre></sticky> ---++++!! page 494 %GREEN%Replace the %BLACK%'process_declarative_item'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% process_declarative_item ::= [§ 11.3] subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_body | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | use_clause | group_template_declaration | group_declaration </pre></sticky> ----- %GREEN%Replace the %BLACK%'protected_type_body_declarative_item'%GREEN% BNF %production with the following:%BLACK% <sticky><pre>%BLACK% protected_type_body_declarative_item ::= [§ 5.6.3] subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_body | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | use_clause | group_template_declaration | group_declaration </pre></sticky> ---++++!! page 496 %GREEN%Replace the %BLACK%'secondary_unit'%GREEN% BNF production with the following:%BLACK% <sticky><pre>%BLACK% secondary_unit ::= [§ 13.1] architecture_body | %ORANGE%<i>nonsequential_</i>%BLACK%package_body </pre></sticky> ----- %GREEN%Replace the %BLACK%'subprogram_declarative_item'%GREEN% BNF production with %the following:%BLACK% <sticky><pre>%BLACK% subprogram_declarative_item ::= [§ 4.3] subprogram_declaration | subprogram_body | subprogram_instantiation_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_declaration | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_body | %ORANGE%<i>nonconcurrent_</i>%BLACK%package_instantiation_declaration | type_declaration | subtype_declaration | %RED%normal_%BLACK%constant_declaration | %RED%normal_%BLACK%variable_declaration | file_declaration | alias_declaration | attribute_declaration | attribute_specification | use_clause | group_template_declaration | group_declaration</pre></sticky> ---++++!! page 500 %GREEN%Replace the %BLACK%'unbounded_array_definition'%GREEN% BNF production with the %following:%BLACK% <sticky><pre>%BLACK% unbounded_array_definition ::= [§ 5.3.2.1] <b>array</b> ( index_subtype_definition { , index_subtype_definition } ) <b>of</b> %ORANGE%<i>array_%GRAY%element_</i>%BLACK%subtype_indication </pre></sticky> ---+ Comments I don't understand the point of these changes. Are they just adding italicized (informative) prefixes? -- %BUBBLESIG{RyanHinton - 2016-12-15}% This is just EBNF cleanup work to clarify the rules a bit more. Other parts of the EBNF rule set have already such italic prefixes for clarification. -- %BUBBLESIG{PatrickLehmann - 2016-12-15}% %RED%<u>Version 2</u>%BLACK% BNF productions of entity structures declarative items have been moved here from [[LCS2016_080a][LCS-2016-080a]]. They are as follows: * entity_declarative_part * architecture_declarative_part * block_declarative_part * subprogram_declarative_part * protected_type_body_declarative_part * process_declarative_part * primary_unit * secondary_unit Italic prefixes have been added to the BNF entity structures declarative items mentioned above to reflect package declarative region usage. Package declarative items are prefixed as either 'non-sequential' (indicating that they may contain 'general' or 'concurrent' declarative items), or 'non-concurrent' (indicating that they may contain 'general' or 'sequential' declarative items). -- %BUBBLESIG{BrentHahoe - 2016-12-17}% This LCS does not only *relate* to LCS 080a, it *depends* on LCS 080a. Because the non-terminal symbols * normal_shared_variable_declaration * normal_variable_declaration * normal_constant_declaration * normal_signal_declaration are introduced by LCS 080a. They are *not* part of the current LRM. -- %BUBBLESIG{MartinZabel - 2017-03-08}% This proposal attempts to reformulate semantic rules of the current LRM as syntax rules. It does so without proposing any changes to the semantic rules. There are several problems with this approach: * It is at odds with the philosophy of the language definition, which attempts to make the EBNF free of ambiguities and reasonably free of conflicts by resolving nuances with semantic rules. * Not proposing any changes to semantic rules while adopting the syntax changes has several effects. First, the terminology used in the semantic rules no longer matches the EBNF. Second, expressing in essence the same rules both syntactically and semantically is a recipe for disaster because these rules get out of sync very quickly. If out of sync, which one governs? * A change of this kind will be problematic for tool developers because all diagnostic messages in their tools would have to be reworked to match a modified LRM, with no gain. I disagree with Partick Lehmann's comments that this is just EBNF cleanup work, since several productions are proposed to be renamed. I agree, though, with Martin Zabel that this is not a stand-alone LCS. -- %BUBBLESIG{ErnstChristen - 2017-03-21}% %COMMENT%
E
dit
|
A
ttach
|
P
rint version
|
H
istory
: r20
<
r19
<
r18
<
r17
<
r16
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r20 - 2020-02-17 - 15:34:42 -
JimLewis
P1076
Log In
or
Register
P1076 Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
Webs
Main
P1076
Ballots
LCS2016_080
P10761
P1647
P16661
P1685
P1734
P1735
P1778
P1800
P1801
Sandbox
TWiki
VIP
VerilogAMS
Copyright © 2008-2026 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback