The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Modeling >> Behavioral Models >> Nonideal Opamp Verilog-A Model - tran. analysis
https://designers-guide.org/forum/YaBB.pl?num=1172219586

Message started by daims on Feb 23rd, 2007, 12:33am

Title: Nonideal Opamp Verilog-A Model - tran. analysis
Post by daims on Feb 23rd, 2007, 12:33am

(Hi, it's my first time posting, so please let me know if anything I posted is against any rules. Thanks! =))

I'm using the non-ideal opamp model from AHDL library in Cadence. The code is the same as one posted by hchanda: http://www.designers-guide.org/Forum/YaBB.pl?num=1165362179/5#5.

I put the opamp in non-inverting config. with gain of 10 (Rf = 100K, Rin = 10K). I get a good AC responsce with correct 3db freq and gain of 10 at low freq; correct clamping from DC sweep, but I get unreasonably slewing behavior in transient analysis. If I use the the ideal parameters from the code (gain = 835K, sr = 1M, freq_u = 1M, rin = 1M, rout = 80, ibias= vref = voffset = 0, rsrc = 0.5M, vsoft = 0.5, inmax = 100e-6.... )   and give input amplitude of 1V, it slews with a slope of 435K when specified slew rate is 1M.  No slewing clearly for much smaller input voltages, but I need to see output voltage swinging rail to rail. (+/- 5V). Right now, it's slewing so much that output peak voltage is much smaller than input voltages - not amplifying... (I'm attaching output plots)

I'm not sure if transient behavior is not correctly modelled in the model. If it's correctly modelled, how could I twick the equation or combinations of parameters to adjust the slewing behavior? I've been blindly changing parameters to correct for slewing, but clearly monkeying is not working ..   :-[  Could anyone explain how this model determines transient or slewing output?

I'm guessing the relavant part of the code might be the one shown below, but I still can't tell why actual slew_rate is not what I specify...

c1 = iin_max/slew_rate;
gm_nom = 2 * `PI * freq_unitygain * c1;
r1 = gain/gm_nom;
vmaxin = in_max/gm_nom;
...
...
I(vref, cout) <+ gm_nom*vin_val;



Thanks so much for your help & time!  ;D


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