ó
    “Mgi€,  ã                   ó  • S SK 7  / SQrSSSS 0SS0SS0SS	0S
SS.S
SS.S
SS.S
SS.S
SS.S
SS.S.	SS0SSSSSSSSSS.	S.0r/ SQ/ SQS .rSS!S"/0 S#S#S$.S%S&/S'S(.SS!S"/0 S#S#S$./ S)S(.SS!S"/0 S#S#S$.S%/S*S(.SS!S+/0 S,S-S.S/S/S0.S%/S1S(.SS!S+/0 S,S-S/S.S/S0.S%/S1S(.SS!S+/0 S,S-S/S/S.S0.S%/S1S(.SS!S"/0 S#S#S$.S%/S2S(.SS!S"/S3S0S#S#S$.S%/S4S(.SS!S"/S3S0S#S#S5S6S7.S%/S4S(.SS#S#S$.S8S9.S:.
r0 S;S<S=S>S?._S@S<SASBSCSD._SES<SFSGS/SH._SIS<SJSGS/SH._SKSLSMS.SN._SOSPSQSRSN._SSSTSUSV._SWSXSUSV._SYSZSUSV._S[SPS\S]SN._S^SPS_S`SN._SaSPSbS S?._ScSdSeSfS?._SgSdShSfS?._SiSdSjSkS?._SlSdSmSkS?._SnSoSpSqSN._SoSrSqSN.SsStSRSOSS/Su.SsSvSRSOSW/Su.SsSwSRSOSY/Su.SxSySV.SxSzSV.SxS{SV.SxS|SV.SxS}SV.SsS~SS?.S€.
ErSkS�S‚Sƒ.SkS�S‚Sƒ.SkS�S‚Sƒ.S„S…S†Sƒ.S„S…S†Sƒ.SkS�S‡Sƒ.S„S…SˆSƒ.SkS�S‰Sƒ.S„S…SŠSƒ.SkS�S‹Sƒ.S„S…SŒSƒ.S�SŽS�Sƒ.S-S�S‘Sƒ.S’.rS“ V s0 s H  o S”\" S S-5      0_M     sn rS•S–S—Sƒ.S/S˜S™Sƒ.Sš.r	g8s  sn f )›é    )Ú*)ÚheadsÚanalysesÚmeasuresÚ	variablesÚ
statParamsÚopParamsÚdesignParamsÚopusÚ	SpiceOpusÚdebugÚfilez
miller.incz	topdc.incz	toprr.inczcmos180n.libÚtm)r   ÚsectionÚwpÚwsÚwoÚwzÚmc)	ÚdefÚtbÚtbrrr   r   r   r   r   r   ÚmethodÚtrapg-Cëâ6?g      à¿g      à?gñhãˆµøä>g•Ö&è.>g    „×—Agê-�™—q=)	ÚibiasÚlev1Úlev2ÚtstartÚtrÚtfÚpwÚrloadÚcload)Ú	simulatorÚsettingsÚmoddefsÚoptionsÚparams)Úxmn1Úxmn2Úxmn3Úxmn4Úxmn5Úxmp1Úxmp2Úxmp3)é   r1   r1   r1   r1   r   r   r   )ÚmosListÚisNmosr   r   g    €„.A)ÚrinÚrfbzall()z=p(ipath(mosList, 'x1', 'm0'), ['vgs', 'vth', 'vds', 'vdsat'])zop())ÚheadÚmodulesr'   r(   ÚsavesÚcommandz'dc(-2.0, 2.0, 'lin', 100, 'vin1', 'dc')zac(1, 1e12, 'dec', 10)r   g    eÍÍAr1   g      ð?g        )r5   ÚcinÚaccomÚacvddÚacvsszac(1, 1e9, 'dec', 10)z(noise(1, 1e12, 'dec', 10, 'vin1', 'out')Úreltolz2tran(param['tr']*1, param['tstart']+param['pw']*2)gš™™™™™é¿gš™™™™™é?)r4   r5   r   r   N)r6   r(   r9   )
ÚopÚdcÚacr;   r<   r=   ÚnoiseÚtranÚtranslewÚblankÚisupr?   zisup=-i('vdd1')gü©ñÒMbP?)ÚanalysisÚ
expressionÚupperÚout_opzv('out')gš™™™™™‰¿gš™™™™™‰?)rG   rH   ÚlowerrI   Úvgs_drvaÒ  
res=[]
# Loop over all MOS instances in mosList
for inst in mosList:
	# Generate full name for MOS instance
	fullName=ipath(inst, 'x1', 'm0')
	# Extract vgs and vth from results
	vgs=p(fullName, 'vgs')
	vth=p(fullName, 'vth')
	# Compute difference and append to results list
	diff=float(vgs-vth)
	res.append(diff)
	# Uncomment to print a debug message during evaluation
	# m.debug(f"{fullName}: vgs={vgs:f} vth={vth:f}")
# Return NumPy array
__result=np.array(res)
T)rG   rH   ÚvectorrK   Úvds_drvao  
res=[]
# Loop over all MOS instances in mosList
for inst in mosList:
	# Generate full name for MOS instance
	fullName=ipath(inst, 'x1', 'm0')
	# Extract vds and vdsat from results
	vds=p(fullName, 'vds')
	vdsat=p(fullName, 'vdsat')
	# Compute difference and append to results list
	diff=float(vds-vdsat)
	res.append(diff)
# Return NumPy array
__result=np.array(res)
Úswingr@   z6m.DCswingAtGain(v('out'), v('inp', 'inn'), 0.5, 'out'))rG   rH   rK   ÚgainrA   zj
ndx=m.IatXval(np.abs(scale()), 10.0)[0]
__result=m.XatI(m.ACmag(m.ACtf(v('out'), v('inp', 'inn'))), ndx)
g      N@Úgain_comr;   z^
ndx=m.IatXval(np.abs(scale()), 10.0)[0]
__result=m.XatI(m.ACmag(m.ACtf(v('out'), 1.0)), ndx)
)rG   rH   Úgain_vddr<   Úgain_vssr=   Úugbwz4m.ACugbw(m.ACtf(v('out'), v('inp', 'inn')), scale())g    ÐcAÚpmz2m.ACphaseMargin(m.ACtf(v('out'), v('inp', 'inn')))g      I@Úph_slopezü
# Transfer function
tf=m.ACtf(v('out'), v('inp', 'inn'))
# Phase slope in deg/dec
slope=m.dYdX(m.ACphase(tf), np.log10(scale()))
# Look only at points where gain>0dB
mask=m.ACmag(tf)>0
# Max slope in region defined by mask
__result=(slope*mask).max()
ÚovershdnrC   zbm.Tundershoot(v('out'), scale(), t1=param['tstart'], t2=(param['pw']+param['tstart']+param['tr']))g333333Ã?ÚovershupzMm.Tovershoot(v('out'), scale(), t1=(param['pw']+param['tstart']+param['tr']))Útsetdnzdm.TsettlingTime(v('out'), scale(), t1=param['tstart'], t2=(param['pw']+param['tstart']+param['tr']))g�íµ ÷Æ°>ÚtsetupzPm.TsettlingTime(v('out'), scale(), t1=(param['pw']+param['tstart'])+param['tr'])ÚslewdnrD   zkm.TslewRate('falling', v('out'), scale(), t1=param['tstart'], t2=(param['pw']+param['tstart']+param['tr']))g    €„>AzVm.TslewRate('rising', v('out'), scale(), t1=(param['pw']+param['tstart']+param['tr']))rE   z9result['gain'][cornerName]-result['gain_com'][cornerName])rG   rH   rK   Údependsz9result['gain'][cornerName]-result['gain_vdd'][cornerName]z9result['gain'][cornerName]-result['gain_vss'][cornerName]rB   z0m.XatI(ns('output'), m.IatXval(scale(), 1e3)[0])z/m.XatI(ns('input'), m.IatXval(scale(), 1e3)[0])zPm.XatI(ns('input', ipath('xmn2', 'x1', 'm0'), 'id'), m.IatXval(scale(), 1e3)[0])zPm.XatI(ns('input', ipath('xmn2', 'x1', 'm0'), 'rd'), m.IatXval(scale(), 1e3)[0])zJm.XatI(ns('input', ipath('xmn2', 'x1', 'm0')), m.IatXval(scale(), 1e3)[0])zù(param['mirr_w']+param['mirr_wo'])*param['mirr_l']+param['mirr_wd']*param['mirr_ld']+param['out_w']*param['out_l']*(2)+param['load_w']*param['load_l']*(1+1)+param['diff_w']*param['diff_l']*(1+1)+param['r_out']/1e3*12e-12+param['c_out']/1e-12*100e-12gg±+eÍSC>)
ÚslewupÚcmrrÚpsrr_vddÚpsrr_vssÚonoise1kÚinoise1kÚ	in1kmn2idÚ	in1kmn2rdÚin1kmn2ÚareagžŽ’Wç?g²uº=RŽ?)ÚloÚhiÚinitgÁ�v¾À(ˆ>g�íµ ÷ÆÐ>gõ´Æ"ä¢>gTäqs*	?gTäqs*™>g{�yÞ2L?gÆ¼q�Å>gÛ%?6à>gQöØŽ�²>gVçž¯Ò<g»½×Ùß|Ë=g6¸°±Ñ¢=g     jAg33333³3@)Úmirr_wÚmirr_wdÚmirr_woÚmirr_lÚmirr_ldÚout_wÚout_lÚload_wÚload_lÚdiff_wÚdiff_lÚc_outÚr_out)Úmp1vtÚmp1u0Úmp2vtÚmp2u0Úmp3vtÚmp3u0Úmn1vtÚmn1u0Úmn2vtÚmn2u0Úmn3vtÚmn3u0Úmn4vtÚmn4u0Úmn5vtÚmn5u0ÚgvtnmmÚgu0nmmÚgvtpmmÚgu0pmmÚdistg333333û?g       @gÍÌÌÌÌÌü?g      Y@é   )ÚvddÚtemperature)
Úpyopus.evaluator.distribÚ__all__r   r   r   r   r
   ÚNormalr   r	   )Únames   0Ú5/home/arpadb/PyOpus/demo/design/miller/definitions.pyÚ<module>r”      st  ðÜ &ò e€ð Øà
ˆAðð �\Ð#Ø�[Ð"Ø�[Ð"Ø#°Ñ6Ø#°Ñ6Ø#°Ñ6Ø#°Ñ6Ø#°Ñ6Ø#°Ñ6ñ
ð ˆVðð ØØØØ	Ø	Ø	ØØñ
ñ'
ð 	€òF OÚJñ€	ð Ø�dˆ_ðð Ø
ñð ØBðð ñð$ Ø�dˆ_ðð Ø
ñð Ø6ñð Ø�dˆ_ðð Ø
ñð ˆ;Ø%ñð& Ø�fÐðð Ø
ØØØñð ˆ;Ø$ñð  Ø�fÐðð Ø
ØØØñð ˆ;Ø$ñð  Ø�fÐðð Ø
ØØØñð ˆ;Ø$ñð  Ø�dˆ_ðð Ø
ñð ˆ;Ø7ñð Ø�dˆ_àˆTðð Ø
ñð ˆ;ØAñ
ð Ø�dˆ_àˆTðð Ø
ØØñ	ð ˆ;ØAñð  à
Ø
ñð ññKM€ð`FØØØ!Øñ
ðFð 
ØØØØñ	ðFð Øðð" Øñ)ðFðD Øðð Øñ%ðEFðl 	ØØHØñðmFðv Øðð ñ
ðwFðP ØðñðQFð^ Øðñð_Fðl ØðñðmFðz ØØFØñ
ð{FðD ØØDØñðEFðN Øð	ð ñðOFðj ØØtØñðkFðt ØØ_ØñðuFð~ 
ØØvØñðFðH 
ØØbØñðIFðR 
ØØ}ØñðSFð^ ØhØñð ØKØØ�zÐ#ñ	
ð ØKØØ�zÐ#ñ	ð ØKØØ�zÐ#ñ	ð ØBñð
 ØAñð
 Øbñð
 Øbñð
 Ø\ñð
 ð#ð ñ
òsF€ðV 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	ØØ
ñð 	
ØØ
ññ{B€ñJ8ó ò 8¨t�V™V A a›[Ð*Ò*ñ 8ñ €
ð 	ØØ
ñ	ð 	ØØ
ññ
�ùòs   ÇH