The Designer's Guide Community
Forum
Welcome, Guest. Please Login or Register. Please follow the Forum guidelines.
May 11th, 2024, 4:10am
Pages: 1
Send Topic Print
Nonideal Opamp Verilog-A Model - tran. analysis (Read 5651 times)
daims
New Member
*
Offline



Posts: 1
Stanford, CA
Nonideal Opamp Verilog-A Model - tran. analysis
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 ..   Embarrassed  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

Back to top
 

output.jpg
View Profile   IP Logged
Pages: 1
Send Topic Print
Copyright 2002-2024 Designer’s Guide Consulting, Inc. Designer’s Guide® is a registered trademark of Designer’s Guide Consulting, Inc. All rights reserved. Send comments or questions to editor@designers-guide.org. Consider submitting a paper or model.