TWiki
>
P1076/Ballots Web
>
Vhdl2019CollectedRequirements
>
VHDL201xInterfaceImplementationProposal
(2020-02-17,
JimLewis
)
(raw view)
E
dit
A
ttach
---+ VHDL 201x Interface Implementation Proposal %TOC% ---++ Updates * 2016/04/21 * replaced 'element' keyword with record/array. * added resolution to object feature table. ---++ References * [[P1076.BNFVHDL2008][VHDL 2008 LRM Hyperlinked BNF Productions]] (N.B. must be logged in) * [[P1076.GlossaryVHDL2008][VHDL 2008 LRM Glossary Section]] (N.B. must be logged in) ---++ Introduction VHDL has supported the concept of a composite object for implementing an interface bundle (via record and array types) since its inception. However, it has lacked the ability to individually control the mode of the object's elements across interface boundaries and the addition of this functionality has been the main initial driving force for this new interface proposal. A new mode *view* structural concept has been proposed to provide either a named or in-place structural specification of the mode of a composite object's elements. In all previous VHDL LRM revisions, composite structures have been associated with types. This can be qualified as a software derived point of view and quite rightly, the LRMs for VHDL have expanded these composite type definitions into composite object structures for hardware implementation (i.e. each element of a composite type - associated with an object - is interpreted as a discrete object in its own right and necessarily of the same object class). For example, the elements of a *signal* with a composite type are implicitly defined as each of an object of class *signal* in their own right. This is a requirement for synthesis to operate but has also been defined such that simulators can model these structures in a matching manner. However, the requirement to handle heterogeneous interfaces adds another dimension to composite structures and that is the ability to bundle objects of different object classes together (e.g. signals with variables). It is proposed that a new composite object class be defined - *bundle* - and in order to associate this with a composite type, that these types be expanded to explicitly define the object class of each element. ---+++ Objectives * This implementation seeks to define an interface using existing composite types with a single object class. * This implementation seeks to define an heterogeneous interface concept using a new composite object class (*bundle*) associated with a new 'composite structure' semantic which will be able to define the object class of each element. * This implementation seeks to define a method to individually control the I/O mode of composite elements of both of these types of interface objects at the interface boundary of an *entity* and at the interface boundaries of *function* and *procedure* subprograms. (+ *block* structures?) * This implementation seeks to define a zero-delta bidirectional connection method for the new *bundle* composite object class. ---++ Composite Structures - Record & Array Types The language already provides composite structures in the form of *record* and *array* types which can be associated with any of the existing object classes. They lack the flexibility, within interface boundaries, of independent control of the mode functionality of their structural elements. In terms of a hardware description language, these composite types are handled as composite objects and so their semantics is redefined as composite structures, but their syntax remains largely unaltered. <sticky><pre> <a name="composite_structure_definition"></a>composite_structure_definition ::= <a href="#array_structure_definition">array_structure_definition</a> | <a href="#record_structure_definition">record_structure_definition</a> </pre></sticky> ---+++ The Bundle - A New Explicit Composite Object The standard object declaration requires a bundle declaration as a new object. <sticky><pre> <a name="object_declaration"></a>object_declaration ::= <a href="#constant_declaration">constant_declaration</a>optional. Note also that a *bundle* can contain elements of object class *bundle*. | <a href="#signal_declaration">signal_declaration</a> | <a href="#variable_declaration">variable_declaration</a> | <a href="#file_declaration">file_declaration</a> | <a href="#bundle_declaration">bundle_declaration</a> </pre></sticky> <sticky><pre> <a name="bundle_declaration"></a>bundle_declaration ::= <font color="LightSalmon"><b>bundle</b></font> <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> This is a new object of class *bundle* which is always associated with a 'composite structure definition' (in VHDL2008 a 'composite type definition'). Its distinguishing feature is to allow heterogeneous grouping of objects, i.e. elements of its composite structure being of differing object class. | *Feature* | *Constant* | *Signal* | *Normal Variable* | *Shared Variable* | *File* | *Bundle* | | Initialization | Yes | Yes | Yes | ??? | No | Yes¹ | | Event | No | Yes | No | No | No | Yes² | | Equality | Yes | Yes | Yes | Yes | ??? | Yes³ | | Assignment | No | <font color="LightSalmon"><b><=</b></font> | <font color="LightSalmon"><b>:=</b></font> | Method | No | ???¹¹ | | Mapping | Yes | Yes | Yes | Yes | Yes | Yes¹² | | Protected | No | No | Yes | Yes | No | Yes¹³ | | Resolution | No? | Yes | No | No | No | Yes²¹ | * ¹ A *bundle* object accesses its composite elements in the standard manner: %BR% A *record* element is accessed using the 'dot' notation. %BR% An *array* element is accessed using a bracketed index or range *subtype*. * ² A *bundle* object exhibits an event if at least one of its elements is of object class *signal*. * ³ A *bundle* object equivalence check shall be done on an element and associated *subtype* and object class basis. * ¹¹ A *bundle* cannot be assigned directly due to the possible object class differences of its elements. %BR% Assignments need to be similar to a mapping and a possible solution is the suggested new bidirectional assignment operator <font color="LightSalmon"><b><=></b></font>. %BR% This may also be achievable by a new construct - the *map* *function* or *map* *procedure*. * ¹² A *bundle* object can be mapped as long as it does not incur a generated delta delay (e.g. via the *inertial* keyword?). * ¹³ A *bundle* object must be associated with a *protected* *type* if at least one of its elements is associated with a *protected* *type*. * ²¹ A *bundle* object must be associated with a resolved *type* if at least one of its elements is associated with a resolved *type*. ---+++ Record Structures <sticky><pre> <a name="record_structure_definition"></a>record_structure_definition ::= <font color="LightSalmon"><b>record</b></font> <a href="#element_declaration">element_object_declaration</a> { <a href="#element_declaration">element_object_declaration</a> } | <font color="LightSalmon"><b>null ;</b></font> <font color="LightSalmon"><b>end record</b></font> [ <font color="LimeGreen"><i>record_structure_</i></font><a href="#simple_name">simple_name</a> ] </pre></sticky> The structure semantic serves to highlight the fact that these are now defined as composite objects and are not just a *type*. The 'record structure definition' has been altered to allow for zero element structures as proposed [[http://www.eda-twiki.org/cgi-bin/view.cgi/P1076/EmptyRecord][here]]. The format chosen follows that of ADA described [[http://www.eda-twiki.org/cgi-bin/view.cgi/P1076/EmptyRecord][here]]. The 'element object declaration' takes a similar form to the normal 'object declaration'. The differentiating point is that in each 'element object declaration', the object class keyword is now optional. Note also that a *bundle* can contain elements of object class *bundle*. <sticky><pre> <a name="element_object_declaration"></a>element_object_declaration ::= <a href="#element_constant_declaration">element_constant_declaration</a> | <a href="#element_signal_declaration">element_signal_declaration</a> | <a href="#element_variable_declaration">element_variable_declaration</a> | <a href="#element_file_declaration">element_file_declaration</a> | <a href="#element_bundle_declaration">element_bundle_declaration</a> </pre></sticky> <sticky><pre> <a name="element_constant_declaration"></a>element_constant_declaration ::= [ <font color="LightSalmon"><b>constant</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_signal_declaration"></a>element_signal_declaration ::= [ <font color="LightSalmon"><b>signal</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> [ <a href="#signal_kind">signal_kind</a> ] [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_variable_declaration"></a>element_variable_declaration ::= [ [ <font color="LightSalmon"><b>shared</b></font> ] <font color="LightSalmon"><b>variable</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_file_declaration"></a>element_file_declaration ::= [ <font color="LightSalmon"><b>file</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> [ <a href="#file_open_information">file_open_information</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_bundle_declaration"></a>element_bundle_declaration ::= [ <font color="LightSalmon"><b>bundle</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> The elements of a *record* now become full object declarations. If the object class keyword is missing, the element object class defaults to the object class of the instance to which the *record* structure is associated with. Apart from the 'identifier list' and the 'subtype indication', all other parts are optional, which then means that the default 'element object declaration' remains identical to the existing 'element declaration' of a *record* *type*. ---+++ Array Structures The 'array structure definition' specifies the unbounded *array* and the constrained *array*: <sticky><pre> <a name="array_structure_definition"></a>array_structure_definition ::= <a href="#unbounded_array_structure_definition">unbounded_array_structure_definition</a> | <a href="#constrained_array_structure_definition">constrained_array_structure_definition</a> </pre></sticky> <sticky><pre> <a name="unbounded_array_structure_definition"></a>unbounded_array_structure_definition ::= <font color="LightSalmon"><b>array ( </b></font> <a href="#index_subtype_definition">index_subtype_definition</a> { <font color="LightSalmon"><b>,</b></font> <a href="#index_subtype_definition">index_subtype_definition</a> } <font color="LightSalmon"><b>) of </b></font><a href="#element_object_indication">element_object_indication</a> </pre></sticky> <sticky><pre> <a name="constrained_array_structure_definition"></a>constrained_array_structure_definition ::= <font color="LightSalmon"><b>array </b></font><a href="#index_constraint">index_constraint</a> <font color="LightSalmon"><b>of </b></font><a href="#element_object_indication">element_object_indication</a> </pre></sticky> <sticky><pre> <a name="element_object_indication"></a>element_object_indication ::= <a href="#element_constant_indication">element_constant_indication</a> | <a href="#element_signal_indication">element_signal_indication</a> | <a href="#element_variable_indication">element_variable_indication</a> | <a href="#element_file_indication">element_file_indication</a> | <a href="#element_bundle_indication">element_bundle_indication</a> </pre></sticky> <sticky><pre> <a name="element_constant_indication"></a>element_constant_indication ::= [ <font color="LightSalmon"><b>constant :</b></font> ] <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_signal_indication"></a>element_signal_indication ::= [ <font color="LightSalmon"><b>signal :</b></font> ] <a href="#subtype_indication">subtype_indication</a> [ <a href="#signal_kind">signal_kind</a> ] [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_variable_indication"></a>element_variable_indication ::= [ [ <font color="LightSalmon"><b>shared</b></font> ] <font color="LightSalmon"><b>variable : </b></font> ] <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_file_indication"></a>element_file_indication ::= [ <font color="LightSalmon"><b>file :</b></font> ] <a href="#subtype_indication">subtype_indication</a> [ <a href="#file_open_information">file_open_information</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="element_bundle_indication"></a>element_bundle_indication ::= [ <font color="LightSalmon"><b>bundle :</b></font> ] <a href="#composite_structure_indication">composite_structure_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> ---++ Ports and Modes ---+++ Interface Declarations <sticky><pre> <a name="interface_object_declaration"></a>interface_object_declaration ::= <a href="#interface_constant_declaration">interface_constant_declaration</a> | <a href="#interface_signal_declaration">interface_signal_declaration</a> | <a href="#interface_variable_declaration">interface_variable_declaration</a> | <a href="#interface_file_declaration">interface_file_declaration</a> | <a href="#interface_bundle_declaration">interface_bundle_declaration</a> </pre></sticky> <sticky><pre> <a name="interface_constant_declaration"></a>interface_constant_declaration ::= [ <font color="LightSalmon"><b>constant</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> [ <font color="LightSalmon"><b>in</b></font> ] <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] </pre></sticky> <sticky><pre> <a name="interface_signal_declaration"></a>interface_signal_declaration ::= [ <font color="LightSalmon"><b>signal</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> [ <a href="#mode">mode</a> ] <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>bus</b></font> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] | [ <font color="LightSalmon"><b>signal</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <font color="LightSalmon"><b> view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>bus</b></font> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] </pre></sticky> <sticky><pre> <a name="interface_variable_declaration"></a>interface_variable_declaration ::= [ <font color="LightSalmon"><b>variable</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> [ <a href="#mode">mode</a> ] <a href="#subtype_indication">subtype_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] | [ <font color="LightSalmon"><b>variable</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <font color="LightSalmon"><b> view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] </pre></sticky> <sticky><pre> <a name="interface_file_declaration"></a>interface_file_declaration ::= <font color="LightSalmon"><b>file</b></font> <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> </pre></sticky> <sticky><pre> <a name="interface_bundle_declaration"></a>interface_bundle_declaration ::= [ <font color="LightSalmon"><b>bundle</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> [ <a href="#mode">mode</a> ] <a href="#composite_structure_indication">composite_structure_indication</a> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] | [ <font color="LightSalmon"><b>bundle</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <font color="LightSalmon"><b> view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ]<font color="LightSalmon"><b>;</b></font> </pre></sticky> ---+++ Composite Mode Views The proposed solution is to introduce a new semantic which can provide a mode *view* of the composite object. This new *view* object will enable the mode of each element of a composite type to be defined in a hierarchical manner. This will be used on object class declarations associated with an entity interface i.e. an *entity* or a *procedure*. The ports of a *function* are by definition inputs and therefore can use the existing format where the mode applies to the whole of the composite type. <sticky><pre> <a name="mode_view_clause"></a>mode_view_clause ::= <font color="LimeGreen"><i>mode_view_</i></font><a href="#indentifier">indentifier</a> [<font color="LightSalmon"><b> ( </b></font><a href="#generic_map_aspect">generic_map_aspect</a><font color="LightSalmon"><b> )</b></font> ] | <font color="LimeGreen"><i>formal_</i></font><a href="#composite_view_clause">composite_view_clause</a> </pre></sticky> <sticky><pre> <a name="mode_view_declaration"></a>mode_view_declaration ::= <font color="LightSalmon"><b>view </b></font><a href="#identifier">identifier</a><font color="LightSalmon"><b> of </b></font><a href="#composite_structure_indication">composite_structure_indication</a><font color="LightSalmon"><b> is</b></font> [ <font color="LimeGreen"><i>formal_</i></font><a href="#generic_clause">generic_clause</a> ] <font color="LimeGreen"><i>formal_</i></font><a href="#composite_view_clause">composite_view_clause</a> <font color="LightSalmon"><b>end view</b></font> [ <font color="LimeGreen"><i>mode_view_</i></font><a href="#simple_name">simple_name</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="composite_view_clause"></a>composite_view_clause ::= <a href="#record_view_definition">record_view_definition</a> | <a href="#array_view_definition">array_view_definition</a> </pre></sticky> <sticky><pre> <a name="mode"></a>mode ::= <font color="LightSalmon"><b>in</b></font> | <font color="LightSalmon"><b>out</b></font> | <font color="LightSalmon"><b>inout</b></font> | <font color="LightSalmon"><b>buffer</b></font> | <font color="LightSalmon"><b>linkage</b></font> | <font color="LightSalmon"><b>null</b></font> </pre></sticky> ---++++ Record Mode Views <sticky><pre> <a name="record_view_definition"></a>record_view_definition ::= <a href="#view_object_declaration">view_object_declaration</a> { <a href="#view_object_declaration">view_object_declaration</a> } </pre></sticky> <sticky><pre> <a name="view_object_declaration"></a>view_object_declaration ::= <a href="#view_constant_declaration">view_constant_declaration</a> | <a href="#view_signal_declaration">view_signal_declaration</a> | <a href="#view_variable_declaration">view_variable_declaration</a> | <a href="#view_file_declaration">view_file_declaration</a> | <a href="#view_bundle_declaration">view_bundle_declaration</a> </pre></sticky> <sticky><pre> <a name="view_constant_declaration"></a>view_constant_declaration ::= [ <font color="LightSalmon"><b>constant</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: in</b></font> [ <a href="#subtype_indication">subtype_indication</a> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_signal_declaration"></a>view_signal_declaration ::= [ <font color="LightSalmon"><b>signal</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: </b></font><a href="#mode">mode</a> [ <a href="#subtype_indication">subtype_indication</a> ] [ <font color="LightSalmon"><b>bus</b></font> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> | [ <font color="LightSalmon"><b>signal</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>bus</b></font> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_variable_declaration"></a>view_variable_declaration ::= [ <font color="LightSalmon"><b>variable</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: </b></font><a href="#mode">mode</a> [ <a href="#subtype_indication">subtype_indication</a> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> | [ <font color="LightSalmon"><b>variable</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_file_declaration"></a>view_file_declaration ::= <font color="LightSalmon"><b>file</b></font> <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_bundle_declaration"></a>view_bundle_declaration ::= [ <font color="LightSalmon"><b>bundle</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: </b></font><a href="#mode">mode</a> [ <a href="#composite_structure_indication">composite_structure_indication</a> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> | [ <font color="LightSalmon"><b>bundle</b></font> ] <a href="#identifier_list">identifier_list</a> <font color="LightSalmon"><b>: view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> ---++++ Array Mode Views <sticky><pre> <a name="array_view_definition"></a>array_view_definition ::= <a href="#view_object_indication">view_object_indication</a> { <a href="#view_object_indication">view_object_indication</a> } </pre></sticky> <sticky><pre> <a name="view_object_indication"></a>view_object_indication ::= <a href="#view_constant_indication">view_constant_indication</a> | <a href="#view_signal_indication">view_signal_indication</a> | <a href="#view_variable_indication">view_variable_indication</a> | <a href="#view_file_indication">view_file_indication</a> | <a href="#view_bundle_indication">view_bundle_indication</a> </pre></sticky> <sticky><pre> <a name="view_constant_indication"></a>view_constant_indication ::= [ <font color="LightSalmon"><b>constant</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: in</b></font> [ <a href="#subtype_indication">subtype_indication</a> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_signal_indication"></a>view_signal_indication ::= [ <font color="LightSalmon"><b>signal</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: </b></font><a href="#mode">mode</a> [ <a href="#subtype_indication">subtype_indication</a> ] [ <font color="LightSalmon"><b>bus</b></font> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> | [ <font color="LightSalmon"><b>signal</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>bus</b></font> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_variable_indication"></a>view_variable_indication ::= [ <font color="LightSalmon"><b>variable</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: </b></font><a href="#mode">mode</a> [ <a href="#subtype_indication">subtype_indication</a> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> | [ <font color="LightSalmon"><b>variable</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_file_indication"></a>view_file_indication ::= <font color="LightSalmon"><b>file</b></font> <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>:</b></font> <a href="#subtype_indication">subtype_indication</a> <font color="LightSalmon"><b>;</b></font> </pre></sticky> <sticky><pre> <a name="view_bundle_indication"></a>view_bundle_indication ::= [ <font color="LightSalmon"><b>bundle</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: </b></font><a href="#mode">mode</a> [ <a href="#composite_structure_indication">composite_structure_indication</a> ] [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> | [ <font color="LightSalmon"><b>bundle</b></font> ] <font color="LimeGreen"><i>array_element_</i></font><a href="#choice">choice</a> <font color="LightSalmon"><b>: view</b></font> <a href="#composite_structure_indication">composite_structure_indication</a> <font color="LightSalmon"><b>(</b></font> <a href="#mode_view_clause">mode_view_clause</a> <font color="LightSalmon"><b>)</b></font> [ <font color="LightSalmon"><b>:=</b></font> <font color="LimeGreen"><i>static_</i></font><a href="#expression">expression</a> ] <font color="LightSalmon"><b>;</b></font> </pre></sticky> ---++ Proposed Additional Syntax %ICON{wip}% * %ICON{wip}% %ICON{wip}% %ICON{wip}% %ICON{wip}% %ICON{wip}% %ICON{wip}% %ICON{wip}% %ICON{wip}% %ICON{wip}% %BR% *UNDER CONSTRUCTION* * This is an attempt to define the proposed syntax in form of BNF productions. * This is a simplex format in that it does not include all the modifications to existing productions defining where these new productions may syntactically be used. * The BNF productions do not define all syntax options in their entirety and will therefore be elaborated with associated text. --- * *interface_signal_declaration:* This is required for an *entity* *based signal* view syntax as an option to that of the signal mode used in the definition of an interface port. * The mode *view* is defined using the composite *type* identifier to reference a *view* associated with that *type*. The *view* is referenced as a mode *view* clause. --- * *mode_view_clause:* The mode *view* clause defines two options. <sticky><pre> <a name="mode_view_clause"></a>mode_view_clause ::= <font color="LimeGreen"><i>mode_view_</i></font><a href="#indentifier">indentifier</a> [<font color="LightSalmon"><b> ( </b></font><a href="#generic_map_aspect">generic_map_aspect</a><font color="LightSalmon"><b> )</b></font> ] | <font color="LimeGreen"><i>formal_</i></font><a href="#composite_element_clause">composite_element_clause</a> </pre></sticky> * The first references a named mode *view* declaration with an option to include a *generic* *map*. This is to enable the passing of an *entity* based *generic* through to the named mode *view*. <sticky><pre> <B>use</B> work.cpu_bus_2m8s_pkg.<B>all</B> <B>entity</B> master_ent <B>is</B> <B>generic</B> ( slave_id_jg : slaves_total_jrt; master_id_jg : masters_total_jrt ); <B>port</B> ( rst_i <B>: in std_logic</B> clk_i <B>: in std_logic</B>; cpu_bus_rif <B>: view</B> master_r( master_rvw( <B>generic map</B>( slave_id_jg => slave_id_jg, master_id_jg => master_id_jg ) ) ) ); <B>end entity</B> master_ent; </pre></sticky> * The second object allows for an unnamed mode *view* to be declared in place within the *entity* declaration and is defined as a composite *element* clause. <sticky><pre> <B>use</B> work.cpu_bus_2m8s_pkg.<B>all</B> <B>entity</B> arbiter_ent <B>is</B> <B>generic(</B> slave_id_jg : slaves_total_jrt ); <B>port(</B> rst_i <B>: in std_logic;</B> clk_i <B>: in std_logic;</B> cpu_bus_rif <B>: view</B> cpu_bus_r( <B>element(</B> arbiter_al <B>: view</B> arbiter_a( <B>element</B>( others <B>: view</B> arbiter_r; <B>element</B>( master_rl <B>: in</B> master_r; bus_req_l <B>: in std_logic</B>; bus_grnt_l <B>: buffer std_logic</B> rst_i <B>: in std_logic</B> clk_i <B>: in std_logic</B>; cpu_bus_rif <B>: view</B> master_r( master_rvw( <B>generic map</B>( slave_id_jg => slave_id_jg, master_id_jg => master_id_jg ) ) ) ); <B>end entity</B> master_ent; </pre></sticky> * The second object allows for an unnamed mode *view* to be declared in place within the *entity* declaration and is defined as a composite *element* clause. <sticky><pre> <B>use</B> work.cpu_bus_2m8s_pkg.<B>all</B> <B>entity</B> arbiter_ent <B>is</B> <B>generic(</B> slave_id_jg : slaves_total_jrt ); <B>port(</B> rst_i <B>: in std_logic;</B> clk_i <B>: in std_logic;</B> cpu_bus_rif <B>: view</B> cpu_bus_r( <B>element(</B> arbiter_al <B>: view</B> arbiter_a( <B>element</B>( others <B>: view</B> arbiter_r; <B>element</B>( master_rl <B>: in</B> master_r; bus_req_l <B>: in std_logic</B>; bus_grnt_l <B>: buffer std_logic</B>
E
dit
|
A
ttach
|
P
rint version
|
H
istory
: r49
<
r48
<
r47
<
r46
<
r45
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r49 - 2020-02-17 - 15:35:00 -
JimLewis
P1076/Ballots
Log In
or
Register
P1076/Ballots 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-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback