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. |