Re: Verilog-AMS question regarding retention

From: Geoffrey.Coram <Geoffrey.Coram_at_.....>
Date: Sat Oct 08 2005 - 11:45:06 PDT
Arpad -
Switch branches are somewhat tricky to implement correctly.

In the case of

   if (analysis("static"))
      V(Out) <+ V0;
    else
      I(Out) <+ Scale * Cval * ddt(V(Out));

then only one contribution is done for a particular pass
through the code; the I() contrib is not done at the same
time that the V() is, so the V0 should be retained for the
"static" part of the analysis.

I've had some luck with obstinate simulators by declaring
both branches:

  branch (t,b) out_v;
  branch (t,b) out_i;

   if (analysis("static"))
      V(out_v) <+ V0;
    else
      I(out_i) <+ Scale * Cval * ddt(V(out_i));

If you were switching R formulations, eg

   if (R < 1)
      V(out) <+ R * I(out);
   else
      I(out) <+ V(out) / R;

and then later forgot to switch the form when doing noise:

   I(out) <+ white_noise(4*`P_K*$temperature / R, "thermal");

then when R<1, the V-contrib would be lost.  This is case
that the LRM is warning against.


-Geoffrey
Received on Sat Oct 8 11:45:24 2005

This archive was generated by hypermail 2.1.8 : Sat Oct 08 2005 - 11:46:46 PDT