Considering RL and CL,
Normalized output Zunit = [ Zout || RL || 1/(sCL) ] / RL=
[ Assume C (node effective Cap) = 2×C, A=gmRL, Ck=C/CL ], use python to calculate step response vs. couples of A-Ck:
#!/usr/bin/env python3
from scipy.signal import lti,step2
import matplotlib.pyplot as plt
import pyplot_color
def cross(sig_in, Vthresh, edge_num, edge_kind):
# sig_in is sig after interpolation w/i min resolution step
# to mimic cross function in ADE/Ocean
i = 0
time = []
for i in range(0,len(sig_in['x'])):
if i < len(sig_in['x'])-1:
if sig_in['y'][i] <= Vthresh and sig_in['y'][i+1] > Vthresh:
if edge_kind == 'either':
time.append(sig_in['x'][i])
if len(time) == edge_num:
break
if edge_kind == 'rising':
time.append(sig_in['x'][i])
if len(time) == edge_num:
break
if sig_in['y'][i] > Vthresh and sig_in['y'][i+1] <= Vthresh:
if edge_kind == 'either':
time.append(sig_in['x'][i])
if len(time) == edge_num:
break
if edge_kind == 'falling':
time.append(sig_in['x'][i])
if len(time) == edge_num:
break
else:
print('[-] cross failed...')
sys.exit()
i += 1
return time[edge_num-1]
color_list = pyplot_color.color_for_pyplot
color_index = 0
A_list = [0]
t_list = [1]
plt.figure()
plt.subplot(1,2,1)
for i in range(1,200,10):
A = i / 100
A_list.append(A)
Ck = ((2*A)**0.5-A)/(2-A)
k = Ck/A
damp = (A/Ck+Ck/A+2+A*Ck-2*(A+Ck))**0.5/2
# if RLCL=1/3 -> tSettle = 1
wz = 3/k
wn = (3*wz)**0.5
Hs = lti([1/wz,1],[1/wn**2,2*damp/wn,1]) # transfer expression
time, volt = step2(Hs)
sig_step = {'x':time,'y':volt}
t_95per = cross(sig_step,0.95,1,'rising')
t_list.append(t_95per)
print('A=%3.3f,Ck=%3.3f,Damp=%3.3f,tSet=%3.3f'%(A,Ck,damp,t_95per))
plt.plot(time,volt,color=color_list[color_index],label='A=%3.3f,Ck=%3.3f'%(A,Ck))
color_index += 1
plt.plot([0,2],[1.05,1.05],'r--')
plt.plot([0,2],[0.95,0.95],'g--')
plt.xlabel('normalized t')
plt.ylabel('normalized volt')
plt.xlim(0,2)
plt.legend(loc='best',fontsize=10)
plt.grid(True)
plt.subplot(1,2,2)
plt.plot(A_list,t_list)
plt.scatter(A_list,t_list)
plt.xlabel('gmRL')
plt.ylabel('95% tSettling time normalized t')
plt.grid(True)
plt.show()