Clarification on NOW and BREAK


Subject: Clarification on NOW and BREAK
From: Craig Winters (cwinters@cadence.com)
Date: Thu Oct 11 2001 - 07:10:15 PDT


Request for clarification of IEEE Std 1076.1-1999, (VHDL-AMS)

I would like to get clarification of these two issues involving
behavior to the NOW function and the BREAK statement. Thank you
for your attention to this query.

Craig Winters
Cadence Design Systems
cwinters@cadence.com

Definition of NOW and Tc?

   Regarding the NOW function, what value is returned when
   the call occurs in an analog expression such as in the example
   code in section 5.4 of the LRM:

    Sine == Amplitude * sin ( Math_2_pi * Freq * NOW );

   NOW is defined as returning Tc in section 12.7 of the LRM:

    The functions denoted STD.Standard.NOW is equivalent to
    universal_to_physical_time(Tc) (where it returns a value of type
    DELAY_LENGTH) and universal_to_real_time(Tc) (where it returns a
    value of type REAL).

   The value of Tc is updated in the simulation cycle, as specified
   in 12.6.4:

    A simulation cycle consists of the following steps:
      a) The analog solver is executed.
      b) The current time, Tc is set equal to Tn.
      ...

   But the analog solver uses a different variable, Ti, to represent the
   time at individual solution points as described in 12.6.6:

    when the analog solver resumes at time Tc it simultaneously
    resets Tn to a new value Tn' and determines a sequence of times
    Ti in the interval [Tc , Tn']. Tn' is the lesser of Tn and the
    least value in the interval [Tc , Tn] at which any signal
    Q'Above(E) becomes contradictory. The times Ti must include Tn'.
    At each time Ti the following steps occur:
      ...
      [none of these steps updates Tc]

   Since none of the steps modifies Tc, Tc must stay at the same value
   as the analog solver progresses from Tc to Tn'. However if that is
   the case, the expression in 5.4 (above) would not be correct, or at
   least not accurate.

   I believe the NOW function should return Ti when in the analog
   solver, but I would like clarification of this issue.

Where can BREAK occur?
   I would like to verify my interpretation that BREAK statements can
   only occur in process statements, equivalent process statements (in
   the case of the Concurrent Break), or in subprograms which have
   processes as the ultimate parent.

   I cannot directly show this with the LRM. I find indications that
   this is the intent, but I also can construct examples where break
   statements are executed in analog expressions.

   The counter-indication is a break statement written into a subprogram
   called by a simultaneous procedural, or a function called in an
   expression of a simple simultaneous statement, or in the condition
   of a simultaneous if, or similar construct.

   The indications that this is not the intent include the fact that
   breaks cannot occur in simultaneous procedural statements (15.4);
   and that the break flag is only checked by the analog solver at the
   point it is resumed,
   not at each analog solution points between Tc and Tn' (12.6.6),
   whereas the BREAK statement (8.14) definition states that the
   discontinuity augmentation set must be applied at the next analog
   solution point. This could not be accomplished, since Tn' is not
   affected by the break-flag.

   Further, it makes sense that discontinuities would occur as a result
   of the discrete events of signals rather than as a result of the
   continuous computations of the analog solver.

   Finally, the Q'ACROSS mechanism provides a way to create a signal
   transaction at the break condition and break out of the analog solver
   to execute the break.



This archive was generated by hypermail 2b28 : Thu Oct 11 2001 - 07:29:26 PDT