* OPA858 ***************************************************************************** * (C) Copyright 2018 Texas Instruments Incorporated. All rights reserved. ***************************************************************************** ** This model is designed as an aid for customers of Texas Instruments. ** TI and its licensors and suppliers make no warranties, either expressed ** or implied, with respect to this model, including the warranties of ** merchantability or fitness for a particular purpose. The model is ** provided solely on an "as is" basis. The entire risk as to its quality ** and performance is with the customer. ***************************************************************************** * ** Released by: Texas Instruments Inc. * Part: OPA858 * Date: 09/28/2018 * Model Type: All In One * Simulator: Pspice * Simulator Version: 17.2 * EVM Order Number: N/A * EVM Users Guide: N/A * Datasheet: May 2017 * * Model Version: 2.0 * ***************************************************************************** * * Updates: * * Version 1.0 : Release to Web * 2.0 : Improving convergence * 2.1 : Matching the recovery time with Figure 22 of the datasheet * ***************************************************************************** * The following parameters are modeled: * Input Offset Voltage, Input Bias Current, VIH/VIL, DC CMRR, * small signal freq response, Input Referred Voltage Noise, * Input Referred Current Noise, Slew Rate, * Short Circuit Output Current, VOH/VOL, VOH/VOL vs. Output Current * Iq_on, Iq_off, PSRR ***************************************************************************** .subckt OPA858 INP INN VCC VEE OUT XI0 VEE VCC INN INP OUT PD VFA_HT5 RPD PD 0 1G .ends .subckt ESDDIODES VCC VEE VIN VOUT PARAMS: VESDL=-700e-3 VESDH=-700e-3 XIDVIH NET12 NET16 DiodeIdeal XIDVIL NET16 NET20 DiodeIdeal R0 VIN NET16 1e-3 V0 NET16 VOUT 0 VESDL NET20 VEE {VESDL} VESDH VCC NET12 {VESDH} .ends ESDDIODES .subckt VINRANGE3 SIGNAL1 SIGNAL2 VCC VEE VINM VINP PARAMS: SignalGain=1 VIL=100e-3 VIH=100e-3 XIDVIL NET13 NET074 DiodeIdeal XIDVIH NET076 NET13 DiodeIdeal FVIL2 SIGNAL2 VEE VIL {SignalGain} FVIL1 SIGNAL1 VEE VIL {SignalGain} FVIH1 VCC SIGNAL1 VIH {SignalGain} FVIH2 VCC SIGNAL2 VIH {SignalGain} E1 NET8 0 VINM 0 1 E0 NET6 0 VINP 0 1 VIL NET074 VEE {VIL} VIH VCC NET076 {VIH} R7 NET8 NET13 1 R6 NET6 NET13 1 .ends VINRANGE3 .subckt ZIN IN1 IN2 OUT1 OUT2 PARAMS: R5=100e-3 R4=100e-3 C3=50e-15 C2=50e-15 + C1=50e-15 R2=10e9 R1=10e9 R3=1e9 R5 IN2 OUT2 {R5} R4 IN1 OUT1 {R4} C3 OUT1 OUT2 {C3} C2 OUT2 0 {C2} C1 OUT1 0 {C1} GR2 OUT2 0 OUT2 0 {1/R2} GR1 0 OUT1 0 OUT1 {1/R1} GR3 OUT1 OUT2 OUT1 OUT2 {1/R3} .ends ZIN .subckt DOMPOLE A B C PARAMS: R2=1e-3 R1=2.653e6 C2=1e-15 C1=10e-12 R2 NET7 A {R2} R1 B A {R1} C2 NET7 C {C2} C1 A B {C1} .ends DOMPOLE .subckt PHASEDELAY A B VIN VOUT PARAMS: R1=1 R2=1e9 C1=1e-15 C2=1e-15 Gain=1 L=1e-12 R5 VOUT NET026 1e-3 R3 NET15 NET024 1e-3 R1 NET27 NET15 {R1} R4 NET15 A 1e9 R2 VOUT B {R2} C1 NET024 A {C1} C2 NET026 B {C2} E0 NET27 0 VIN 0 {Gain} L0 NET15 VOUT {L} .ends PHASEDELAY .subckt NONDOMPOLE C VIN VOUT PARAMS: L=1e-12 Gain=1 C=226.7e-12 Rp=1e9 Rs=1 L0 NET020 VOUT {L} E0 NET4 0 VIN 0 {Gain} C1 NET019 C {C} R3 VOUT C {Rp} R2 VOUT NET019 1e-3 R1 NET020 NET4 {Rs} .ends NONDOMPOLE .subckt ANALOG_BUFFER VOUT VIN R0 VIN 0 1e9 R1 VOUT 0 1e9 E0 VOUT 0 VIN 0 1 .ends ANALOG_BUFFER .subckt OUTPUTCIR PD VCC VCCMAIN VEE VEEMAIN VIN VOUT *XI25 NET75 NET092 OutputCir_IscDiodeIdeal PARAMS: IS=10e-15 N=50e-3 *XI23 NET79 NET76 OutputCir_IscDiodeIdeal PARAMS: IS=10e-15 N=50e-3 **XIVOL VOL VEE VIMONINV OutputCir_VOHVOL PARAMS: VSUPPLYREF=-2.5 VOUTvsIOUT_X1= **+ {ABS(0)} VOUTvsIOUT_Y1=-2.3 VOUTvsIOUT_X2= {ABS(-100e-3)} VOUTvsIOUT_Y2=-2 **+ **XIVOH VCC VOH VIMON OutputCir_VOHVOL PARAMS: VSUPPLYREF=2.5 VOUTvsIOUT_X1= {ABS(0)} **+ VOUTvsIOUT_Y1=2.3 VOUTvsIOUT_X2= {ABS(100e-3)} VOUTvsIOUT_Y2=2 *XIVOL VOL VEE VIMONINV OutputCir_VOHVOL PARAMS: VSUPPLYREF=-2.5 VOUTvsIOUT_X1= *+ {ABS(0)} VOUTvsIOUT_Y1=-1.25 VOUTvsIOUT_X2= {ABS(-18.6724e-3)} VOUTvsIOUT_Y2=-1.23448 *+ *XIVOH VCC VOH VIMON OutputCir_VOHVOL PARAMS: VSUPPLYREF=2.5 VOUTvsIOUT_X1= {ABS(0)} *+ VOUTvsIOUT_Y1=1.25 VOUTvsIOUT_X2= {ABS(19.51225e-3)} VOUTvsIOUT_Y2=1.09755 EVOH VCC VOH TABLE { V(VIMON) } = + (0,0.9) + (60m,1.3) + (80m,1.45) + (100m,1.7414) + (105m,1.9778) + (106m,5) EVOL VOL VEE TABLE { V(VIMONINV) } = + (0,1.05) + (100m,1.68) + (105m,1.72) + (106m,5) **XISOURCEVLIMIT NET064 NET76 VCC VEE OutputCir_IscVlimit PARAMS: RIsc=1 IscVsVsupply_X1=3 **+ IscVsVsupply_Y1= {ABS(75e-3)} IscVsVsupply_X2=5 IscVsVsupply_Y2= {ABS(100e-3)} **+ **XISINKVLIMIT NET047 NET092 VCC VEE OutputCir_IscVlimit PARAMS: RIsc=1 IscVsVsupply_X1=3 **+ IscVsVsupply_Y1= {ABS(-75e-3)} IscVsVsupply_X2=5 IscVsVsupply_Y2= {ABS(-100e-3)} **+ *XISOURCEVLIMIT NET064 NET76 VCC VEE OutputCir_IscVlimit PARAMS: RIsc=1 IscVsVsupply_X1=3 *+ IscVsVsupply_Y1= {ABS(125.446e-3)} IscVsVsupply_X2=5 IscVsVsupply_Y2= {ABS(125.446e-3)} *+ *XISINKVLIMIT NET047 NET092 VCC VEE OutputCir_IscVlimit PARAMS: RIsc=1 IscVsVsupply_X1=3 *+ IscVsVsupply_Y1= {ABS(-133.879e-3)} IscVsVsupply_X2=5 IscVsVsupply_Y2= {ABS(-133.879e-3)} *+ XI14 NET070 NET15 DiodeIdeal XI15 NET068 VOL DiodeIdeal XI0 VCCMAIN VEEMAIN VIMON PD OutputCir_ILOAD **XI1 NET53 NET22 VIMON OutputCir_Rout PARAMS: Ro_Iout_0A=100 RIsc=1 Isc=100e-3 Islope_const=10e-3 **XI1 NET53 NET22 VIMON OutputCir_Rout PARAMS: Ro_Iout_0A=100 RIsc=1 Isc=129.6625e-3 Islope_const=10e-3 **XI1 NET53 NET22 VIMON OutputCir_Rout PARAMS: Ro_Iout_0A=12 RIsc=1 Isc=129.6625e-3 Islope_const=10e-3 *XI1 NET53 NET22 VIMON OutputCir_Rout PARAMS: Ro_Iout_0A=11.76 RIsc=1 Isc=129.6625e-3 Islope_const=10e-3 ROUT NET53 NET22 10.76 *XI6 NET22 NET0100 0 NET043 VCC VEE RECOVERYSIGNAL OutputCir_RecoveryAssist *XAHDLI43 NET055 NET054 RECOVERYSIGNAL VCC VEE HPA_OR2 *XAHDLI41 VOUT NET067 NET055 VCC VEE HPA_COMP_IDEAL *XAHDLI42 NET059 VOUT NET054 VCC VEE HPA_COMP_IDEAL HVIMONINV VIMONINV 0 VCURSINKDETECT 1 HVIMON VIMON 0 VCURSOURCEDETECT 1 **RP NET092 NET0146 1e-3 RVIMONINV VIMONINV 0 1e9 RVIMON VIMON 0 1e9 RISC NET092 NET15 1 *VRISC NET092 NET15 0 **ROUTMINOR NET0100 NET17 10 **ROUTMINOR NET0100 NET17 1 ROUTMINOR NET0100 NET17 14 *XI11 NET76 NET15 ANALOG_BUFFER XI2 NET22 VIN ANALOG_BUFFER VPROBE3 NET070 VOH 0 *VPROBE2 NET043 NET0100 0 *VTRIGGERVOL NET059 VOL 10e-3 *VTRIGGERVOH VOH NET067 10e-3 *V3 NET79 NET047 0 *V4 NET75 NET064 0 VPROBE4 NET068 NET15 0 VCURSOURCEDETECT NET15 NET34 0 VCURSINKDETECT VOUT NET34 0 VPROBE1 NET53 NET17 0 **LOUT NET17 NET092 500e-12 **LOUT NET17 NET092 1.3e-8 LOUT NET17 NET092 3.5e-10 **CBYP NET17 NET0017 50e-11 CBYP NET17 NET0017 6e-12 **RBYP NET0017 NET17092 60 ***RBYP NET0017 NET092 11 RBYP NET0017 NET092 12 **CP NET0146 0 1e-13 CP NET0146 0 5e-13 **RP NET092 NET0146 20 RP NET092 NET0146 28 **CP NET0146 0 1e-15 **COUT NET22 NET0100 1e-15 **COUT NET22 NET0100 1.8e-9 COUT NET22 NET0100 1e-8 .ends OUTPUTCIR .subckt RECOVERYCIRCUIT A B VCC VEE PARAMS: VRecL=-10e-3 VRecH=-10e-3 XI2 NET8 NET014 DiodeIdeal XI3 NET014 NET9 DiodeIdeal VBRIDGE NET014 A 0 VPROBE A B 0 VRECL NET9 VEE {VRecL} VRECH VCC NET8 {VRecH} .ends RECOVERYCIRCUIT .subckt VFA_HT5 VEE VCC VINM VINP VOUT PD XI67 VCC_INT VEE_INT NET21 VINP_INT ESDDIODES PARAMS: VESDL=-250e-3 VESDH=1.25 XI68 VCC_INT VEE_INT NET22 VINM_INT ESDDIODES PARAMS: VESDL=-250e-3 VESDH=1.25 **XI66 HIGHZ NET56 VCC_INT VEE_INT NET22 NET21 VINRANGE3 PARAMS: SignalGain=1 VIL=100e-3 VIH=100e-3 *XI66 HIGHZ NET56 VCC_INT VEE_INT NET22 NET21 VINRANGE3 PARAMS: SignalGain=1 VIL=-250e-3 VIH=1.25 **XI60 VINP_INT VINM_INT Ibias PARAMS: Choice=1 Ibias=-10e-6 Ioffset=150e-9 TA=25 **+ IbiasDrift=0 IoffsetDrift=0 Ibiasp=-9.925e-6 Ibiasm=-10.075e-6 **XI60 VINP_INT VINM_INT Ibias PARAMS: Choice=1 Ibias=29.6478e-15 Ioffset=-1.177882e-15 TA=25 **+ IbiasDrift=299.258e-15 IoffsetDrift=0.540206e-15 Ibiasp=29.058859e-15 Ibiasm=30.236741e-15 **XI60 VINP_INT VINM_INT Ibias PARAMS: Choice=1 Ibias=28.9414e-15 Ioffset=0.726059e-15 TA=25 **+ IbiasDrift=299.258e-15 IoffsetDrift=0.540206e-15 Ibiasp=29.3044295e-15 Ibiasm=28.5783705e-15 XI60 VINP_INT VINM_INT Ibias PARAMS: Choice=1 Ibias=-570.3222e-15 Ioffset=1.582118e-15 TA=25 + IbiasDrift=299.258e-15 IoffsetDrift=0.540206e-15 Ibiasp=29.3044295e-15 Ibiasm=28.5783705e-15 **XI21 NET12 NET22 NET12 CMRR PARAMS: CMRR_DC=-100 CMRR_f3dB=50e3 CMRR_f3dB_FudgeFactor=3.4 **XI21 NET12 NET22 NET12 CMRR PARAMS: CMRR_DC=-113.076 CMRR_f3dB=1238.346e3 CMRR_f3dB_FudgeFactor=3.4 **XI21 NET12 NET22 NET12 CMRR PARAMS: CMRR_DC=-125 CMRR_f3dB=1238.346e3 CMRR_f3dB_FudgeFactor=1 XI21 NET12 NET22 NET12 CMRR PARAMS: CMRR_DC=-140.076 CMRR_f3dB=1.238346e6 CMRR_f3dB_FudgeFactor=4 **XI19 VCC_INT VEE_INT NET2 NET12 PSRR PARAMS: PSRRP_DC=-100 PSRRP_f3dB=100e3 **+ PSRRN_DC=-90 PSRRN_f3dB=90e3 XI19 VCC_INT VEE_INT NET2 NET12 PSRR PARAMS: PSRRP_DC=-96.9149 PSRRP_f3dB=100e3 + PSRRN_DC=-79.5666 PSRRN_f3dB=90e3 **XI53 VINP VINM NET1 NET2 ZIN PARAMS: R5=100e-3 R4=100e-3 C3=50e-15 C2=50e-15 **+ C1=50e-15 R2=10e9 R1=10e9 R3=1e9 XI53 VINP VINM NET1 NET2 ZIN PARAMS: R5=100e-3 R4=100e-3 C3=200e-15 C2=620.054e-15 + C1=620.054e-15 R2=124.81e9 R1=124.81e9 R3=123.686e9 **XI58 HIGHZ NET32 0 DOMPOLE PARAMS: R2=1e-3 R1=2.653e6 C2=1e-15 C1=10e-12 **XI58 HIGHZ NET32 0 DOMPOLE PARAMS: R2=1e-3 R1=3.724e+05 C2=1e-15 C1=5.88e-13 ***XI58 HIGHZ NET32 0 DOMPOLE PARAMS: R2=1e-3 R1=3.995E+05 C2=1e-15 C1=5.88e-13 XI58 HIGHZ NET32 0 DOMPOLE PARAMS: R2=1e-3 R1=3.995E+05 C2=1e-15 C1=5.88e-13 **XI18 NET11 0 Inoise PARAMS: X=1e-3 Y=100e-15 Z=1e-15 **XI63 NET2 0 Inoise PARAMS: X=1e-3 Y=100e-15 Z=1e-15 XI18 NET11 0 Inoise PARAMS: X=0.1e-3 Y=432e-15 Z=4.32e-15 XI63 NET2 0 Inoise PARAMS: X=0.1e-3 Y=432e-15 Z=4.32e-15 **XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=2 **+ Gm=37.7e-3 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=1e-3 ITAILMAX_X2=5 ITAILMAX_Y2=1e-3 **+ ITAILMIN_X1=3 ITAILMIN_Y1=1e-3 ITAILMIN_X2=5 ITAILMIN_Y2=1e-3 **XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=2 **+ Gm=2.062e-02 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=10 ITAILMAX_X2=5 ITAILMAX_Y2=10 **+ ITAILMIN_X1=3 ITAILMIN_Y1=10 ITAILMIN_X2=5 ITAILMIN_Y2=10 **XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=2 **+ Gm=2.062e-02 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=53m ITAILMAX_X2=5 ITAILMAX_Y2=53m **+ ITAILMIN_X1=3 ITAILMIN_Y1=53m ITAILMIN_X2=5 ITAILMIN_Y2=53m **XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=11 **+ Gm=2.062e-02 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=53m ITAILMAX_X2=5 ITAILMAX_Y2=53m **+ ITAILMIN_X1=3 ITAILMIN_Y1=53m ITAILMIN_X2=5 ITAILMIN_Y2=53m **XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=1 **+ Gm=2.062e-02 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=1.08m ITAILMAX_X2=5 ITAILMAX_Y2=1.08m **+ ITAILMIN_X1=3 ITAILMIN_Y1=1.08m ITAILMIN_X2=5 ITAILMIN_Y2=1.08m **XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=1 **+ Gm=2.058E-02 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=1.08m ITAILMAX_X2=5 ITAILMAX_Y2=1.08m **+ ITAILMIN_X1=3 ITAILMIN_Y1=1.08m ITAILMIN_X2=5 ITAILMIN_Y2=1.08m XI52 VINP_INT VINM_INT NET32 NET31 VEE_INT VCC_INT POWER GmItail PARAMS: Choice=1 + Gm=2.058E-02 SBF=1 ITAILMAX_X1=3 ITAILMAX_Y1=1m ITAILMAX_X2=5 ITAILMAX_Y2=1m + ITAILMIN_X1=3 ITAILMIN_Y1=1m ITAILMIN_X2=5 ITAILMIN_Y2=1m XI85 0 0 NET61 NET71 PHASEDELAY PARAMS: R1=1 R2=1e9 C1=1e-15 C2=1e-15 Gain=1 L=1e-12 **XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=226.7e-12 Rp=1e9 Rs=1 **XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=1.275e-11 Rp=1e9 Rs=1 **XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=6.275e-12 Rp=1e9 Rs=1 **XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=2.209E-11 Rp=1e9 Rs=1 *JB_06MAR2017*XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=2.109E-11 Rp=1e9 Rs=1 ****XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=7.25E-11 Rp=1e9 Rs=1 **XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=1.100E-11 Rp=1e9 Rs=1 XI26 0 NET51 NET61 NONDOMPOLE PARAMS: L=1e-12 Gain=1 C=7.100E-11 Rp=1e9 Rs=1 **XI17 NET1 NET11 Vnoise PARAMS: X=1e-3 Y=100e-9 Z=5e-9 XI17 NET1 NET11 Vnoise PARAMS: X=0.1e-3 Y=246e-9 Z=2.46e-9 **XI59 NET21 NET11 Vinoffset PARAMS: TA=25 VOS=500e-6 DRIFT=10e-6 **XI59 NET21 NET11 Vinoffset PARAMS: TA=25 VOS=78.8929e-6 DRIFT=1.25929e-6 XI59 NET21 NET11 Vinoffset PARAMS: TA=25 VOS=76.3758e-6 DRIFT=1.25929e-6 XI30 POWER VCC_INT VCC VEE_INT VEE NET71 VOUT OUTPUTCIR **XI28 NET41 NET51 VCC_INT VEE_INT RECOVERYCIRCUIT PARAMS: VRecL=-10e-3 VRecH=-10e-3 XI28 NET41 NET51 VCC_INT VEE_INT RECOVERYCIRCUIT PARAMS: VRecL=-10m VRecH=-10m **XI40 VCC VEE POWER VEE_INT VCC_INT Iq PARAMS: IOFF=1e-9 ION_X1=0 ION_Y1=1e-3 **+ ION_X2=1.6 ION_Y2=1e-3 ION_X3=1.9 ION_Y3=1e-3 ION_X4=12 ION_Y4=1e-3 XI40 VCC VEE POWER VEE_INT VCC_INT Iq PARAMS: IOFF=66.5902e-6 ION_X1=0 ION_Y1=20.2177e-3 + ION_X2=1.6 ION_Y2=20.2177e-3 ION_X3=1.9 ION_Y3=20.2177e-3 ION_X4=12 ION_Y4=20.2177e-3 VPROBE2 HIGHZ NET41 VDOMPOLEBIAS NET32 0 0 VPROBE1 NET31 HIGHZ *R0 NET56 0 1e3 R14 VCC_INT PD 10e6 XAHDLINV3 PD PDINV VCC_INT VEE_INT HPA_INV_IDEAL XAHDLINV1 PDINV POWER VCC_INT VEE_INT HPA_INV_IDEAL XI13 VEE_INT VEE ANALOG_BUFFER XI12 VCC_INT VCC ANALOG_BUFFER .ends VFA_HT5 .SUBCKT HPA_OR2 1 2 3 VDD VSS E1 4 0 VALUE = { IF( ((V(1)< (V(VDD)+V(VSS))/2 ) & (V(2)< (V(VDD)+V(VSS))/2 )), V(VSS), V(VDD) ) } R1 4 3 1 C1 3 0 1e-12 .ENDS .SUBCKT HPA_INV_IDEAL 1 2 VDD VSS E1 2 0 VALUE = { IF( V(1)> (V(VDD)+V(VSS))/2, V(VSS), V(VDD) ) } .ENDS .SUBCKT HPA_COMP_IDEAL INP INN OUT VDD VSS E1 OUT 0 VALUE = { IF( (V(INP) > V(INN)), V(VDD), V(VSS) ) } .ENDS .SUBCKT AVG VIN1 VIN2 VOUT E1 VOUT 0 VALUE = { ( V(VIN1) + V(VIN2) ) / 2 } .ENDS .SUBCKT CMRR A B C PARAMS: + CMRR_DC = -100 + CMRR_f3dB = 50e3 + CMRR_f3dB_FudgeFactor = 3.4 .PARAM CMRR = {0-CMRR_DC} .PARAM FCMRR = {CMRR_f3dB * CMRR_f3dB_FudgeFactor} X1 A B C 0 CMRR_NEW PARAMS: CMRR = {CMRR} FCMRR = {FCMRR} .ENDS .SUBCKT DiodeIdeal NEG POS G1 POS NEG VALUE = { IF ( V(POS,NEG) <= 0 , 0, V(POS,NEG)*0.01G ) } R0 POS NEG 1000G .ENDS .SUBCKT DomPoleBias VIN1 VIN2 VOUT E1 VOUT 0 VALUE = { ( V(VIN1) + V(VIN2) ) / 2 * 1/2} R1 VOUT 0 1G .ENDS .SUBCKT GmItail Vinp Vinm Ioutp Ioutm VEE VCC PD PARAMS: + Choice = 2 + Gm = 3.77e-2 + SBF = 1 + ITAILMAX_X1 = { 3.0 } + ITAILMAX_Y1 = { 10m } + ITAILMAX_X2 = { 5.0 } + ITAILMAX_Y2 = { 10m } + ITAILMIN_X1 = { 3.0 } + ITAILMIN_Y1 = { 10m } + ITAILMIN_X2 = { 5.0 } + ITAILMIN_Y2 = { 10m } .PARAM Choice1 = { IF ( Choice == 1, 1, 0 ) } .PARAM Choice2 = { IF ( Choice == 2, 1, 0 ) } .PARAM Choice3 = { IF ( Choice == 3, 1, 0 ) } .PARAM Choice11 = { IF ( Choice == 11, 1, 0 ) } X1 PD PDINV VCC VEE LOGIC1 0 DLSINV VLOGIC1 LOGIC1 0 1 .PARAM ITAILMAX_SLOPE = + { ( ITAILMAX_Y2 - ITAILMAX_Y1 ) / ( ITAILMAX_X2 - ITAILMAX_X1 ) } .PARAM ITAILMAX_INTCP = + { ITAILMAX_Y1 - ITAILMAX_SLOPE * ITAILMAX_X1 } EITAILMAX ITAILMAX 0 VALUE = + { ITAILMAX_SLOPE * V(VCC,VEE) + ITAILMAX_INTCP } .PARAM ITAILMIN_SLOPE = + { ( ITAILMIN_Y2 - ITAILMIN_Y1 ) / ( ITAILMIN_X2 - ITAILMIN_X1 ) } .PARAM ITAILMIN_INTCP = + { ITAILMIN_Y1 - ITAILMIN_SLOPE * ITAILMIN_X1 } EITAILMIN ITAILMIN 0 VALUE = + { ITAILMIN_SLOPE * V(VCC,VEE) + ITAILMIN_INTCP } G1 IOUTP IOUTM VALUE = { ( 1-V(PDINV) ) * ( + Choice1 * ( LIMIT ( Gm * V(VINP,VINM) , -V(ITAILMIN), V(ITAILMAX) ) ) + + Choice2 * ( Gm * (V(ITAILMAX)/Gm) * TANH( V(VINP,VINM) / (V(ITAILMAX)/Gm) ) ) + + Choice3 * ( Gm * V(VINP,VINM) / ( 1 + Gm/V(ITAILMAX) * ABS( V(VINP,VINM) ) ) ) + + Choice11 * ( LIMIT ( ( Gm * EXP ( LIMIT ( SBF * ABS(V(VINP,VINM)) , -LOG(1E100), LOG(1E100) ) ) ) + * V(VINP,VINM) , -V(ITAILMIN), V(ITAILMAX) ) ) + + 0 ) } .ENDS .SUBCKT Ibias VINP VINM PARAMS: + Choice = 1 + Ibias = -10u + Ioffset = 150n + TA = 25 + IbiasDrift = 0 + IoffsetDrift = 0 + Ibiasp = -9.925u + Ibiasm = -10.075u .PARAM Choice1 = { IF ( Choice == 1, 1, 0 ) } .PARAM Choice2 = { IF ( Choice == 2, 1, 0 ) } .PARAM Ib = { Choice1 * Ibias + Choice2 * (Ibiasp + Ibiasm)/2 } .PARAM Io = { Choice1 * Ioffset + Choice2 * ABS(Ibiasp - Ibiasm) } EIb Ib 0 VALUE = { IbiasDrift * TEMP + ( Ib - IbiasDrift * TA ) } EIo Io 0 VALUE = { IoffsetDrift * TEMP + ( Io - IoffsetDrift * TA ) } GIbp VINP 0 VALUE = { V(Ib) + V(Io)/2 } GIbm VINM 0 VALUE = { V(Ib) - V(Io)/2 } .ENDS .SUBCKT Inoise A B PARAMS: + X = { 1m } + Y = { 100f } + Z = { 1f } X1 A B FEMT PARAMS: NLFF = { Y/1f } FLWF = { X } NVRF = { Z/1f } .ENDS .subckt Iq VCCmain VEEmain PD VEE VCC PARAMS: + IOFF = { 1n } + ION_X1 = { 0.0 } + ION_Y1 = { 1m } + ION_X2 = { 1.6 } + ION_Y2 = { 1m } + ION_X3 = { 1.9 } + ION_Y3 = { 1m } + ION_X4 = { 12.0 } + ION_Y4 = { 1m } EION_SEG1 ION_SEG1 0 VALUE = { IF ( V(VCC,VEE) <= ION_X2, 1, 0 ) } EION_SEG2 ION_SEG2 0 VALUE = { IF ( V(VCC,VEE) > ION_X2 & V(VCC,VEE) <= ION_X3, 1, 0 ) } EION_SEG3 ION_SEG3 0 VALUE = { IF ( V(VCC,VEE) > ION_X3 , 1, 0 ) } .PARAM ION_SEG1_SLOPE = { ( ION_Y2 - ION_Y1 ) / ( ION_X2 - ION_X1 ) } .PARAM ION_SEG1_INTCP = { ION_Y1 - ION_SEG1_SLOPE * ION_X1 } .PARAM ION_SEG2_SLOPE = { ( ION_Y3 - ION_Y2 ) / ( ION_X3 - ION_X2 ) } .PARAM ION_SEG2_INTCP = { ION_Y2 - ION_SEG2_SLOPE * ION_X2 } .PARAM ION_SEG3_SLOPE = { ( ION_Y4 - ION_Y3 ) / ( ION_X4 - ION_X3 ) } .PARAM ION_SEG3_INTCP = { ION_Y3 - ION_SEG3_SLOPE * ION_X3 } EION ION 0 VALUE = { V(ION_SEG1) * ( ION_SEG1_SLOPE * V(VCC,VEE) + ION_SEG1_INTCP ) + + V(ION_SEG2) * ( ION_SEG2_SLOPE * V(VCC,VEE) + ION_SEG2_INTCP ) + + V(ION_SEG3) * ( ION_SEG3_SLOPE * V(VCC,VEE) + ION_SEG3_INTCP ) } X1 PD PDINV VCC VEE LOGIC1 0 DLSINV VLOGIC1 LOGIC1 0 1 G1 VCCMAIN VEEMAIN VALUE = { V(ION) * ( 1-V(PDINV) ) + IOFF * V(PDINV) } .ends .SUBCKT OutputCir_ILOAD VDD VSS VIMON PD X1 PD PDINV VDD VSS LOGIC1 0 DLSINV VLOGIC1 LOGIC1 0 1 G1 VDD 0 VALUE = {IF(V(VIMON) >= 0, V(VIMON)*( 1-V(PDINV) ), 0)} G2 VSS 0 VALUE = {IF(V(VIMON) < 0, V(VIMON)*( 1-V(PDINV) ), 0)} .ENDS .SUBCKT OutputCir_IscDiodeIdeal NEG POS PARAMS: + IS = 1E-14 + N = 50m G1 POS NEG_INT VALUE = { IF ( V(POS,NEG_INT) <= 0 , IS, + IS * ( EXP ( V(POS,NEG_INT)/25m * 1/N ) - 0 ) ) } V1 NEG_INT NEG {-N*0.8} .ENDS .SUBCKT OutputCir_IscVlimit A B VCC VEE PARAMS: +RIsc = { 1 } +IscVsVsupply_X1 = { 3.0 } +IscVsVsupply_Y1 = { 75m } +IscVsVsupply_X2 = { 5.0 } +IscVsVsupply_Y2 = { 100m } .PARAM IscVsVsupply_SLOPE = + { ( IscVsVsupply_Y2 - IscVsVsupply_Y1 ) / ( IscVsVsupply_X2 - IscVsVsupply_X1 ) } .PARAM IscVsVsupply_INTCP = + { IscVsVsupply_Y1 - IscVsVsupply_SLOPE * IscVsVsupply_X1 } EIscVsVsupply IscVsVsupply 0 VALUE = + { IscVsVsupply_SLOPE * V(VCC,VEE) + IscVsVsupply_INTCP } E1 A B VALUE = { V(IscVsVsupply) * RIsc } .ENDS .SUBCKT OutputCir_RecoveryAssist VINP VINM IOUTP IOUTM VCC VEE RecoverySignal X1 RecoverySignal RS VCC VEE LOGIC1 0 DLS VLOGIC1 LOGIC1 0 1 G1 IOUTP IOUTM VALUE = { LIMIT ( 1m * V(VINP,VINM) * V(RS) , -100m, 100m ) } .ENDS .SUBCKT OutputCir_Rout B A VIMON PARAMS: + Ro_Iout_0A = 100 + RIsc = 1 + Isc = 100m + Islope_const = 1/100 .PARAM Islope = { Islope_const * Isc } G1 A B VALUE = { V(A,B) * 1 / ( (Ro_Iout_0A - RIsc) * Islope / ( Islope + ABS(V(VIMON)) ) ) } .ENDS .SUBCKT OutputCir_VOHVOLDiodeIdeal NEG POS G1 POS NEG VALUE = { IF ( V(POS,NEG) <= 0 , 0, V(POS,NEG)*0.01G ) } R0 POS NEG 1000G .ENDS .SUBCKT OutputCir_VOHVOL A B C PARAMS: + VSUPPLYREF = {2.5} + VOUTvsIOUT_X1 = { ABS(0) } + VOUTvsIOUT_Y1 = { 2.4 } + VOUTvsIOUT_X2 = { ABS(100m) } + VOUTvsIOUT_Y2 = { 2.1 } .PARAM VDROPvsIOUT_X1 = { VOUTvsIOUT_X1 } .PARAM VDROPvsIOUT_Y1 = { ABS(VSUPPLYREF-VOUTvsIOUT_Y1) } .PARAM VDROPvsIOUT_X2 = { VOUTvsIOUT_X2 } .PARAM VDROPvsIOUT_Y2 = { ABS(VSUPPLYREF-VOUTvsIOUT_Y2) } .PARAM VDROPvsIOUT_SLOPE = + { ( VDROPvsIOUT_Y2 - VDROPvsIOUT_Y1 ) / ( VDROPvsIOUT_X2 - VDROPvsIOUT_X1 ) } .PARAM VDROPvsIOUT_INTCP = + { VDROPvsIOUT_Y1 - VDROPvsIOUT_SLOPE * VDROPvsIOUT_X1 } EVDROPvsIOUT VDROPvsIOUT 0 VALUE = + { VDROPvsIOUT_SLOPE * V(C) + VDROPvsIOUT_INTCP } E1 A B VALUE = { V(VDROPvsIOUT) } .ENDS .SUBCKT PSRR VDD VSS A B PARAMS: + PSRRP_DC = -100 + PSRRP_f3dB = 100k + PSRRN_DC = -90 + PSRRN_f3dB = 90k .PARAM PSRRP = {0-PSRRP_DC} .PARAM PSRRN = {0-PSRRN_DC} .PARAM FPSRRP = {PSRRP_f3dB} .PARAM FPSRRN = {PSRRN_f3dB} X1 VDD VSS A B 0 PSRR_DUAL_NEW PARAMS: + PSRRP = {PSRRP} FPSRRP = {FPSRRP} + PSRRN = {PSRRN} FPSRRN = {FPSRRN} .ENDS .SUBCKT RecoveryCircuit_DiodeIdeal NEG POS G1 POS NEG VALUE = { IF ( V(POS,NEG) <= 0 , 0, V(POS,NEG)*0.01G ) } R0 POS NEG 1000G .ENDS .SUBCKT Vinoffset POS NEG PARAMS: + TA = 25 + VOS = 500u + DRIFT = 10u E1 POS NEG VALUE = { DRIFT * TEMP + ( VOS - DRIFT * TA ) } .ENDS .SUBCKT Vinrange_DiodeIdeal NEG POS G1 POS NEG VALUE = { IF ( V(POS,NEG) <= 0 , 0, V(POS,NEG)*100k ) } R0 POS NEG 1000G .ENDS .SUBCKT Vnoise A B PARAMS: + X = { 1m } + Y = { 100n } + Z = { 5n } X1 A B VNSE PARAMS: NLF = { Y/1n } FLW = { X } NVR = { Z/1n } .ENDS .SUBCKT VNSE 1 2 PARAMS: NLF = 10 FLW = 4 NVR = 4.6 .PARAM GLF={PWR(FLW,0.25)*NLF/1164} .PARAM RNV={1.184*PWR(NVR,2)} .MODEL DVN D KF={PWR(FLW,0.5)/1E11} IS=1.0E-16 I1 0 7 10E-3 I2 0 8 10E-3 D1 7 0 DVN D2 8 0 DVN E1 3 6 7 8 {GLF} R1 3 0 1E9 R2 3 0 1E9 R3 3 6 1E9 E2 6 4 5 0 10 R4 5 0 {RNV} R5 5 0 {RNV} R6 3 4 1E9 R7 4 0 1E9 E3 1 2 3 4 1 C1 1 0 1E-15 C2 2 0 1E-15 C3 1 2 1E-15 .ENDS .SUBCKT FEMT 1 2 PARAMS: NLFF = 0.1 FLWF = 0.001 NVRF = 0.1 .PARAM GLFF={PWR(FLWF,0.25)*NLFF/1164} .PARAM RNVF={1.184*PWR(NVRF,2)} .MODEL DVNF D KF={PWR(FLWF,0.5)/1E11} IS=1.0E-16 I1 0 7 10E-3 I2 0 8 10E-3 D1 7 0 DVNF D2 8 0 DVNF E1 3 6 7 8 {GLFF} R1 3 0 1E9 R2 3 0 1E9 R3 3 6 1E9 E2 6 4 5 0 10 R4 5 0 {RNVF} R5 5 0 {RNVF} R6 3 4 1E9 R7 4 0 1E9 G1 1 2 3 4 1E-6 C1 1 0 1E-15 C2 2 0 1E-15 C3 1 2 1E-15 .ENDS .SUBCKT PSRR_SINGLE VDD VSS VI VO GNDF PARAMS: PSRR = 130 FPSRR = 1.6 .PARAM PI = 3.141592 .PARAM RPSRR = 1 .PARAM GPSRR = {PWR(10,-PSRR/20)/RPSRR} .PARAM LPSRR = {RPSRR/(2*PI*FPSRR)} G1 GNDF 1 VDD VSS {GPSRR} R1 1 2 {RPSRR} L1 2 GNDF {LPSRR} E1 VO VI 1 GNDF 1 C2 VDD VSS 10P .ENDS .SUBCKT PSRR_SINGLE_NEW VDD VSS VI VO GNDF PARAMS: PSRR = 130 FPSRR = 1.6 .PARAM PI = 3.141592 .PARAM RPSRR = 1 .PARAM GPSRR = {PWR(10,-PSRR/20)/RPSRR} .PARAM LPSRR = {RPSRR/(2*PI*FPSRR)} G1 GNDF 1 VDD VSS {GPSRR} R1 1 2 {RPSRR} L1 2 GNDF {LPSRR} EA 101 GNDF 1 GNDF 1 GRA 101 102 VALUE = { V(101,102)/1e6 } CA 102 GNDF 1e3 EB 1 1a VALUE = {V(102,GNDF)} E1 VO VI 1a GNDF 1 C2 VDD VSS 10P .ENDS .SUBCKT PSRR_DUAL VDD VSS VI VO GNDF + PARAMS: PSRRP = 130 FPSRRP = 1.6 + PSRRN = 130 FPSRRN = 1.6 .PARAM PI = 3.141592 .PARAM RPSRRP = 1 .PARAM GPSRRP = {PWR(10,-PSRRP/20)/RPSRRP} .PARAM LPSRRP = {RPSRRP/(2*PI*FPSRRP)} .PARAM RPSRRN = 1 .PARAM GPSRRN = {PWR(10,-PSRRN/20)/RPSRRN} .PARAM LPSRRN = {RPSRRN/(2*PI*FPSRRN)} G1 GNDF 1 VDD GNDF {GPSRRP} R1 1 2 {RPSRRP} L1 2 GNDF {LPSRRP} G2 GNDF 3 VSS GNDF {GPSRRN} R2 3 4 {RPSRRN} L2 4 GNDF {LPSRRN} E1 VO VI VALUE = {V(1,GNDF) + V(3,GNDF)} C3 VDD VSS 10P .ENDS .SUBCKT PSRR_DUAL_NEW VDD VSS VI VO GNDF + PARAMS: PSRRP = 130 FPSRRP = 1.6 + PSRRN = 130 FPSRRN = 1.6 .PARAM PI = 3.141592 .PARAM RPSRRP = 1 .PARAM GPSRRP = {PWR(10,-PSRRP/20)/RPSRRP} .PARAM LPSRRP = {RPSRRP/(2*PI*FPSRRP)} .PARAM RPSRRN = 1 .PARAM GPSRRN = {PWR(10,-PSRRN/20)/RPSRRN} .PARAM LPSRRN = {RPSRRN/(2*PI*FPSRRN)} G1 GNDF 1 VDD GNDF {GPSRRP} R1 1 2 {RPSRRP} L1 2 GNDF {LPSRRP} EA 101 GNDF 1 GNDF 1 GRA 101 102 VALUE = { V(101,102)/1e6 } CA 102 GNDF 1e3 EB 1 1a VALUE = {V(102,GNDF)} G2 GNDF 3 VSS GNDF {GPSRRN} R2 3 4 {RPSRRN} L2 4 GNDF {LPSRRN} EC 301 GNDF 3 GNDF 1 GRC 301 302 VALUE = { V(301,302)/1e6 } CC 302 GNDF 1e3 ED 3 3a VALUE = {V(302,GNDF)} E1 VO VI VALUE = {V(1a,GNDF) + V(3a,GNDF)} C3 VDD VSS 10P .ENDS .SUBCKT CMRR_OLD VI VO VX GNDF PARAMS: CMRR = 130 FCMRR = 1.6K .PARAM PI = 3.141592 .PARAM RCMRR = 1 .PARAM GCMRR = {PWR(10,-CMRR/20)/RCMRR} .PARAM LCMRR = {RCMRR/(2*PI*FCMRR)} G1 GNDF 1 VX GNDF {GCMRR} R1 1 2 {RCMRR} L1 2 GNDF {LCMRR} E1 VI VO 1 GNDF 1 .ENDS .SUBCKT CMRR_NEW VI VO VX GNDF PARAMS: CMRR = 130 FCMRR = 1.6K .PARAM PI = 3.141592 .PARAM RCMRR = 1 .PARAM GCMRR = {PWR(10,-CMRR/20)/RCMRR} .PARAM LCMRR = {RCMRR/(2*PI*FCMRR)} G1 GNDF 1 VX GNDF {GCMRR} R1 1 2 {RCMRR} L1 2 GNDF {LCMRR} EA 101 GNDF 1 GNDF 1 GRA 101 102 VALUE = {V(101,102)/1e6} CA 102 GNDF 1e3 EB 1 1a VALUE = {V(102,GNDF)} E1 VI VO 1a GNDF 1 .ENDS .SUBCKT DLS 1 2 VDD_OLD VSS_OLD VDD_NEW VSS_NEW E1 3 0 VALUE = { IF( V(1) < (V(VDD_OLD)+V(VSS_OLD))/2, V(VSS_NEW), V(VDD_NEW) ) } R1 3 2 1 C1 2 0 1p .ENDS .SUBCKT DLSINV 1 2 VDD_OLD VSS_OLD VDD_NEW VSS_NEW E1 3 0 VALUE = { IF( V(1) > (V(VDD_OLD)+V(VSS_OLD))/2, V(VSS_NEW), V(VDD_NEW) ) } R1 3 2 1 C1 2 0 1p .ENDS .SUBCKT SWITCH_IDEAL A B C PARAMS: + Ron = 100m + Roff = 0.1G G1 A B VALUE = { V(A,B) * 1 / ( Roff/2 * TANH( 0 - ( 20*V(C) - 5 ) ) + Roff/2 + Ron ) } R1 A 0 1000G R2 B 0 1000G .ENDS .MODEL VINRANGE_DIDEAL D N=1m .MODEL RECOVERYCIRCUIT_DIDEAL D N=1m .MODEL OUTPUTCIR_ISC_DIDEAL D N=0.1m .MODEL OUTPUTCIR_VOHVOL_DIDEAL D N=1m .MODEL DBASIC D