The Matlab script used in this post:
%%%%%%%%%%%%%%% Estimate the speed of CML Latch %%%%%%%%%%%%%%%%%%%%%
clear all; clc;
% Initial settings
G = 3; % Amplification gain
gm_id = 10; % Inversion coefficient
id_unit = 150e-6; % Id for gm_id=10 at W = 1um, L=30nm
cg_unit = 0.4e-15; % Cgg at W = 1um
ll = 0.03; % Transistor length in um
ww = 4; % Transistor width
id = id_unit*ww; % Bias current
gm = gm_id*id; % Transistor transconductance
cg = ww*cg_unit; % Gate capacitance in F
cpar = 10e-15; % parasitic capacitance
cl = 3*cg + cpar; % Total load capacitor
rl = G/gm; % Resistor load
iss = id*2; % Tail current
deltaV = rl*iss; % Differential output voltage
tau = rl*cl; % Time constant
k = 1:0.2:8; % Ratio of Iss*RD/Vxy1
t1 = -tau.*log(1-(1+1./k)./G).*1e12; % Amplification time in ps
t2 = tau./(G-1).*log(k).*1e12; % Regeneration time in ps
plot(k, t1, '-rd', k, t2, '-bo', k, t1+t2, '-k+')
xlabel('-I_{ss}R_D/V_{XY1}'); ylabel('Time [ps]');
xlim([1 max(k)]);
title(sprintf('Gm/Id = %.0f; G = %d; W = %d [um]; C_L = %.0f [fF] \n R_L = %.0f [Omh]; I_{SS} = %.0f [uA]; V_{diffo} = %.1f [mV]', gm_id, G, ww, cl*1e15, rl, iss*1e6, deltaV*1e3));
legend('Amplification time', 'Regeneration time', 'Total sum', 'Location', 'Best');
grid on;
Pingback: Current-Mode-Logic (CML) Latch | EveryNano Counts