RE: [sv-bc] Sampling semantics in clocking blocks

From: Jonathan Bromley <jonathan.bromley_at_.....>
Date: Thu Jul 28 2005 - 08:23:58 PDT
Gordon Vreugdenhil wrote:

> I absolutely agree that the behavior of #0 input skew needs
> to be more clearly defined with particular care paid to
> the implications of potential races.

Thanks for your response.

Personally I think it's worse than that.  I suspect that "input #0"
should not be permitted at all, or should be mapped to "input #1step",
because there is a violent discontinuity between the sampling semantics
of "input #0" and any other value: any other value whatever will report
the sampled value of signals as they were *before* the action of 
a clock, whereas "input #0" reports the sampled value of signals
*after* the clock edge has taken effect, if the DUT being sampled 
is a zero-delay RTL model.  

What, for example, would happen if we ask for "input #1ps" and then 
set the timestep to 1ns?  Presumably, #1ps is then rounded-down to #0.  
Consequently, merely changing the timestep has shifted the sampling 
point effectively by a whole clock cycle.

> My understanding is that the update 
  [of the resampled value of an "input #0" signal in a clocking]
> happens in the Observed
> region.  This is a bit problematic since there is an assumption
> that there is value stability upon entry to the observed region

I agree

> and that assumption is not correct for input #0 clocking block
> variables.  Having an assertion read a value like M.C.q is definitely
> an issues since there is a race with the assertion evaluation.

I don't fully understand this, though.  Assertions *execute* in the
Observed region but they evaluate sampled values *captured* in the
Preponed region.  So I don't think there is a race between "input #0"
and assertions, unless the assertions do some very bizarre things.
I do, however, suspect that the results could be highly counter-
intuitive; at the timestep of an active clock edge, assertions 
will report/sample the pre-clock value of signals captured
by "input #0" in a clocking, even though the definition of
"input #0" suggests sampling of the post-clock value.

> Unfortunately, I don't think that changing the update time to
> NBA or Active helps that much since other kinds of races
> show up in those cases.  I think that a reasonable solution
> would be the clarify that input #0 skews are defined to update
> in the observed and to disallow and observed region reading
> of such clocking block variables.  Still not great, but
> at least it would be defined.

It isn't only "input #0" that worries me.  I simply don't 
see in the LRM any definition of how and when the resampled
(clocking-block member) input signals are updated, nor of when
clocking-block member output signals are sampled.  I am fairly
sure that there is some implied assumption about the way the
whole thing operates, but that implied assumption is quite
opaque to me - and, as I've pointed out, tool implementors
seem to disagree about it.
-- 
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

This e-mail and any  attachments are  confidential and Doulos Ltd. reserves 
all rights of privilege in  respect thereof. It is intended for the use of 
the addressee only. If you are not the intended recipient please delete it 
from  your  system, any  use, disclosure, or copying  of this  document is 
unauthorised. The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.
Received on Thu Jul 28 08:24:08 2005

This archive was generated by hypermail 2.1.8 : Thu Jul 28 2005 - 08:24:18 PDT