The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Design Languages >> Verilog-AMS >> accuracy of absdelay()
https://designers-guide.org/forum/YaBB.pl?num=1190004121

Message started by Aigneryu on Sep 16th, 2007, 9:42pm

Title: accuracy of absdelay()
Post by Aigneryu on Sep 16th, 2007, 9:42pm

Hi,

 Previous I used this model to model the finite delay in tri-state PFD.


module pfd_cp_ena_j (out, ref, vco, ena);

output out; electrical out;     // current output
input ref; voltage ref;         // positive input (edge triggered)
input vco; voltage vco;         // inverting input (edge triggered)
input ena; voltage ena;         // PFD enable control
parameter real ip=100u;         // maximum sourcing current
parameter real in=100u;         // sinking current
parameter real vh=+1;           // input voltage in high state
parameter real vl=-1;           // input voltage in low state
parameter real vth1=(vh+vl)/2;  // threshold voltage at input
parameter real vth2=(vh+vl)/2;  // threshold voltage for ena
parameter integer dir=1 from [-1:1] exclude 0;
                               // dir=1 for positive edge trigger
                               // dir=-1 for negative edge trigger
parameter real tt=1p;           // transition time of output signal
parameter real td=0;            // average delay from input to output
parameter real jitter=0;        // white edge-to-edge jitter
parameter real ttol=1f;         // time tolerance, recommend ttol << jitter
parameter real tidle=1n;       // feedback delay in tri-state PFD

integer state_ref, state_vco, seed;
real dt;
real rst;

analog begin
   @(initial_step)
     begin
       seed = 716;
       rst=0;
     end

   @(cross((V(ref)-vth1), dir, ttol) or above(vth2-(V(ena)), ttol))
   begin
       if (V(ena) < vth2)
         begin
          state_ref = 0;
          dt = jitter*$rdist_normal(seed,0,1);
         end
       else
         begin
           if (state_ref==0) state_ref =  1;
           dt = jitter*$rdist_normal(seed,0,1);
         end
   end

   @(cross((V(vco)-vth1), dir, ttol) or above(vth2-(V(ena)),  ttol))
   begin
       if (V(ena) < vth2)
         begin
          state_vco=0;
          dt = jitter*$rdist_normal(seed,0,1);
         end
       else
         begin
           if (state_vco ==0) state_vco = 1;
           dt = jitter*$rdist_normal(seed,0,1);
         end
   end

   @(above((rst-0.5), ttol))
       begin
          state_ref = 0;
          state_vco = 0;
          dt = jitter*$rdist_normal(seed,0,1);
       end

//     rst=idtmod(2/tidle*state_ref*state_vco, 0, 1, -0.5);
      rst=absdelay((state_ref&&state_vco), tidle);
    I(out) <+ transition(-ip*state_ref+in*state_vco, td+dt , tt);
//   I(out) <+ transition(iout*state, td + dt, tt);

end
endmodule


However, I found it is very critical to simulate the feedback delay correctly with time step control of transient simulation.
With tidle=1n, and run transient directly, the delay will become 1.xns.
If I tighten the maxstep, the delay will approach to 1ns. I thought verilog-A should be able to capture the delay correctly since it is event-driven simulator. And I just do not want to set to tight limits on the maxstep for the sake of speed. Does anybody have any good suggestion?

Title: Re: accuracy of absdelay()
Post by Ken Kundert on Sep 16th, 2007, 11:28pm

Verilog-A is not event-driven.

How are you observing the delay from absdelay? I don't see where the output is ever used.

Why do you specify delay both with the transition and the absdelay? Absdelay is a heavy function that is designed to analog signals. Since you are passing piecewise constant signals, you would be better served using the delay in the transition function.

-Ken

Title: Re: accuracy of absdelay()
Post by Aigneryu on Sep 17th, 2007, 10:13am

Hi,

 I use absdelay() to model the finite delay time of the tri-state PFD, the delay is usually made longer on purpose to deal with the deadzone problem caused by slow turn-on time of the chargepump. So I need this feedback reset to have much longer delay than td, which should be the dealy from digital state to current output. In sum, I need a delay when current is on, but different delay when the current is off. Is there a more sophisticated way to do this?



Sincerely,

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.