EE / Portfolio
← Back
Mixed Signal Design

Phase Locked Loop (WIP)

A one-pager on a phase-locked loop I'm building from MATLAB modeling to Cadence layout.

Phase Locked Loop (WIP) — image 1

A Charge-Pump PLL for On-Chip Clock Generation — 120 nm CMOS

I'm designing an integer-N charge-pump PLL to synthesize low-jitter on-chip clocks for novel memristive-memory and compute-in-pixel sensor arrays, working alongside a PhD student in Duke's Roy Lab. The project runs the full mixed-signal flow: from a linearized loop model in MATLAB down to a transistor-level design in SkyWater's SKY120 (120 nm) process.

Target specs

ParameterValue
ArchitectureInteger-N charge-pump PLL
Reference25 MHz
Output100–500 MHz (÷4 to ÷20)
Loop bandwidth~1 MHz (≈ f_ref / 25)
Damping factor (ζ)≈ 1 (~65° phase margin)
RMS jitter< 5 ps
ProcessSkyWater SKY120, 120 nm CMOS

1. What a PLL Is

A phase-locked loop is a negative-feedback system that locks an oscillator's phase and frequency to a reference. Here it's used for frequency synthesis — multiplying a clean, slow reference up to a fast on-chip clock — the same way a car's cruise control holds a target speed by continuously correcting.

2. The Blocks — and How I Chose the Values

PLL design is mostly a control problem. I fix the two things that actually matter — loop bandwidth (~1 MHz) and damping (ζ ≈ 1) — then back-solve every component from the standard second-order loop equations. Loop bandwidth stays under f_ref / 20 so the loop behaves like a continuous-time system, and ζ ≈ 1 is the sweet spot between fast settling and low jitter peaking.

  • Phase-Frequency Detector (PFD)Compares reference and divided-VCO edges and emits UP/DOWN pulses proportional to phase error. Edge-triggered, so input duty cycle is irrelevant. I add a reset delay to guarantee a minimum pulse width and kill the "dead-zone" around small phase errors.
  • Charge Pump (I_cp ≈ 20 µA)Converts the PFD's digital pulses into an analog error current. I pick a mid-range I_cp to balance loop-filter capacitor area against noise, and use long-channel, cascoded current mirrors to match UP/DOWN currents (which keeps static phase error small).
  • Loop Filter (C1 ≈ 100 pF, R ≈ few kΩ, C2 ≈ 5 pF)Sets the loop dynamics. C1 integrates the pump current and sets the natural frequency; R adds the stabilizing zero that gives ζ ≈ 1; C2 smooths charge-pump ripple on the control voltage. I keep C1/50 < C2 < C1/10 — small enough to preserve phase margin, large enough to cut ripple-induced jitter.
  • Voltage-Controlled Oscillator (VCO)A current-starved ring oscillator whose frequency tracks the control voltage. Sized for a 100–500 MHz range with extra headroom for PVT spread; K_VCO falls out of the tuning range over the usable V_ctl window. Odd number of stages to guarantee oscillation, on a regulated supply to reject VDD noise.
  • Feedback Divider (÷4 to ÷20)Sets the multiplication ratio. Implemented as a synchronous counter, clocked faster than the max VCO frequency to avoid run-away, with a re-sampling flop on the output to remove glitches before they reach the PFD.

3. Design Flow

I'm taking the design through four stages, each catching a different class of problem before the next:

  1. 01
    MATLABLinearized, frequency-domain model of the loop. Bode/phase-margin analysis locks in loop bandwidth and damping, then I solve for I_cp, C1, R, and C2.
  2. 02
    SimulinkTime-domain behavioral model of the whole loop. Verifies lock time, settling, and overshoot under a reference step and across frequency-range changes — before touching a transistor.
  3. 03
    KiCadA discrete, through-hole demo board (op-amp and logic-level parts) that proves the architecture and loop behavior cheaply on the bench.
  4. 04
    Cadence VirtuosoTransistor-level schematic and Spectre simulation of every block in the SKY120 PDK, swept across PVT corners for jitter and lock behavior.

4. Problems I Hit — and Fixed

A PLL has a lot of ways to fail. Three the loop model and transistor-level sims flagged, and how I'm designing around them:

VCO rails at power-on.

Problem

the VCO pins to its max frequency at start-up and outruns the divider.

Cause

the loop tries to lock before the supply is stable, saturating the control voltage to VDD.

Fix

hold the PLL in RESET until a power-OK signal asserts, keeping V_ctl at 0 until the rails settle.

Loop won't lock.

Problem

the PLL intermittently refuses to acquire lock.

Cause

glitches on the feedback-divider output confuse the PFD.

Fix

re-sample the divider output with a clean flop to strip glitches before they hit the phase detector.

Static offset from leaky capacitors.

Problem

the control voltage drifts and static phase error creeps up.

Cause

thin-gate-oxide capacitors leak badly at small nodes — a real concern at 120 nm.

Fix

build the loop-filter caps from thick-oxide / metal (MOM) capacitors. They cost more area, but the gate leakage that drives static phase error goes away.

Tools & concepts: charge-pump PLL, PFD, charge pump, loop filter, VCO, feedback divider · frequency synthesis / clock generation · loop bandwidth, damping factor, phase margin, RMS jitter · MATLAB, Simulink, KiCad, Cadence Virtuoso / Spectre · SKY120 120 nm CMOS · analog / mixed-signal IC design.