RE: [sv-ec] Comments on 890-5.pdf

From: Warmke, Doug <doug_warmke_at_.....>
Date: Mon Feb 12 2007 - 10:14:16 PST
Comments below... 

> -----Original Message-----
> From: Jonathan Bromley [mailto:jonathan.bromley@doulos.com] 
> Sent: Monday, February 12, 2007 4:34 AM
> To: Warmke, Doug; sv-ec@server.eda.org
> Subject: RE: [sv-ec] Comments on 890-5.pdf
> 
> Doug,
> 
> > (2) Signedness of cycle delays:  Cycle delays in a ##
> > construct must be integral and non-negative.  It's not
> > entirely clear what happens if a negative number appears
> > in this context.  [...]
> > DOUG: You seem to have taken care of this with one of
> > your proposed edits below (requiring cycle delays to
> > be non-negative integers).  That's fine with me.
> 
> I'm not sure it is taken care of.  My concern is
> that someone might unwittingly supply a negative 
> integer in a ##N, and because ## requires non-negative
> the expression is implicitly cast unsigned'(N).  If
> that were the case, no error would ensue and we would
> probably have a very bewildered user a rather large 
> number of cycles later.  It seems to me there are three
> viable choices: 
> (a) treat all ## expressions as unsigned, avoiding any 
>     error but risking crazy delay values;
> (b) silently clip negative expressions to zero;
> (c) follow (a), but issue a warning or even an error 
>     for a negative value.
> 
> My personal preference is definitely for (c), but it's 
> probably more important to follow whatever already 
> happens with #N delays - what *does* happen there?!

DOUG: I like (c) as well.
Any suggestions for wording that into the LRM?
BTW, I inspected the 1364 standard and the topic of
negative delays is not treated clearly for delay_control
and delay_value.

There is an indication that delay_value should be an
unsigned integer.  But that's all.  A similar proposal
could be made for delay controls - maybe as part of a
new Mantis?

> 
> > 15.12 Input sampling
> > ~~~~~~~~~~~~~~~~~~~~
> [...]
> >   When an input or inout clockvar appears in any expression 
> >   its value is the signal's sampled value, that is, the 
> >   value that the clocking block sampled at the most
> >   recent clocking event.
> > DOUG: Is this better than "sampling point"?
> > There may be a skew involved, which would mean that
> > the sample doesn't occur precisely at the clocking event.
> 
> Hmmm... the clockvar is updated at the clocking event, with
> a value sampled at some earlier clocking point.  I don't 
> feel too strongly about it, although the imprecision of 
> the existing wording troubled me somewhat, hence my phrase
> "the value that the clocking block sampled".  (No criticism -
> the wording that bothers me long predates your proposals!)

DOUG: That's a good interpretation and explanation.
I'm now fine with your wording if others are.

> 
> 
> >   An optional cycle delay control, of the form ##expression,
> >   may immediately follows the synchronous drive operator <=.
> > DOUG: follows should be follow
> 
> Oops. Thanks.
> 
> 
> >   NOTE: As with any other procedural statement, a clocking
> >   drive statement may have a cycle delay of the form ##N 
> >   as a prefix.  Such a cycle delay, used as a prefix to 
> >   any procedural statement, waits for the specified
> >   number of cycles of the default clocking.
> > DOUG: I'm not very comfortable with this suggestion.
> > The main text treats cycle_delay as if it's only used
> > on the rhs of the <= operator.  Since that use is probably
> > fairly rare, it seems confusing.  I'd rather treat both
> >    ##n cb.v <= e;   -and-   cb.v <= ##n e;
> > as equals when it comes to describing cycle_delay.
> 
> Really?  My reasoning was that ##N as a delay prefix now
> universally adopts the default clocking, and is a prefix
> to ANY procedural statement - so it makes more sense to
> keep it out of this discussion of "intra-drive" ##N,
> which uses the target's clocking.  The note was there
> to answer the question that might pop into a reader's
> head - what happens to ##N as a delay prefix, then? -
> after discussion of <=##N .
> 
> The problem here, I think, is that you've (correctly)
> got rid of the special syntax for
> 
>   ##N cb.tgt <= expression;
> 
> (because the target clocking has no effect on that ##N)
> so we now have no hook for discussing the semantics of
> ##N as a prefix to a procedural statement.
> 
> I think we could both be satisfied by a fairly explicit
> discussion of the role and semantics of ##N as a delay 
> prefix, probably _before_ the material on "intra-drive"
> delay.

DOUG: Agreed.  The _before_ would be good, since that will
be the main usage, and thus it would make sense to treat
it earlier than the more arcane usage.

> 
> 
> > (3) Last paragraph of 15.4:  Is it true that we want *all*
> > output clockvars initialised to 'bZ?  Surely clockvars that
> > drive a *variable* should be initialised to 'bX?
> > 
> > DOUG: This doesn't matter.
> > One can't read the value of an output clockvar.
> > And an output clockvar won't spontaneously update its associated
> > clocking signal - a drive needs to occur first.  
> 
> That dawned on me about an hour after I sent the previous
> message.  In fact, there is no point whatsoever in 
> initialising an output *clockvar*.  The thing you should 
> initialise to 'bZ is the hidden variable that's created 
> when a clocking output drives a net, because it's that 
> hidden variable whose value is driven out on to the net by 
> continuous assignment until such future time as the relevant 
> clockvar is driven.  This hidden variable is definitely 
> distinct from the clockvar, just as a clocking output
> variable is distinct from its clockvar.  It may be necessary
> to add something to the effect that this is a conceptual
> or reference model, and implementations are free to 
> get the same effect by other means; I've noticed that
> whenever I try to discuss a reference model for the 
> behaviour of clocking, someone always says "ah, but it
> doesn't have to work quite like that"!

DOUG: Totally agreed here.
I'm open to any suggestions for improved wording,
and I do think the wording I chose in 890-5 should
be improved.

> 
> 
> > (1) Suggest replacing the last sentence:
> > 
> >   This is because reading the input always yields the last 
> >   sampled value, and not the driven value.
> > with
> [stuff]
> > DOUG: I prefer the original sentence.
> > I think it says everything that needs to be said, with less words.
> 
> OK, mine was an attempt to make it more precise, but
> I'm happy to accept your judgment on it.
> 
> 
> > Just curious:  Is another batch of suggestions coming on
> > the Program block changes?
> 
> Yes, that was the plan, if you can face the effort of
> reading through it.  Sorry it didn't come all at once,
> but I was interrupted by a grandson crawling over the
> keyboard :-)

DOUG: Thanks for all the help, Jonathan.
I really appreciate it.

Regards,
Doug

> -- 
> 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 Mon Feb 12 10:14:58 2007

This archive was generated by hypermail 2.1.8 : Mon Feb 12 2007 - 10:16:47 PST