****************************************************************************
*
* WARNING : please consider following remarks before usage
*
* 1) All models are a tradeoff between accuracy and complexity (ie. simulation
*    time).
*
* 2) Macromodels are not a substitute to breadboarding, they rather confirm the
*    validity of a design approach and help to select surrounding component values.
*
* 3) A macromodel emulates the NOMINAL performance of a TYPICAL device within
*    SPECIFIED OPERATING CONDITIONS (ie. temperature, supply voltage, etc.).
*    Thus the macromodel is often not as exhaustive as the datasheet, its goal
*    is to illustrate the main parameters of the product.
*
* 4) Data issued from macromodels used outside of its specified conditions
*    (Vcc, Temperature, etc) or even worse: outside of the device operating
*    conditions (Vcc, Vicm, etc) are not reliable in any way.
*
****************************************************************************
****
***  TS187x  Spice macromodel subckt 
***  December 2008
****                      
************ CONNECTIONS: 
****             INVERTING INPUT
****              |  NON-INVERTING INPUT
****              |   |  OUTPUT 
****              |   |   |  POSITIVE POWER SUPPLY
****              |   |   |   |  NEGATIVE POWER SUPPLY 
****              |   |   |   |   |     
****              |   |   |   |   |    
.SUBCKT TS187X   VM  VP  VS  VCCP VCCN
    M_NMOS2 VO_DIFF_MINUS VM VEE_N VCCN_ENHANCED MOS_N L={L} W={W}
    M_NMOS1 VO_DIFF_PLUS NET0262 VEE_N VCCN_ENHANCED MOS_N L={L} W={W}
    V_OUTVLIM_LOW NET0204 NET0196 DC {Vd_compensazione}
    V_OUTVLIM_HIGH NET0234 NET0211 DC {Vd_compensazione}
    VREADIO NET0191 VS DC 0
    VVLIM_LOW_VB NET192 NET193 DC {Vd_compensazione}
    VOS NET0262 VP DC 0
    VPROT_IN_P_VCCP NET196 NET229 DC {V_DPROT}
    V_ENHANCE_VCCN VCCN_ENHANCED VCCN DC {VCCN_enhance}
    VVLIM_HIGH_VB NET217 NET203 DC {Vd_compensazione}
    V_ENHANCE_VCCP VCCP_ENHANCED VCCP DC {VCCP_enhance}
    VPROT_IN_M_VCCN NET208 NET360 DC {V_DPROT}
    VPROT_IN_P_VCCN NET212 NET213 DC {V_DPROT}
    VPROT_IN_M_VCCP NET348 NET219 DC {V_DPROT}
    D_OUTVLIM_HIGH NET0279 NET0234 DIODE_NOVd
    D_OUTVLIM_LOW NET0196 NET0238 DIODE_NOVd
    DVLIM_HIGH_VB VB NET217 DIODE_NOVd
    DPROT_IN_M_VCCP VM NET219 DIODE_VLIM
    DVLIM_LOW_VB NET193 VB DIODE_NOVd
    DPROT_IN_M_VCCN NET208 VM DIODE_VLIM
    DILIM_SINK VB_3_SINK VB_3 DIODE_ILIM
    DPROT_IN_P_VCCP NET0262 NET229 DIODE_VLIM
    DILIM_SOURCE VB_3 VB_3_SOURCE DIODE_ILIM
    DPROT_IN_P_VCCN NET212 NET0262 DIODE_VLIM
    C_RO2_1 VB_2 VREF 140p
    CIN_DIFF VM VP {CIN_DIFF}
    CIN_CM_VM VM VREF {CIN_CM_VM}
    CIN_CM_VP VP VREF {CIN_CM_VP}
    CDIFF_PARASITIC VO_DIFF_PLUS VO_DIFF_MINUS 12p
    CCOMP VB VB_2 {Ccomp}
    E_VDEP_SINK_1 VAL_VDEP_SINK 0 VALUE={IF( V(Vccp,Vccn)<=3.0 ,  (
+-212 -62.5*V(Vccp,Vccn) )  -5000*I(VreadIo)  , ( -399.5  ) 
+-5000*I(VreadIo) )}
    E_RO1 VB_3 NET0191 VALUE={IF(I(VreadIo)>0,
+V(Ro1_Voh)*I(VreadIo),V(Ro1_Vol)*I(VreadIo))}

*Eldo:
*    E_VOHNORL NET0279 VB_3 PWL(1) VCCP VCCN ( 1.8 , 24m ) ( 3.0 , 26m ) (
*+5.0 , 37m )
*    E_RO1_VOH RO1_VOH 0 PWL(1) VCCP VCCN ( 1.8 , 20 ) ( 3.0 , 18 ) ( 5.0 ,
*+12 )
*    E_VOLNORL VB_3 NET0238 PWL(1) VCCP VCCN ( 1.8 , 24m ) ( 3.0 , 32m ) (
*+5.0 , 42m )
*    E_RO1_VOL RO1_VOL 0 PWL(1) VCCP VCCN ( 1.8 , 15 ) ( 3.0 , 11 ) ( 5.0 ,
*+7 )
*PSpice:
    E_VOHNORL NET0279 VB_3 VALUE={TABLE( V(VCCP,VCCN) , 1.8 , 24m , 3.0 , 26m ,
+5.0 , 37m )}
    E_RO1_VOH RO1_VOH 0 VALUE={TABLE( V(VCCP,VCCN) , 1.8 , 20 , 3.0 , 18 , 5.0 ,
+12 )}
    E_VOLNORL VB_3 NET0238 VALUE={TABLE( V(VCCP,VCCN) , 1.8 , 24m , 3.0 , 32m ,
+5.0 , 42m )}
    E_RO1_VOL RO1_VOL 0 VALUE={TABLE( V(VCCP,VCCN) , 1.8 , 15 , 3.0 , 11 , 5.0 ,
+7 )}

    E50 NET0211 0 VCCP 0 1.0
    E64 IO_VAL 0 VALUE={I(VreadIo)}
    E_ICCSAT_HIGH ICC_OUT_HIGH 0 POLY(1) VCCP VCCN -8.65625E-5
+2.533333333333334E-4 -2.7604166666666666E-5
    E51 NET0204 0 VCCN 0 1.0
    E_ICCSAT_LOW ICC_OUT_LOW 0 POLY(1) VCCP VCCN 0
    EILIM_SINK VB_3_SINK VDEP_SINK VB_3 0 1.0
    EMEAS_VB_VREF VB_VREF 0 VB VREF 1.0
    EMEAS_VOUT_DIFF VOUT_DIFF 0 VO_DIFF_PLUS VO_DIFF_MINUS 1.0
    E_VDEP_SOURCE_2 VAL_VDEP_SOURCE_FILTERED 0 VALUE={
+IF(V(val_vdep_source)>=0, 0, V(val_vdep_source)) }
    E_VDEP_SOURCE_1 VAL_VDEP_SOURCE 0 VALUE={IF( V(Vccp,Vccn)<=3.0 ,  (
++212 +62.5*V(Vccp,Vccn) )  -5000*I(VreadIo)  , ( +399.5  ) 
+-5000*I(VreadIo) )}
    E_VDEP_SOURCE_3 VDEP_SOURCE 0 VALUE={IF( abs(I(VreadIo))<1m , 0 ,
+V(val_vdep_source_filtered))}
    EVLIM_HIGH_VB NET203 0 VCCP 0 1.0
    E_VDEP_SINK_2 VAL_VDEP_SINK_FILTERED 0 VALUE={
+IF(V(val_vdep_sink)<=0 , 0 , V(val_vdep_sink)) }
    EVLIM_LOW_VB NET192 0 VCCN 0 1.0
    E2_REF NET362 0 VCCN 0 1.0
    E_VREF VREF 0 NET356 0 1.0
    G_ICC VCCP VCCN POLY(1) VCCP VCCN 2.93875E-4 6.666666666666659E-5
+-5.208333333333321E-6
    E_VDEP_SINK_3 VDEP_SINK 0 VALUE={IF( abs(I(VreadIo))<1m , 0 ,
+V(val_vdep_sink_filtered))}
    E1_REF NET326 0 VCCP 0 1.0
    EILIM_SOURCE VB_3_SOURCE VDEP_SOURCE VB_3 0 1.0
    E_SR_VCC_MODULATION VOUT_DIFF__SR_VCC 0 VALUE={V(Vout_diff)*( 0.796875
++ 0.06666666666666655*V(Vccp,Vccn) -0.005208333333333318*PWR(V(Vccp,Vccn),2)
+)}
    RIN_CM_VM VREF VM {RIN_CM_VM}
    R1 VB VREF {R1}
    RIN_CM_VP VREF VP {RIN_CM_VP}
    R_ICCSAT_LOW ICC_OUT_LOW 0 1K
    RIN_DIFF VP VM {RIN_DIFF}
    RO2_2 VB_3 VB_2 {Ro2_2}
    RPROT_IN_P_VCCP NET196 VCCP {RPROT_VCCP}
    RPROT_IN_M_VCCP VCCP NET348 {RPROT_VCCP}
    RO2_1 VB_2 VREF {Ro2_1}
    RD1 VCCP_ENHANCED VO_DIFF_PLUS {RD}
    RD2 VCCP_ENHANCED VO_DIFF_MINUS {RD}
    R1_REF NET326 NET356 1Meg
    R_ICCSAT_HIGH ICC_OUT_HIGH 0 1K
    RPROT_IN_M_VCCN VCCN NET360 {RPROT_VCCN}
    R2_REF NET356 NET362 1Meg
    RPROT_IN_P_VCCN NET213 VCCN {RPROT_VCCN}
    
*Eldo:    
*    G_IIB_VP VREF VP TABLE {V(Vccp,Vccn)} = (+1.8 40n) (+3.0 40n) (+5.0
*+70n)
*    G_IIB_VM VREF VM TABLE {V(Vccp,Vccn)} = (+1.8 40n) (+3.0 40n) (+5.0
*+70n)
*PSpice:
    G_IIB_VP VREF VP VALUE={TABLE(V(Vccp,Vccn), +1.8 , 40n , +3.0 , 40n , +5.0 ,
+70n)}
    G_IIB_VM VREF VM VALUE={TABLE(V(Vccp,Vccn), +1.8 , 40n , +3.0 , 40n , +5.0 ,
+70n)}
    
    G_ICCSAT_OUTLOW VCCP VCCN VALUE={IF(I(V_OUTVLIM_LOW)>1u ,
+V(Icc_out_low) , 0)}

*Eldo:
*    G_I_VB VB_2 VREF TABLE {V(VB,Vref)} = (-2.7 {-2.7*GB*5}) (-2.0
*+{-2.0*GB*4}) (-1.5 {-1.5*GB*3}) (-0.85 {-0.85*GB*2}) (-0.8 {-0.8*GB*1.0})
*+(-0.15 {-0.15*GB*1}) (-0.050 {-0.050*GB*1}) (-0.015 {-0.015*GB*1})
*+(-0.0001 {-0.0001*GB*1}) (0 0) (+0.0001 {0.0001*GB*1}) (+0.015
*+{+0.015*GB*1}) (+0.050 {+0.050*GB*1}) (+0.15 {+0.15*GB*1}) (+0.8
*+{0.8*GB*1.0}) (+0.85 {0.85*GB*2})  (+1.5 {1.5*GB*3}) (+2.0 {2.0*GB*4})
*+(+2.7 {2.7*GB*5})  
*PSpice:
    G_I_VB VB_2 VREF VALUE={ TABLE( V(VB_Vref) , -2.7 , -2.7*GB*5 , -2.0 ,
+ -2.0*GB*4 , -1.5 , -1.5*GB*3 , -0.85 , -0.85*GB*2 , -0.8 , -0.8*GB*1.0 ,
+ -0.15 , -0.15*GB*1 , -0.050 , -0.050*GB*1 , -0.015 , -0.015*GB*1 ,
+ -0.0001 , -0.0001*GB*1 , 0 , 0 , +0.0001 , +0.0001*GB*1 , +0.015 ,
+ +0.015*GB*1 , +0.050 , +0.050*GB*1 , +0.15 , +0.15*GB*1 , +0.8 ,
+ +0.8*GB*1.0 , +0.85 , +0.85*GB*2 , +1.5 , +1.5*GB*3 , +2.0 , +2.0*GB*4 ,
+ +2.7 ,+2.7*GB*5) } 

    G_IOUT_SOURCED VCCP 0 VALUE={IF(I(VreadIo)>0, I(VreadIo),0)}
    GM1 VREF VB VOUT_DIFF__SR_VCC 0 {1/RD}
    IEE VEE_N VCCN_ENHANCED {IEE}
    G_ICCSAT_OUTHIGH VCCP VCCN VALUE={IF(I(V_OUTVLIM_HIGH)>1u ,
+V(Icc_out_high) , 0)}
    G_IOUT_SINKED VCCN 0 VALUE={IF(I(VreadIo)>0, 0, I(VreadIo))}
    G_I_IO VB_2 VREF VALUE={IF(abs(V(Io_val))<50m  , V(VB_Vref)*GB*(
+abs(V(Io_val))/3m ) , V(VB_Vref)*GB*( 50m/3m ) )}
.ENDS
*** End of subcircuit definition.

*******************************************************************************
*
* MODELS/SUBCKTS and PARAMS used by TS187x subckt:
*
.PARAM RINCM=6.4777e+7
.PARAM CINCM=1.4646e-11
.PARAM RIN_CM_VM={2*RINCM}
.PARAM RIN_CM_VP={2*RINCM}
.PARAM CIN_CM_VM={CINCM/2}
.PARAM CIN_CM_VP={CINCM/2}
.PARAM RINDIFF=2.3412e+5
.PARAM CINDIFF=9.2768e-12
.PARAM RIN_DIFF={(2*RINCM*RINDIFF)/(2*RINCM - RINDIFF)}
.PARAM CIN_DIFF={CINDIFF - CINCM/2}
.PARAM RD=1k
.PARAM VCCP_enhance=150m
.PARAM VCCN_enhance=-1100m 
.PARAM A0 = 6.8366e+5
.PARAM Ro = 2.5282e+4
.PARAM Ccomp=4.85p 
.PARAM IEE=3u
.PARAM W=2.1u
.PARAM L=1u
.PARAM gm_mos=5.617737386835048e-05
.PARAM GB=6m 
.PARAM Ro1=15
.PARAM Ro2_2=1e-3 
.PARAM Ro2_1={Ro - Ro2_2 - Ro1}
.PARAM R1={A0/(gm_mos*GB*Ro2_1)}
.PARAM V_DPROT=150m
.PARAM RPROT_VCCP=100
.PARAM RPROT_VCCN=15k
.PARAM Vd_compensazione=-788.4u

*Eldo:
*.MODEL MOS_N  NMOS LEVEL=1 MODTYPE=ELDO VTO=+0.65  KP=500E-6 
*.MODEL DIODE_NOVd D LEVEL=1 MODTYPE=ELDO IS=10E-15 N=0.001
*.MODEL DIODE_VLIM D LEVEL=1 MODTYPE=ELDO IS=0.8E-15   
*.MODEL DIODE_ILIM D LEVEL=1 MODTYPE=ELDO IS=0.8E-15  
*.MODEL DX D LEVEL=1 MODTYPE=ELDO IS=1E-14 
*PSpice:
.MODEL MOS_N  NMOS LEVEL=1  VTO=+0.65  KP=500E-6 
.MODEL DIODE_NOVd D LEVEL=1  IS=10E-15 N=0.001
.MODEL DIODE_VLIM D LEVEL=1  IS=0.8E-15   
.MODEL DIODE_ILIM D LEVEL=1  IS=0.8E-15  
.MODEL DX D LEVEL=1  IS=1E-14 
*******************************************************************************
