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