[sv-bc] Inconsistencies in virtual interfaces and modports

From: Jonathan Bromley <jonathan.bromley_at_.....>
Date: Thu Jul 12 2007 - 05:22:55 PDT
To BC because it's about interfaces and modports,
and EC because it's about virtual interfaces.

I'm sorry to beat on this yet again, but I'm pretty sure that
we have some inconsistencies that are already causing serious
problems with understanding, and look likely to cause 
inconsistency of tool behaviour too.

Recent discussion of the semantics of a modport element with
output direction has converged on the idea that modport output
to a variable in the interface represents a continuous 
assignment to the variable from something in the connected
module.  I'm fairly sure that most tools currently get 
this wrong, but we'll let that pass.

My first problem is purely one of LRM verbiage: we have 
nothing in the LRM that makes this situation clear, and
far less do we have any clear statement of the consequence:
that putting a modport-type port in a module's port list 
implicitly creates a variable in the module, whose contents 
are continuous-assigned to the variable in the interface
and whose name is "modport_name.variable_name".

An unequivocal definition would have spared Brad Pierce 
the trouble of setting my understanding straight in

  http://www.eda-stds.org/sv-bc/hm/6265.html

However, if we accept this interpretation (modport
output represents a continuous assign) then we have
a serious inconsistency relating to virtual interfaces.
It is currently illegal to do continuous assignment to a
target of the form <virtual_interface>.<interface_member>.
But it *is* legal to write to such a target procedurally.
If the virtual interface variable is bound to a modport,
and the interface_member is a modport output, then
we have an implicit continuous assignment.  I think
that's broken.

Should we make it illegal to bind a virtual interface
to any modport that has outputs?  That would be workable -
it would still be OK to bind the virtual interface to
a modport that provides a clocking.

Or should we struggle with legitimising continuous 
assignment via a virtual interface?  We could have
done it by appealing to procedural assign/deassign,
but that's been deprecated now....

Thanks
-- 
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24 1AW, UK
Tel: +44 (0)1425 471223                   Email: jonathan.bromley@doulos.com
Fax: +44 (0)1425 471573                           Web: http://www.doulos.com

The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Jul 12 05:23:47 2007

This archive was generated by hypermail 2.1.8 : Thu Jul 12 2007 - 05:25:27 PDT