RE: [sv-bc] modports proposal


Subject: RE: [sv-bc] modports proposal
From: Jacobi, Dan (dan.jacobi@intel.com)
Date: Wed Jan 29 2003 - 21:55:37 PST


It look like the lines in my previous E-mail were wrapped,
this make the E-mail hard to read.

I am reformatting my previous E-mail
(http://www.eda.org/vlog-pp/sv-bc/hm/0408.html)
in order to make it more readable

---------------------------------------------------------------
Attached id the proposal I was asked to suggest regarding the modports.
Please note that parts of this proposal are quoted from brads
proposal (SV-BC-60).

----- SV-BC Issues -----
This proposal replaces / overlaps / corrects the following SV-BC issues:
- SV-BC-19-69, single declaration definition in modport decls, P-0318
- SV-BC-22-1, BNF Issue, P-0096
- SV-BC-60, Modport syntax issues, P-0358

------ Motivation ------
 1) In an hierarchical interface, modport ports can
       themselves be from modports of interface instances.
       And those instances can be arrayed or generated,
       just like module instances. So rather than

              interface_identifier . port_identifer

       we need

              interface_instance_identifier {[...]}
                         . modport_identifier

   2) The current BNF uses an ANSI-C style in modports that
       would require repetitive declarations of direction and
       import/export, such as,

           modport master ( input a,
                            input b,
                            output c,
                            output d,
                            import task masterRead(),
                            import task masterWrite() ) ;

       but the SystemVerilog language uses a style consistent
       with Verilog 2001, extending the ANSI-C style to
       something like --

           modport master ( input a, b,
                            output c, d,
                            import task masterRead(),
                                   task masterWrite() ) ;

   3) As noted in http://www.eda.org/sv-bc/hm/0221.html
       the [port_type] should not have been in modport_port
       in the existing BNF.

        
-------- Proposal -------
1) replace A.2.9 with

  modport_declaration
           ::=
               'modport' modport_item { ',' modport_item } ';'

  modport_item
           ::=
               modport_identifier '(' modport_ports_declaration
                           { ',' modport_ports_declaration } ')'

  modport_ports_declaration
           ::=
               modport_simple_ports_declaration
             | modport_hierarchical_ports_declaration
             | modport_tf_ports_declaration

  modport_simple_ports_declaration
           ::=
               'input' list_of_modport_port_identifiers
             | 'output' list_of_modport_port_identifiers
             | 'inout' list_of_modport_port_identifiers

  modport_hierarchical_ports_declaration
           ::=
               interface_instance_identifier
                              [ '[' constant_expression ']' ]
                      . modport_identifier

  modport_tf_ports_declaration
           ::=
               import_export modport_tf_port
                              
  modport_tf_port
           ::=
               'task' named_task_proto
                                { ',' named_task_proto }
             | 'function' named_function_proto
                                { ',' named_function_proto }
             | task_or_function_identifier
                                { ',' task_or_function_identifier }

  import_export
           ::=
               'import'
             | 'export'

2) Add to A.9.3 --

  interface_instance_identifier
           ::=
               identifier
3) Add to A.2.3 --

  list_of_modport_port_identifiers
           ::=
               port_identifier { ',' port_identifier }

4) under A.2.6
 REPLACE
    named_function_proto ::= 'function' data_type
        function_identifier '(' list_of_function_proto_formals ')'
 WITH
    named_function_proto ::= data_type
        function_identifier '(' list_of_function_proto_formals ')'

5) under A.2.7
 REPLACE
    named_task_proto ::= 'task' task_identifier
        '(' task_proto_formal { ',' task_proto_formal } ')'
 WITH
    named_task_proto ::= task_identifier
        '(' task_proto_formal { ',' task_proto_formal } ')'

---- One more question ---
Does any body know where the terminal "task_prototype" is used in the BNF

Can we remove the following production from A.2.7 ?
        task_prototype ::=
        'task' '(' { attribute_instance } task_proto_formal
                { ',' { attribute_instance } task_proto_formal } ')'

Dan Jacobi
Phone : (972)-4-8655855



This archive was generated by hypermail 2b28 : Wed Jan 29 2003 - 21:56:19 PST