% LC oscillator design. % (a tradeoff figure between the power and phase noise is generated) % % This is an example taken directly from the paper: % % Geometric Programming and its Applications to EDA Problems % (DATE Tutorial 2005) by Boyd, Kim, and Mohan. % (see pages 102-113) % % Designs an LC oscillator consisting of a loop inductor, varactors % for fine tuning, binary weighted switching capacitors for coarse % tuning, cross coupled NMOS transistors, and tail current source. % The optimal LC oscillator design iwith minimum power consumption, % and limits on phase noise, area, etc... can be formulated as a GP: % % minimize P % s.t. N <= Nmax, A <= Amax, l >= lmin, etc. % % where optimization variables are loop inductor dimensions D,W, % size of varactor Vc, size of switching caps Csw, width and length % of transistors Wnmos, Lnmos, bias current Ibias, etc. % % Original code by S. Mohan. % Almir Mutapcic 02/03/06 %******************************************************************** % problem data %******************************************************************** Vdd = 1.2; % voltage CL = 0.2e-12; % load capcitance F = 5e9; % operating frequency in Hz omega = 2*pi*F; % operating freq. in radians PNSpec = 0.7e-11; % phase noise specs FOff = 6e5; % offset frequency for phase noise calculation LoopGainSpec = 2.0; % loop gain spec Vbias = 0.2; % non ideality of current mirror % tuning specs T = 0.1; % +/- tuning range as a normalized value CvarRatio = 3; % maximum to minimum value of CVar CswBits = 3; CswSegs = 2^(CswBits); CvarCswLSBOverlap = 2; %******************************************************************** % optimization of LC oscillator %******************************************************************** % optimization variables gpvar D; % diameter of loop inductor gpvar W; % width of loop inductor gpvar SRF; % self resonance frequency gpvar l; % length of CMOS transistor gpvar w; % width of CMOS transistor gpvar I; % maximum current through CMOS transistor gpvar VOsc; % differential voltage amplitude gpvar CT; % total capacitance of oscillator gpvar Csw; % maximum switching capacitance gpvar Cvar; % minimum variable capacitance gpvar IBias; % bias current gpvar CMaxFreq; % capacitor max frequency %******************************************************************** % loop inductor definitions and constraints %******************************************************************** SRFSpec = 3*F; omegaSRF = 2*pi*SRF; % inductance L = 2.1e-06*D^(1.28)*(W)^(-0.25)*(F)^(-0.01); % series resistance R = 0.1*D/W+3e-6*D*W^(-0.84)*F^(0.5)+5e-9*D*W^(-0.76)*F^(0.75)+0.02*D*W*F; % effective capacitance C = 1e-11*D+5e-6*D*W; % area, tank conductance, and inverse quality factor Area = (D+W)^2; G = R/(omega*L)^2; invQ = R/(omega*L); loop_constr = [ Area <= 0.25e-6; W <= 30e-6; 5e-6 <= W; 10*W <= D; D <= 100*W; SRFSpec <= SRF; omegaSRF^2*L*C <= 1 ]; %******************************************************************** % transistor definitions and constraints %******************************************************************** GM = 6e-3*(w/l)^0.6*(I/2)^(0.4); GD = 4e-10*(w/l)^0.4*(I/2)^(0.6)*1/l; Vgs = 0.34+1e-8/l+800*(I*l/(2*w))^0.7; Cgs = 1e-2*w*l; Cgd = 1e-9*w; Cdb = 1e-9*w; transistor_constr = [ 2e-6 <= w; 0.13e-6 <= l; l <= 1e-6 ]; %******************************************************************** % overall LC oscillator definitions and constraints %******************************************************************** % power power = Vdd*IBias; invVOsc = (G+GD)/IBias; % phase noise kT4 = 4*1.38e-23*300; kT4G = 2*kT4; LoopCurrentNoise = kT4*G; TransistorCurrentNoise = 0.5*kT4G*GM; PN = 1/(160*(FOff*VOsc*CT)^2)*(LoopCurrentNoise+TransistorCurrentNoise); % capacitance Cfix = C+0.5*(CL+Cgs+Cdb+4*Cgd); % fixed capacitance CDiffMaxFreq = Cfix+0.5*Cvar; invLoopGain=(G+0.5*GD)/(0.5*GM); % collect all of the LC oscillator constraints constr = [ PN <= PNSpec; loop_constr; transistor_constr; omega^2*L*CT == 1; omega^2*(1+T)^2*L*CMaxFreq == 1; 4*T/((1-T^2)^2)*CT <= Csw*(1+CvarCswLSBOverlap/CswSegs); Csw*CvarCswLSBOverlap/CswSegs <= 0.5*Cvar*(CvarRatio-1); CDiffMaxFreq <= CMaxFreq; VOsc+2*Vbias <= 2*Vdd; VOsc*invVOsc <= 1; invLoopGain*LoopGainSpec <= 1; % loop gain spec Vbias+Vgs+IBias/2*R/2 <= Vdd; % bias constraint spec I == IBias ]; %******************************************************************** % solve the problem and generate the tradeoff curve %******************************************************************** % set the quiet flag (no solver reporting) global QUIET; QUIET = 1; powers = []; for T = 0.15 % can also vary tuning T = 0.05:0.05:0.2 for PNSpec=0.7e-12:0.2e-12:1e-11 constr(1) = PN <= PNSpec; [min_power solution status] = gpsolve(power,constr); powers = [powers min_power]; end end % enable solver reporting again global QUIET; QUIET = 0; % plot the tradeoff curve PNSpec = [0.7e-12:0.2e-12:1e-11]; plot(10*log10(PNSpec),powers/1e-3); xlabel('Phase Noise (dBc/Hz)') ylabel('Power (mW)')