RE: [sv-bc] Re: 1619 suggestions

From: Bresticker, Shalom <shalom.bresticker_at_.....>
Date: Tue Dec 04 2007 - 01:04:26 PST
Cliff,

I'll avoid mentioning defparams here so as not to provoke you.

My original thought was to respond like Tom did at the beginning, that
default behavior should not change. Afterwards, I thought that in
reality, default behaviors change frequently in non-trivial software,
and a Verilog model is software. Heck, even Verilog simulators change
their default behavior now and then and don't provide adequate
protection against it.

Some thoughts:

1. You have talked about using .* to avoid accidental unconnected ports
and accidental implicit net declarations. You have said that many people
do not use Lint tools and you want some protection within the language.
But look at the other side of the story. Many people do use Lint tools
to detect these and will continue to do so for several reasons. For
example, 
A. Lint tools detect many other problems. So since they will use Lint
tools anyway for the other problems, they will use them for these as
well.
B. Lint tools allow more flexibility. For example, some people want to
allow implicitly unconnected outputs. The Lint tool allows them to pick
and choose.
C. Lint tools allow you to check legacy code.
And many people will continue to connect all the ports explicitly, if
for no other reason than that there is not much name matching between
the formal and actual port names. Most of these probably won't add .*,
which will seem to them redundant.

All that was just an introduction to say that the same problem would
occur if one used simple named connections without any .*. If the
instantiated module is changed to include a new port with a default,
then the default will be used and there will not be an unconnected port.
That is the very essence of the default. This can happen with tasks and
functions, too. If the task/function is changed to add an additional
argument, with a default, the same thing happens. You'd maybe like to
add .* to task and function calls also. I would not object. 

2. The same thing can happen today also if the instantiated module is
changed to add a new parameter with a default that changes the behavior.
All the old module instantiations will not include the new parameter.
The same thing can also happen if the parameter already exists, but its
default value is changed. Then the behavior of all the instantiations
which do not override the parameter changes.

3. Maybe you would like instead a compiler directive or tool switch that
would not allow using .* with defaults. This could work two ways. One is
as you suggest, in the instantiated module with the defaults. The other
way is it could be defined in the instantiating module. Then each user
could decide for himself how he wants it.

4. I personally see the main benefit of .* as a way to make the code
much more compact and eliminate redundant information. I see what you
call the stronger checking as only a secondary side-effect. Defaults are
an additional way to make the code more compact. I see defaults and .*
as complementing each other. Thus, I don't see a big disadvantage in the
risk you see, because I don't see that eliminating that risk was a main
goal of .*. And as I wrote above, the risk would still occur with
regular named association. 

5. You wrote to Tom, "Understood and agreed. Although the new notation
is convenient, the old notation was not terrible. That was the intent of
this example." Your example had only 1 such port. I have seen examples
of blocks with dozens of ports that are connected to default values. The
classic case is an input which is not always used. If you don't need it,
you can then just leave it off the port connection list. With dozens of
such ports, the difference is tremendous.

And I didn't even mention defparams. But see below.

Regards,
Shalom
 

> >If I understand correctly, if an IP provider uses () in the default 
> >port declaration, this means that the default port semantics 
> WRT .* as 
> >defined by 1619 apply to this port. In other words, if there is no 
> >parent declaration for this signal, the instantiation will use the 
> >default.  If we do not use the (), then the semantics change which 
> >force the implicit .name semantics.  In other words if the 
> parent does 
> >not have the signal, then an error occurs.
> >
> >So, if an IP provider were to start using default port values and 
> >wanted to protect themselves from unconnected ports that 
> have default 
> >values, they would not use the () in order to force users to always 
> >have a matching name in the parent and the child.
> >
> >The distinction which becomes clear, then is whether or not 
> the signal 
> >exists in the parent and the child.  When an IP provider 
> uses () there 
> >does not have to be a match.  If they do not have the () then parent 
> >and child MUST match, even when using a default.
> 
> This is correct.
> 
> >Okay, that makes sense now. The bottom line is whether or 
> not we want 
> >to provide this enhancement.  This will complicate the 
> proposal and I 
> >am not convinced it provides a lot of benefit to it. I still 
> go back to 
> >my argument that IP providers need to be diligent and 
> understand what 
> >they are getting into.  If they really wanted to ensure that 
> their IP 
> >not be misused with default port connections then they shouldn't use 
> >them at all.
> 
> As long as IP providers and the general SystemVerilog RTL 
> designer population can be trusted to use the proposed 
> default-ports enhancement correctly, then my concern is 
> unfounded.  I do not believe IP and RTL designers will always 
> do the right thing; hence, my concern.
> 
> >But I don't see that this is something that can't be added 
> in a later 
> >version of the spec.  In fact, it shouldn't be too hard to add this 
> >enhancement later such that it is backwards compatible with the 
> >existing proposal.
> 
> Unfortunately, I do not think this is true. If default ports 
> are used and then later enhanced with () declarations, 
> previously working default ports could start to fail.
> 
> That having been said, I believe Gord understood what I was 
> talking about and is opposed to this modification both now 
> and in the future. 
> I am not even 100% convinced that my modification adequately 
> addresses my concern, but it does get me part way.
> 
> I say, go ahead and pass this. I will vote no so I can tell 
> those I teach that I thought this was a bad idea. When I tell 
> students that something is a bad idea, they pay closer 
> attention to the feature and will more likely use it correctly.

Like you know what?
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Tue Dec 4 01:05:57 2007

This archive was generated by hypermail 2.1.8 : Tue Dec 04 2007 - 01:08:15 PST