ISSUE 5

Number 5
Category errata
Synopsis Bad description of implicit nets created from continuous assignments
State lrmdraft
Class errata-simple
Arrival-DateJul 30 2001
Originator Paul Graham, Cadence
Release 2001a, 2001b, 3.5
Environment
http://boydtechinc.com/btf/archive/btf_1997/1297.html
http://boydtechinc.com/btf/archive/btf_1997/1291.html
Description
Section 6.1.2 says,
"The continuous assignment statement shall place a
continuous assignment on a net data type.
The net may be explicitly declared,
or may inherit an implicit declaration in accordance
with the implicit declarations rules defined in 3.5."

Unfortunately, section 3.5 does not mention that case.

Furthermore, it is not clear what is the width of the
implicit net.

According to the notes in my mail archives,
it seems that a scalar is created unless the name is
connected to a vector port.

Yet a third case is if I have
assign a[0:3] = b ;
and a is not explicitly declared nor connected to a port.
That is, the range explicitly appears in the continuous
assignment.

All this needs to be cleared up and 6.1.2 and 3.5
brought into alignment with each other.

See BE55 and BE61 in the BTF database.
(I don't know why they became two different entries.
They seem very similar.)
Fix
This was submitted to IEEE in Oct, 2001
Passed 10/7/02:

Add to 3.5 the following additional item:

If an identifier appears on the left-hand side of a continuous
assignment statement, and that identifier has not been declared
previously, an implicit scalar net declaration of the default net
type is assumed.

Audit-Trail

From: Shalom Bresticker <Shalom.Bresticker@motorola.com>
To: btf-bugs@boyd.com, pgraham@cadence.com
Cc:
Subject: Re: errata/5: Bad description of implicit nets created from continuous assignments
Date: Wed, 01 Aug 2001 11:17:20 +0300

--------------41C428665E5D873F78089DC2
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Paul,

See my comments inside.

> The wording of section 6.1.2 was updated to refer to section 3.5, which is
> good, sort of. It is good that the definition of an implicit signal was
> concentrated in one section in the LRM, instead of being repeated
> redundantly in several sections. But 3.5, the key section, was never
> updated to include the new intention of allowing an assignment lhs to imply
> an implicit signal declaration.
>
> Section 6.1.2 is also inaccurate, in that it suggests that an assignment
> target may *only* be an explicitly or implicitly declared net. It can of
> course be a part-select or bit-select or concatenation.

True.
Table 6-1, which comes earlier, is clear, but 6.1.2 is not completely precise.

My understanding is that an implicit declaration occurs only when the LHS is a simple net identifier,
i.e., not part-select or bit-select or concatenation.


> Or what about:
>
> parameter p1 = 4, p2 = 4;
> input [p1-1:0] x, y;
>
> assign z = x * y;
>
> What is the width of z? Is it 1? Is it (p1 + p2)?

My understanding is that z is implicitly declared as a scalar.
A lint tool should then identify a mismatch between LHS and RHS widths.


> Since the LRM has been through several drafts and has been approved by the
> IEEE with the existing wording, and since this new type of implicit
> declaration has some unresolved issues, I think that Verilog-2001 should
> omit this new feature.

Which new feature ?
Since it's already in 6.1.2, it can't be omitted.


> Let it go into Verilog-2006, after it has been
> thought through more carefully.

We can't (almost) make a change which will affect backward compatability,
only fix bugs and make new extensions.

By the way, we don't have to wait till 2006.
I have already proposed that we start preparing a new revision sooner with corrections
and maybe some small enhancements which we might be able to agree on by then.

Shalom


> > Section 6.1.2 says,
> > "The continuous assignment statement shall place a continuous assignment on a net data type. The net may be explicitly declared,
> or
> > may inherit an implicit declaration in accordance with the implicit declarations rules defined in 3.5."
> >
> > Unfortunately, section 3.5 does not mention that case.
> >
> > I'll file a bug report.
> >
> > What should the width be in that case ?
> > According to my mail archives, it seems that a scalar is created unless the name is connected to a vector port.

--
**************************************************************************
Shalom Bresticker Shalom.Bresticker@motorola.com
Motorola Semiconductor Israel, Ltd. Tel #: +972 9 9522268
P.O.B. 2208, Herzlia 46120, ISRAEL Fax #: +972 9 9522890
**************************************************************************



--------------41C428665E5D873F78089DC2
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

Paul,

See my comments inside.
<blockquote TYPE=CITE>The wording of section 6.1.2 was updated to refer
to section 3.5, which is

good, sort of.  It is good that the definition of an implicit
signal was

concentrated in one section in the LRM, instead of being repeated

redundantly in several sections.  But 3.5, the key section, was
never

updated to include the new intention of allowing an assignment lhs
to imply

an implicit signal declaration.

Section 6.1.2 is also inaccurate, in that it suggests that an assignment

target may *only* be an explicitly or implicitly declared net. 
It can of

course be a part-select or bit-select or concatenation.
True.

Table 6-1, which comes earlier, is clear, but 6.1.2 is not completely
precise.

My understanding is that an implicit declaration occurs only when the
LHS is a simple net identifier,

i.e., not part-select or bit-select or concatenation.

 
<blockquote TYPE=CITE>Or what about:

    parameter p1 = 4, p2 = 4;

    input [p1-1:0] x, y;

    assign z = x * y;

What is the width of z?  Is it 1?  Is it (p1 + p2)?
My understanding is that z is implicitly declared as a scalar.

A lint tool should then identify a mismatch between LHS and
RHS widths.

 
<blockquote TYPE=CITE>Since the LRM has been through several drafts and
has been approved by the

IEEE with the existing wording, and since this new type of implicit

declaration has some unresolved issues, I think that Verilog-2001 should

omit this new feature.
Which new feature ?

Since it's already in 6.1.2, it can't be omitted.

 
<blockquote TYPE=CITE> Let it go into Verilog-2006, after it has been

thought through more carefully.
We can't (almost) make a change which will affect backward compatability,

only fix bugs and make new extensions.

By the way, we don't have to wait till 2006.

I have already proposed that we start preparing a new revision
sooner with corrections

and maybe some small enhancements which we might be able to agree on
by then.

Shalom

 
<blockquote TYPE=CITE>> Section 6.1.2 says,

> "The continuous assignment statement shall place a continuous assignment
on a net data type. The net may be explicitly declared, or

> may inherit an implicit declaration in accordance with the implicit
declarations rules defined in 3.5."

>

> Unfortunately, section 3.5 does not mention that case.

>

> I'll file a bug report.

>

> What should the width be in that case ?

> According to my mail archives, it seems that a scalar is created
unless the name is connected to a vector port.

-- 
 **************************************************************************
 Shalom Bresticker                           Shalom.Bresticker@motorola.com
 Motorola Semiconductor Israel, Ltd.                  Tel #: +972 9 9522268
 P.O.B. 2208, Herzlia 46120, ISRAEL                   Fax #: +972 9 9522890
 **************************************************************************

 

--------------41C428665E5D873F78089DC2--


From: Paul Graham <pgraham@cadence.com>
To: Shalom.Bresticker@motorola.com
Cc: btf-bugs@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from continuous assignments
Date: Wed, 1 Aug 2001 07:18:57 -0700 (PDT)

> > Since the LRM has been through several drafts and has been approved by the
> > IEEE with the existing wording, and since this new type of implicit
> > declaration has some unresolved issues, I think that Verilog-2001 should
> > omit this new feature.
>
> Which new feature ?
> Since it's already in 6.1.2, it can't be omitted.

The new feature that I meant is a declaration implied by an otherwise
undefined assignment target. And it's not mentioned in 6.1.2. 6.1.2 only
refers to implicit declarations, without defining them. And section 3.5,
which defines then, doesn't mention the implicit declaration of an
assignment target. The only written reference I have seen to this new
feature is in Stuart Sutherland's nice overview of the Verilog-2000 features
(slide 14) in which he gives this example:

Verilog-2000 assign n = a * b; // defaults to wire, width of (a * b)

which disagrees with your understanding that the implicit declaration
should be a scalar.

I wonder how many vendors have started implementation based on Sutherland's
slides? They may well become the de-facto LRM. Why not -- they're much
easier to read!

Paul

From: Stuart Sutherland <stuart@sutherland-hdl.com>
To: btf-bugs@boyd.com, btf@boyd.com
Cc: btf@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from
continuous assignments
Date: Wed, 01 Aug 2001 08:27:21 -0700

My "Verilog-2000" presentation become the de facto standard? I HOPE NOT!

Just to set the record straight, my "Verilog-2000" presentation was created
for HDLCon 2000. I had to submit the paper and examples in January 2000,
several weeks before the ballot draft for the 1364 LRM was complete. A
couple of specifications changed between when I wrote the paper and the
actual ballot draft, such as attributes. As a result of the balloting,
some more things changed, such as the rules for constant functions. And,
alas, the ballot review process took so long that the standard became
"Verilog-2001" instead of "Verilog-2000".

In regards to implicit nets on the LHS of continuous assignments, my text
and example were based on what I understood would be added to the ballot
draft, but which apparently never made it in. I recall discussing that
particular slide and example with Cliff to make sure I understood the
intent of the behavioral task force resolution of the enhancement. And I
still think I got the intent correct. In my opinion, The fact that a
vector net on the LHS of continuous assignment is _not_ inferred was an
editing error in the preparation of ballot draft. Unfortunately, the error
was not caught during the ballot, and is now part of the standard.

I raised a red flag on this issue with Cliff several months ago, when I was
going through "draft 6", the post-ballot LRM, to create the Verilog-2001
version of my quick reference guide. Cliff said he was sure it was in the
LRM somewhere, but didn't have time at that moment to look for it. I
finally decided to pull the enhancement from my reference guide, because I
could not find anywhere in the LRM that said a vector would be inferred on
the LHS of a continuous assignment.

So let me ask all of the BTF a question. Should I update the slide
presentation? I've left it alone, because changing it would mean it is no
longer the presentation I gave at HDLCon 2000. But, in addition to this
example on implicit nets for continuous assignments, there are some minor
errata in some of the examples. If companies really are considering my
slides as "a de facto LRM" instead of the IEEE 1364-2001 LRM, then perhaps
I should update the examples?

Stu

At 07:21 AM 8/1/2001, Paul Graham wrote:
>Precedence: bulk
>
>
>The following reply was made to PR errata/5; it has been noted by GNATS.
>
>From: Paul Graham <pgraham@cadence.com>
>To: Shalom.Bresticker@motorola.com
>Cc: btf-bugs@boyd.com
>Subject: Re: errata/5: Bad description of implicit nets created from
>continuous assignments
>Date: Wed, 1 Aug 2001 07:18:57 -0700 (PDT)
>
> > > Since the LRM has been through several drafts and has been approved
> by the
> > > IEEE with the existing wording, and since this new type of implicit
> > > declaration has some unresolved issues, I think that Verilog-2001 should
> > > omit this new feature.
> >
> > Which new feature ?
> > Since it's already in 6.1.2, it can't be omitted.
>
> The new feature that I meant is a declaration implied by an otherwise
> undefined assignment target. And it's not mentioned in 6.1.2. 6.1.2 only
> refers to implicit declarations, without defining them. And section 3.5,
> which defines then, doesn't mention the implicit declaration of an
> assignment target. The only written reference I have seen to this new
> feature is in Stuart Sutherland's nice overview of the Verilog-2000 features
> (slide 14) in which he gives this example:
>
> Verilog-2000 assign n = a * b; // defaults to wire, width of (a * b)
>
> which disagrees with your understanding that the implicit declaration
> should be a scalar.
>
> I wonder how many vendors have started implementation based on Sutherland's
> slides? They may well become the de-facto LRM. Why not -- they're much
> easier to read!
>
> Paul

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stuart Sutherland Sutherland HDL Inc.
stuart@sutherland-hdl.com 22805 SW 92nd Place
phone: 503-692-0898 Tualatin, OR 97062
www.sutherland-hdl.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


From: Shalom Bresticker <Shalom.Bresticker@motorola.com>
To: Stuart Sutherland <stuart@sutherland-hdl.com>
Cc: btf-bugs@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from continuous assignments
Date: Thu, 02 Aug 2001 15:52:08 +0300

--------------944F9094BE3175100B97645B
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Stuart Sutherland wrote:

> In regards to implicit nets on the LHS of continuous assignments, my text
> and example were based on what I understood would be added to the ballot
> draft, but which apparently never made it in. I recall discussing that
> particular slide and example with Cliff to make sure I understood the
> intent of the behavioral task force resolution of the enhancement. And I
> still think I got the intent correct. In my opinion, The fact that a
> vector net on the LHS of continuous assignment is _not_ inferred was an
> editing error in the preparation of ballot draft. Unfortunately, the error
> was not caught during the ballot, and is now part of the standard.

I don't remember any such resolution.
All my email archives refer to implicit declaration of a vector
only in the case of a net which is connected to a port.

I also see problems with it, otherwise. Let's take the example:

> Verilog-2000 assign n = a * b; // defaults to wire, width of (a * b)

What is the range of n ? Is it [0:N] or [N:0] or [17:N+17] ?
Is n accessible only as a vector, with no bit-selects or part-selects ?
1364 has no such concept.

What happens if there are two parallel continuous assignments to n,
each with a different width ?

What happens if I write
assign n[0:3] = a * b ; ?

Etc.

So I think the correct and best thing is that it will imply a scalar.

Besides, you still have the form:
wire [0:N] n = a * b ;


> I raised a red flag on this issue with Cliff several months ago, when I was
> going through "draft 6", the post-ballot LRM, to create the Verilog-2001
> version of my quick reference guide. Cliff said he was sure it was in the
> LRM somewhere, but didn't have time at that moment to look for it. I
> finally decided to pull the enhancement from my reference guide, because I
> could not find anywhere in the LRM that said a vector would be inferred on
> the LHS of a continuous assignment.
>
> So let me ask all of the BTF a question. Should I update the slide
> presentation? I've left it alone, because changing it would mean it is no
> longer the presentation I gave at HDLCon 2000. But, in addition to this
> example on implicit nets for continuous assignments, there are some minor
> errata in some of the examples. If companies really are considering my
> slides as "a de facto LRM" instead of the IEEE 1364-2001 LRM, then perhaps
> I should update the examples?

I think you definitely should, because people are relying on it,
especially because of your standing in 1364.

I think you should also add a warning note on your web-site.

Regards,
Shalom


>
>
> Stu
>
> At 07:21 AM 8/1/2001, Paul Graham wrote:
>
> > > > Since the LRM has been through several drafts and has been approved
> > by the
> > > > IEEE with the existing wording, and since this new type of implicit
> > > > declaration has some unresolved issues, I think that Verilog-2001 should
> > > > omit this new feature.
> > >
> > > Which new feature ?
> > > Since it's already in 6.1.2, it can't be omitted.
> >
> > The new feature that I meant is a declaration implied by an otherwise
> > undefined assignment target. And it's not mentioned in 6.1.2. 6.1.2 only
> > refers to implicit declarations, without defining them. And section 3.5,
> > which defines then, doesn't mention the implicit declaration of an
> > assignment target. The only written reference I have seen to this new
> > feature is in Stuart Sutherland's nice overview of the Verilog-2000 features
> > (slide 14) in which he gives this example:
> >
> > Verilog-2000 assign n = a * b; // defaults to wire, width of (a * b)
> >
> > which disagrees with your understanding that the implicit declaration
> > should be a scalar.
> >
> > I wonder how many vendors have started implementation based on Sutherland's
> > slides? They may well become the de-facto LRM. Why not -- they're much
> > easier to read!
> >
> > Paul
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Stuart Sutherland Sutherland HDL Inc.
> stuart@sutherland-hdl.com 22805 SW 92nd Place
> phone: 503-692-0898 Tualatin, OR 97062
> www.sutherland-hdl.com
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--
**************************************************************************
Shalom Bresticker Shalom.Bresticker@motorola.com
Motorola Semiconductor Israel, Ltd. Tel #: +972 9 9522268
P.O.B. 2208, Herzlia 46120, ISRAEL Fax #: +972 9 9522890
**************************************************************************



--------------944F9094BE3175100B97645B
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

Stuart Sutherland wrote:
<blockquote TYPE=CITE>In regards to implicit nets on the LHS of continuous
assignments, my text

and example were based on what I understood would be added to the ballot

draft, but which apparently never made it in.  I recall discussing
that

particular slide and example with Cliff to make sure I understood the

intent of the behavioral task force resolution of the enhancement. 
And I

still think I got the intent correct.  In my opinion, The fact
that a

vector net on the LHS of continuous assignment is _not_ inferred was
an

editing error in the preparation of ballot draft.  Unfortunately,
the error

was not caught during the ballot, and is now part of the standard.
I don't remember any such resolution.

All my email archives refer to implicit declaration of a vector

only in the case of a net which is connected to a port.

I also see problems with it, otherwise. Let's take the example:

>      Verilog-2000    assign
n = a * b; // defaults to wire, width of (a * b)

What is the range of n ?  Is it [0:N] or [N:0] or [17:N+17] ?

Is n accessible only as a vector, with no bit-selects or part-selects
?

1364 has no such concept.

What happens if there are two parallel continuous assignments to n,

each with a different width ?

What happens if I write

    assign n[0:3] = a * b ; ?

Etc.

So I think the correct and best thing is that it will imply a scalar.

Besides, you still have the form:

    wire [0:N] n = a * b ;

 
<blockquote TYPE=CITE>I raised a red flag on this issue with Cliff several
months ago, when I was

going through "draft 6", the post-ballot LRM, to create the Verilog-2001

version of my quick reference guide.  Cliff said he was sure it
was in the

LRM somewhere, but didn't have time at that moment to look for it. 
I

finally decided to pull the enhancement from my reference guide, because
I

could not find anywhere in the LRM that said a vector would be inferred
on

the LHS of a continuous assignment.

So let me ask all of the BTF a question.  Should I update the slide

presentation?  I've left it alone, because changing it would mean
it is no

longer the presentation I gave at HDLCon 2000.  But, in addition
to this

example on implicit nets for continuous assignments, there are some
minor

errata in some of the examples.  If companies really are considering
my

slides as "a de facto LRM" instead of the IEEE 1364-2001 LRM, then
perhaps

I should update the examples?
I think you definitely should, because people are relying on it,

especially because of your standing in 1364.

I think you should also add a warning note on your web-site.

Regards,

Shalom

 
<blockquote TYPE=CITE> 

Stu

At 07:21 AM 8/1/2001, Paul Graham wrote:

>  > > Since the LRM has been through several drafts and has been
approved

> by the

>  > > IEEE with the existing wording, and since this new type
of implicit

>  > > declaration has some unresolved issues, I think that Verilog-2001
should

>  > > omit this new feature.

>  >

>  > Which new feature ?

>  > Since it's already in 6.1.2, it can't be omitted.

>

>  The new feature that I meant is a declaration implied by an
otherwise

>  undefined assignment target.  And it's not mentioned in
6.1.2.  6.1.2 only

>  refers to implicit declarations, without defining them. 
And section 3.5,

>  which defines then, doesn't mention the implicit declaration
of an

>  assignment target.  The only written reference I have
seen to this new

>  feature is in Stuart Sutherland's nice overview of the Verilog-2000
features

>  (slide 14) in which he gives this example:

>

>      Verilog-2000    assign
n = a * b; // defaults to wire, width of (a * b)

>

>  which disagrees with your understanding that the implicit declaration

>  should be a scalar.

>

>  I wonder how many vendors have started implementation based
on Sutherland's

>  slides?  They may well become the de-facto LRM. 
Why not -- they're much

>  easier to read!

>

>  Paul

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Stuart Sutherland                                 
Sutherland HDL Inc.

stuart@sutherland-hdl.com                         
22805 SW 92nd Place

phone: 503-692-0898                               
Tualatin, OR 97062

www.sutherland-hdl.com

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-- 
 **************************************************************************
 Shalom Bresticker                           Shalom.Bresticker@motorola.com
 Motorola Semiconductor Israel, Ltd.                  Tel #: +972 9 9522268
 P.O.B. 2208, Herzlia 46120, ISRAEL                   Fax #: +972 9 9522890
 **************************************************************************

 

--------------944F9094BE3175100B97645B--


From: "Clifford E. Cummings" <cliffc@sunburst-design.com>
To: btf-bugs@boyd.com
Cc: btf@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from
continuous assignments
Date: Fri, 03 Aug 2001 12:32:04 -0700

Hi, All -

I have been busy and unable to keep up with all of the new errata that have
been posted lately, but Don Mills contacted me and said I should probably
get involved with this one, now.

I can see that some additional wording is in order, especially in section
3.5 and possibly in section 6.1.2.

The problem with updating a Verilog standard is that information about
functionality is placed in multiple locations within the document. As a BTF
we tried to make clear enhancements. We obviously failed in this case.
Specific proposals for changes to specific paragraphs to satisfy everyone's
understanding of the enhancement would be greatly appreciated.

Paul and Mac have already pointed out to me that genvars should be labeled
as "natural" (0 plus all positive integers) as opposed to the "positive"
label that we used in the standard.

With respect to errata/5:

I proposed this enhancement/errata during the standards process to remove
the annoying requirement that 1-bit wires on the LHS of a continuous
assignment, that do not go to a port, must be explicitly declared.
Everywhere in the Verilog language, an undeclared identifier defaults to a
1-bit wire, except the above case (Verilog-1995).

In Verilog-1995:
- If the LHS variable of a continuous assignment drives a port, the size
can be inferred from the port definition and the data type is assumed to be
wire, unless otherwise declared.
- If the LHS variable of a continuous assignment does NOT drive a port, the
size and data type must be declared, even if it is just a 1-bit wire (most
annoying!).

Because of the latter requirement, engineers disperse 1-bit wire
declarations, with declaration assignments, throughout their RTL code to
avoid having to make numerous 1-bit wire declarations elsewhere in the
module.

The enhancement was added to remove the non-orthogonal requirement to
declare all 1-bit internal nets. Nothing more.

The enhancement was never intended to infer nets with sizes greater than
1-bit. I am not opposed to such an enhancement in the future, but I am also
not opposed to requiring declarations of all internal busses. Because
internal bus declarations are required, engineers also disperse wire-bus
declarations with assignments throughout their RTL code. Oh well!

The `default nettype = none enhancement is the exact opposite of this
enhancement, that is, this enhancement requires that all 1-bit wires be
declared. Having done a large VHDL ASIC (which requires all signal and
variable declarations) where the top-level design included three pages of
1-bit signal declarations and where I spent as much time debugging
declarations as I did debugging actual design problems, I find the `default
nettype = none enhancement to be repulsive and a step backwards; however, I
know there are factions that like to require engineers to declare all
signals as a form of self-documentation. I obviously am not one of those
engineers. I also know that the `default nettype = none enhancement is
touted as a way to easily find typos. I personally think it
counterproductive to add three pages of net declarations to find one or two
misspelled identifiers (which takes longer?). I personally think this is
the job of a good waveform viewer. (Now descending from soap-box).

Stu - I vote that you update you HDLCON-2001 presentation materials since
some people have started using it as a reference for implementing
Verilog-2001 enhancements. You might even want to add a further disclaimer
on the last slide that this is not the IEEE standard, might contain errors,
that you intend to continuously update the slides, and that the most recent
copy can be downloaded from your website at www.sutherland-hdl.com/... . I
think you have just created a living document and have semi-obligated
yourself to maintaining it. Fun, eh? ;-)

BTW slide 14 that Paul references below is a slide that I recently flagged
to Don Mills as a slide with an error. There were about a half-dozen slides
where I suggested corrections and I know Stu intends to give a corrected
and updated presentation in an upcoming conference. Stu, do you want to
give details since people like Paul are using your slides as reference
examples?

Regards - Cliff

At 08:30 AM 8/1/01 -0700:

>The following reply was made to PR errata/5; it has been noted by GNATS.
>
>From: Stuart Sutherland <stuart@sutherland-hdl.com>
>To: btf-bugs@boyd.com, btf@boyd.com
>Cc: btf@boyd.com
>Subject: Re: errata/5: Bad description of implicit nets created from
> continuous assignments
>Date: Wed, 01 Aug 2001 08:27:21 -0700
>
> My "Verilog-2000" presentation become the de facto standard? I HOPE NOT!
>
> Just to set the record straight, my "Verilog-2000" presentation was created
> for HDLCon 2000. I had to submit the paper and examples in January 2000,
> several weeks before the ballot draft for the 1364 LRM was complete. A
> couple of specifications changed between when I wrote the paper and the
> actual ballot draft, such as attributes. As a result of the balloting,
> some more things changed, such as the rules for constant functions. And,
> alas, the ballot review process took so long that the standard became
> "Verilog-2001" instead of "Verilog-2000".
>
> In regards to implicit nets on the LHS of continuous assignments, my text
> and example were based on what I understood would be added to the ballot
> draft, but which apparently never made it in. I recall discussing that
> particular slide and example with Cliff to make sure I understood the
> intent of the behavioral task force resolution of the enhancement. And I
> still think I got the intent correct. In my opinion, The fact that a
> vector net on the LHS of continuous assignment is _not_ inferred was an
> editing error in the preparation of ballot draft. Unfortunately, the error
> was not caught during the ballot, and is now part of the standard.
>
> I raised a red flag on this issue with Cliff several months ago, when I was
> going through "draft 6", the post-ballot LRM, to create the Verilog-2001
> version of my quick reference guide. Cliff said he was sure it was in the
> LRM somewhere, but didn't have time at that moment to look for it. I
> finally decided to pull the enhancement from my reference guide, because I
> could not find anywhere in the LRM that said a vector would be inferred on
> the LHS of a continuous assignment.
>
> So let me ask all of the BTF a question. Should I update the slide
> presentation? I've left it alone, because changing it would mean it is no
> longer the presentation I gave at HDLCon 2000. But, in addition to this
> example on implicit nets for continuous assignments, there are some minor
> errata in some of the examples. If companies really are considering my
> slides as "a de facto LRM" instead of the IEEE 1364-2001 LRM, then perhaps
> I should update the examples?
>
> Stu
>
> At 07:21 AM 8/1/2001, Paul Graham wrote:
> >Precedence: bulk
> >
> >
> >The following reply was made to PR errata/5; it has been noted by GNATS.
> >
> >From: Paul Graham <pgraham@cadence.com>
> >To: Shalom.Bresticker@motorola.com
> >Cc: btf-bugs@boyd.com
> >Subject: Re: errata/5: Bad description of implicit nets created from
> >continuous assignments
> >Date: Wed, 1 Aug 2001 07:18:57 -0700 (PDT)
> >
> > > > Since the LRM has been through several drafts and has been approved
> > by the
> > > > IEEE with the existing wording, and since this new type of implicit
> > > > declaration has some unresolved issues, I think that Verilog-2001
should
> > > > omit this new feature.
> > >
> > > Which new feature ?
> > > Since it's already in 6.1.2, it can't be omitted.
> >
> > The new feature that I meant is a declaration implied by an otherwise
> > undefined assignment target. And it's not mentioned in 6.1.2. 6.1.2
only
> > refers to implicit declarations, without defining them. And section 3.5,
> > which defines then, doesn't mention the implicit declaration of an
> > assignment target. The only written reference I have seen to this new
> > feature is in Stuart Sutherland's nice overview of the Verilog-2000
features
> > (slide 14) in which he gives this example:
> >

> > Verilog-2000 assign n = a * b; // defaults to wire, width of (a
* b)
> >
> > which disagrees with your understanding that the implicit declaration
> > should be a scalar.
> >
> > I wonder how many vendors have started implementation based on
Sutherland's
> > slides? They may well become the de-facto LRM. Why not -- they're much
> > easier to read!
> >
> > Paul

//*****************************************************************//
// Cliff Cummings Phone: 503-641-8446 //
// Sunburst Design, Inc. FAX: 503-641-8486 //
// 14314 SW Allen Blvd. E-mail: cliffc@sunburst-design.com //
// PMB 501 Web: www.sunburst-design.com //
// Beaverton, OR 97005 //
// //
// Expert Verilog, Synthesis and Verification Training //
//*****************************************************************//

From: Shalom Bresticker <Shalom.Bresticker@motorola.com>
To: "Clifford E. Cummings" <cliffc@sunburst-design.com>
Cc: btf-bugs@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from continuous assignments
Date: Sun, 05 Aug 2001 10:10:37 +0300

--------------DCCBDBEC7A0493DA5D60B025
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Cliff,

This is off the subject for errata/5, but for the record:

genvars are NOT labeled as "positive".

The exact wording (in draft 6) is :

"A genvar is an integer that is local to and shall only be used within a generate loop that uses it as an index variable.
If any bit of the genvar ever is set to an X or Z or if the genvar is set to a negative value, this shall be an error."

Shalom


"Clifford E. Cummings" wrote:

> Paul and Mac have already pointed out to me that genvars should be labeled
> as "natural" (0 plus all positive integers) as opposed to the "positive"
> label that we used in the standard.

--
**************************************************************************
Shalom Bresticker Shalom.Bresticker@motorola.com
Motorola Semiconductor Israel, Ltd. Tel #: +972 9 9522268
P.O.B. 2208, Herzlia 46120, ISRAEL Fax #: +972 9 9522890
**************************************************************************



--------------DCCBDBEC7A0493DA5D60B025
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

Cliff,

This is off the subject for errata/5, but for the record:

genvars are NOT labeled as "positive".

The exact wording (in draft 6) is :

"A genvar is an integer that is local to and shall only be used within
a generate loop that uses it as an index variable.

If any bit of the genvar ever is set to an X or Z or if the genvar
is set to a negative value, this shall be an error."

Shalom

 

"Clifford E. Cummings" wrote:
<blockquote TYPE=CITE>Paul and Mac have already pointed out to me that
genvars should be labeled

as "natural" (0 plus all positive integers) as opposed to the "positive"

label that we used in the standard.

-- 
 **************************************************************************
 Shalom Bresticker                           Shalom.Bresticker@motorola.com
 Motorola Semiconductor Israel, Ltd.                  Tel #: +972 9 9522268
 P.O.B. 2208, Herzlia 46120, ISRAEL                   Fax #: +972 9 9522890
 **************************************************************************

 

--------------DCCBDBEC7A0493DA5D60B025--


From: Shalom Bresticker <Shalom.Bresticker@motorola.com>
To: Cc: btf-bugs@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from continuous assignments
Date: Mon, 06 Aug 2001 17:11:51 +0300

--------------5503AF6BF4AC9A5C62223058
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Here's an interesting curiosity in Verilog-XL.

I just encountered such a case, and it turns out you can't reference it with a hierarchial name reference.

Example:

module qq ( a ) ;
output [3:0] a ;
assign a = 2 ;
endmodule

module pp ;
initial force qq.a = 0 ;
endmodule

will give you a message that a is undeclared in qq.

From pp, it recognizes a only as an external port of qq, not as an internal signal.

Shalom


"Clifford E. Cummings" wrote:

> In Verilog-1995:
> - If the LHS variable of a continuous assignment drives a port, the size
> can be inferred from the port definition and the data type is assumed to be
> wire, unless otherwise declared.

--
**************************************************************************
Shalom Bresticker Shalom.Bresticker@motorola.com
Motorola Semiconductor Israel, Ltd. Tel #: +972 9 9522268
P.O.B. 2208, Herzlia 46120, ISRAEL Fax #: +972 9 9522890
**************************************************************************



--------------5503AF6BF4AC9A5C62223058
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

Here's an interesting curiosity in Verilog-XL.

I just encountered such a case, and it turns out you can't reference
it with a hierarchial name reference.

Example:

module qq ( a ) ;

output [3:0] a ;

assign a = 2 ;

endmodule

module pp ;

initial force qq.a = 0 ;

endmodule

will give you a message that a is undeclared in qq.

From pp, it recognizes a only as an external port of qq, not as an internal
signal.

Shalom

 

"Clifford E. Cummings" wrote:
<blockquote TYPE=CITE>In Verilog-1995:

- If the LHS variable of a continuous assignment drives a port, the
size

can be inferred from the port definition and the data type is assumed
to be

wire, unless otherwise declared.

-- 
 **************************************************************************
 Shalom Bresticker                           Shalom.Bresticker@motorola.com
 Motorola Semiconductor Israel, Ltd.                  Tel #: +972 9 9522268
 P.O.B. 2208, Herzlia 46120, ISRAEL                   Fax #: +972 9 9522890
 **************************************************************************

 

--------------5503AF6BF4AC9A5C62223058--


From: Steven Sharp <sharp@cadence.com>
To: btf@boyd.com, btf-bugs@boyd.com
Cc: btf@boyd.com
Subject: Re: errata/5: Bad description of implicit nets created from continuous assignments
Date: Mon, 6 Aug 2001 14:09:25 -0400 (EDT)

>From: Shalom Bresticker <Shalom.Bresticker@motorola.com>
>To: Cc: btf-bugs@boyd.com
>Subject: Re: errata/5: Bad description of implicit nets created from
continuous assignments

> Here's an interesting curiosity in Verilog-XL.
>
> I just encountered such a case, and it turns out you can't reference it with a
hierarchial name reference.
>
> Example:
>
> module qq ( a ) ;
> output [3:0] a ;
> assign a = 2 ;
> endmodule
>
> module pp ;
> initial force qq.a = 0 ;
> endmodule
>
> will give you a message that a is undeclared in qq.
>
> From pp, it recognizes a only as an external port of qq, not as an internal
signal.
>

I just tried this testcase in Verilog-XL 3.20.s002 and it worked fine.
Perhaps this problem has been fixed since the version you are using.

Steven Sharp
sharp@cadence.com


From: Shalom.Bresticker@motorola.com
To: etf-bugs@boyd.com
Cc:
Subject: Re: errata/5: Bad description of implicit nets created from continuous
assignments
Date: Wed, 25 Sep 2002 12:15:18 +0300 (IDT)

I had wondered whether the fix to errata/5 was formally approved by the VSG.

I found the following mail which indicates that such a vote did indeed take
place. I do not have the following mails, but I assume there were such and that
the fix was officially approved.

So we can leave 5 as vsg-passed.
However, that does not apply to 8 and 18.

Shalom

---------- Forwarded message ----------
Date: Fri, 05 Oct 2001 11:20:28 -0700
From: Clifford E. Cummings <cliffc@sunburst-design.com>
To: btf@boyd.com, 1364core@ovi.org
Subject: Verilog Standards Group - VOTE - (votes due Tuesday, October 9, 2001)

Precedence: bulk

Dear Verilog Standards Group Members -

Please review the following proposal and vote YES or NO by Tuesday, October
9th.

Eligible voters and their respective votes are listed at the end of this
e-mail message.

The following paragraph has been proposed to be added to section 3.5 of the
IEEE1364-2001 to clarify an issue that has already caused severe confusion
about an enhancement that was added to the IEEE1364-2001 Standard, even
before the Standard has been officially published. We are now trying to
clarify the issue before the Standard goes to print.

Stu Sutherland has submitted a "friendly amendment" to the section 3.5
proposal. I believe Stu's wording is more accurate and takes into account
the `default_nettype compiler directive, so I have modified the wording for
this proposal as follows:

-----

MODIFIED PROPOSAL: Add the following indented paragraph to the end of
section 3.5. Indenting to match the indenting of the two last paragraphs
already in section 3.5:

"If an identifier appears on the left-hand side of a continuous assignment
statement, and that identifier has not been declared previously, an
implicit scalar net declaration of the default net type is assumed."

-----

Please note: a "NO" vote does not remove this enhancement from the
IEEE1364-2001 Standard, it merely keeps the above paragraph of
clarification from being added to the Standard. The enhancement will still
be part of the Standard, but will remain poorly documented and confusing.

If you have already previously voted on the former wording of this
proposal, and if your vote does not change due to the changed wording to
this proposal, you do not have to submit a new vote (your vote will be
counted the same as before). If you have not already voted, please vote YES
or NO on the above proposed addition to the end of section 3.5 and e-mail
your vote to me no later than Tuesday, October 9th, 2001.

Approval will be by simple majority of all IEEE VSG members that elect to
cast a vote.

Regards - Cliff Cummings
Behavioral Task Force Chairperson

VOTES - IEEE VSG (per names listed in the front of the IEEE1364-2001 Standard)
Adam Krolnik - YES
Alec G. Stanculescu - ??
Anders Nordstrom - ??
Andrew T. Lynch - ??
Charles Dawson - ??
Chris Spear - YES
Clifford E. Cummings - YES
David Roberts - ??
Deborah J. Dalio - ??
Girish S. Rao - ??
Hiroaki Nishi - ??
James A. Markevitch - ??
Karen Pieper - YES
Kasumi Hamaguchi - ??
Kurt Baty - ??
Leigh Brady - ??
Lukasz Senator - ??
Lynn A. Horobin - ??
Makoto Makino - ??
Maqsoodul (Maq) Mannan - ??
Marek Ryniejski - ??
Michael McNamara - ??
Naveen Gupta - ??
Paul Colwill - ??
Prabhakaran Krishnamurthy - ??
Shalom Bresticker - ??
Stefen Boyd - YES
Steve Meyer - ??
Steve Wadsworth - ??
Steven Sharp - ??
Stu Sutherland - YES
Stuart Sutherland - ??
Takashima Mitsuya - ??
Tatsuro Nakamura - ??
Ted Elkind - ??
Tom Dewey - ??
Tom Fitzpatrick - ??
Tsutomu Someya - ??
Yasuaki Hatta - ??
Yatin Trivedi - ??
Yokozeki Atsushi - ??

VOTES - BY OTHER INTERESTED PARTIES (Do not count towards the official vote)
Don Mills - YES
Paul Graham - NO
(I believe Paul's objection is not related to the wording of the proposal,
but that implicit scalar wire declarations from continuous assignments are
even allowed. This enhancement was already approved by the IEEE1364 Verilog
Standards Group. We are now just trying to clean up some confusion in the
IEEE1364-2001 Standard)

//*****************************************************************//
// Cliff Cummings Phone: 503-641-8446 //
// Sunburst Design, Inc. FAX: 503-641-8486 //
// 14314 SW Allen Blvd. E-mail: cliffc@sunburst-design.com //
// PMB 501 Web: www.sunburst-design.com //
// Beaverton, OR 97005 //
// //
// Expert Verilog, Synthesis and Verification Training //
//*****************************************************************//



From: Shalom Bresticker <Shalom.Bresticker@motorola.com>
To: 1364@accellera.org, etf-bugs@boyd.com
Cc:
Subject: Re: errata/5: Bad description of implicit nets created from continuous
assignments
Date: Mon, 23 Dec 2002 11:46:54 +0200

I have changed the wording of the end of this addition slightly, to make it
consistent with the wording of the first two bullets in this clause,

FROM:

If an identifier appears on the left-hand side of a continuous assignment
statement ... , an implicit scalar net declaration of the default net type is
assumed.

TO:

If an identifier appears on the left-hand side of a continuous assignment
statement ... , then an implicit scalar net of default net type shall be assumed.

Shalom

Unformatted


Hosted by Boyd Technology