CP-PLL Transient Simulation — Cycle Slip và Quá trình Acquisition
Linear model cho bandwidth và phase margin, nhưng không nói được PLL có lock được không khi frequency offset lớn. Bài này xây dựng behavioral model từ đầu, giải thích cycle slip bằng số, và chỉ ra cách đọc kết quả transient sim.
Không spam. Chỉ bài kỹ thuật AMS đáng đọc — gửi qua email khi có bài mới.
Hai bài trước — Loop Dynamics (transfer function, phase margin, chọn loop filter) và Locking Transient (settling/overshoot small-signal trong time-domain) — đều giả định PLL đã ở gần điểm lock và dao động nhỏ.
Nhưng khi VCO mới khởi động — hoặc khi channel switch làm reference nhảy tần số đột ngột — PLL phải kéo VCO từ về qua một khoảng lệch lớn. Trong giai đoạn đó, tín hiệu không nhỏ, PFD ở chế độ phi tuyến, và linear model sai hoàn toàn.
Hai câu hỏi mà linear analysis không trả lời được:
- PLL có lock được không khi ?
- Lock mất bao lâu, và xảy ra bao nhiêu cycle slip trước đó?
Để trả lời, cần behavioral transient simulation — mô hình từng khối theo thời gian thực, giải ODE(Ordinary Differential Equation) qua từng chu kỳ reference.
Mục lục
- Behavioral model: từng khối
- Giải từng chu kỳ reference: hybrid ODE
- Cycle slip là gì và tại sao xảy ra?
- Thông số sim và kết quả
- Ringing sau mỗi cycle slip: nguyên nhân và công thức
- Pull-in range và giới hạn acquisition
- Bài học cho engineer
1. Behavioral model: từng khối
PLL gồm bốn khối. Mô hình behavioral thay mỗi khối bằng phương trình toán học — không mô tả transistor hay mạch chi tiết, nhưng đúng với hành vi large-signal.
PFD và Charge Pump
PFD so sánh phase của reference và feedback. Sai lệch phase thuần (unbounded) là:
Nhưng PFD thực tế chỉ “nhìn” được sai lệch trong khoảng — nó reset sau mỗi chu kỳ. Vì vậy:
Từ suy ra thời gian CP bơm và cực tính:
bị clamp tại — không thể bơm lâu hơn một chu kỳ reference.
Loop filter
Loop filter dạng R-C1 nối tiếp song song C2 (type-II). Hai phương trình ODE:
là điện áp ngay tại nút nối R-C2 — thay đổi nhanh khi CP bơm. là điện áp trên tụ C1 — biến đổi chậm hơn với hằng số thời gian . Điện áp vào VCO là .
VCO
VCO chuyển điện áp thành tần số, tần số thành phase:
Đây là ODE thứ ba trong hệ. State vector đầy đủ: .
2. Giải từng chu kỳ reference: hybrid ODE
CP không bơm dòng liên tục — nó bơm đúng giây sau mỗi cạnh lên của reference, rồi tắt. Vì vậy mỗi chu kỳ reference chia thành hai phase với ODE khác nhau:
Phase 1 : CP bật,
Phase 2 : CP tắt,
Gọi đây là hybrid ODE — hệ liên tục nhưng input không liên tục. Giải tuần tự: dùng trạng thái cuối phase 1 làm điều kiện đầu cho phase 2.
def sim_one_cycle(state, t_pulse, Icp_signed, T_ref):
y = list(state)
# Phase 1: CP on
if t_pulse > 1e-15:
sol = solve_ivp(odes, [0, t_pulse], y,
args=(Icp_signed,), method='Radau',
rtol=1e-8, atol=1e-12)
y = sol.y[:, -1].tolist()
# Phase 2: CP off
t_off = T_ref - t_pulse
if t_off > 1e-15:
sol = solve_ivp(odes, [0, t_off], y,
args=(0.0,), method='Radau',
rtol=1e-8, atol=1e-12)
y = sol.y[:, -1].tolist()
return np.array(y)
Đây chỉ là phần lõi. Code đầy đủ của behavioral model (config, solver, PFD/CP, VCO, loop filter, plot) ở repo ams-models/pll.
Tại sao Radau? Loop filter có hai hằng số thời gian rất khác nhau: và . Tỉ số 10× tạo ra stiff system — solver explicit (RK45, DOP853) phải dùng step rất nhỏ để ổn định, chạy rất chậm. Radau là solver implicit, xử lý stiff tốt hơn nhiều.
Thứ tự “VCO first”: Trong mỗi vòng lặp, VCO chạy trước (ODE), sau đó reference edge đến, rồi mới tính phase error và PFD. Thứ tự này tránh artifact khởi tạo: nếu tính PFD trước khi VCO chạy, cycle đầu tiên sẽ có trước khi VCO tích lũy bất kỳ phase nào — sẽ nhảy vọt lên 1 cycle ngay từ đầu, sai về mặt vật lý.
3. Cycle slip là gì và tại sao xảy ra?
Cycle slip xảy ra khi vượt qua bội số của — tức là floor() thay đổi giữa hai chu kỳ liên tiếp.
Để hiểu tại sao, hãy theo dõi qua một slip:
- PLL chưa lock, VCO chạy chậm hơn target: tăng dần
- : CP bơm UP hết công suất,
- vượt : wrap từ về đột ngột
- CP lập tức đổi sang DN — cực tính lật 180°
- DN bơm trong vài chu kỳ → không tăng nữa, thậm chí giảm
- Rồi lại tăng, và slip tiếp theo xảy ra
Mỗi lần vượt thêm là một cycle slip. Nhìn trên đồ thị, vẽ thành bậc thang — mỗi bậc là một slip. Số bậc = số cycle slip.
4. Thông số sim và kết quả
Thông số
| Tham số | Giá trị | Ghi chú |
|---|---|---|
| 50 MHz | ||
| 2.4 GHz | ||
| 48 | ||
| 130 µA | ||
| 200 MHz/V | ||
| 2.1 GHz | , | |
| 15 pF | ||
| 16kΩ | . Hơi underdamped, chấp nhận được | |
| 1.5 pF | ||
| 1500 mV | . Con số này không thực tế lắm, nhưng để show cycle slip |
Chú ý: = 130 µA — nhỏ hơn thiết kế ở bài trước . Lý do chọn như vậy để thấy cycle slip rõ ràng hơn: với lớn, mỗi CP pulse làm Vtune nhảy lớn và Phase error được sửa trước khi quá , không xảy ra cycle slip nhiều lần.
Kết quả sim
Panel 1 — Tần số VCO: Đường sáng (f_smooth) dùng thay cho để lọc ripple nhanh. Thấy rõ quá trình VCO leo từ 2.1 GHz lên 2.4 GHz sau 5 cycle slips.
Panel 2 — Vtune ripple mỗi khi , tương đương với , đối với .
Panel 3 — Phase error: (vàng, trục trái, đơn vị cycle) vẽ thành bậc thang đi lên — mỗi bậc là một cycle slip, đánh dấu bằng chấm cam. (xám, trục phải) dao động trong .
Panel 4 — CP pulse width: Dao động giữa 0 và . Khi slip xảy ra, wrap về → pulse width gần theo chiều ngược lại.
Kết quả: 5 cycle slip (tại 0.2, 0.4, 0.6, 1.3, 2.0 µs), lock tại ~2.0 µs — settle ở 3 cycle, .
5. Ringing sau mỗi cycle slip
Nhìn panel 1 và 2 kỹ hơn: sau mỗi cycle slip, tần số và Vtune không tăng thẳng mà dao động tắt dần trước khi leo lên bậc tiếp theo. Đây không phải noise — đây là đáp ứng bậc hai của vòng lặp.
Chuỗi sự kiện tại mỗi slip:
- đang gần → CP bơm UP tối đa → đang tăng
- Slip: nhảy từ về đột ngột
- CP lập tức đổi sang DN — một “step” thay đổi input từ xuống
- Vòng lặp phản ứng theo đáp ứng bậc hai: overshoot rồi tắt dần
Tần số ringing xấp xỉ tần số tự nhiên của vòng lặp (bỏ qua zero và ). Lưu ý tính bằng Hz/V thì hệ số tự triệt tiêu:
Thay số (, , ):
Hệ số tắt dần:
Với , biên độ ringing tắt với hằng số thời gian — ngắn hơn một chu kỳ ringing . Nghĩa là sau mỗi slip vòng lặp chỉ kịp một nhịp overshoot rồi tắt, chứ không dao động qua nhiều chu kỳ (số chu kỳ nhìn thấy được ). Khoảng cách giữa hai slip (0.5 µs) cũng nhỏ hơn , nên không đủ thời gian cho dao động nhiều vòng.
Muốn overshoot nhỏ hơn → tăng (tăng ). Muốn underdamped thật sự — ringing qua vài chu kỳ, bậc thang gồ ghề hơn → giảm mạnh để .
6. Pull-in range và giới hạn acquisition
Không phải mọi đều lock được. Có hai ngưỡng quan trọng:
Lock-in range
Khoảng mà PLL lock được trong một chu kỳ beat — không qua cycle slip. Với type-II CP-PLL:
Thay số ( tính bằng Hz/V, ): .
Với : PLL không lock ngay — phải đi qua cycle slip. Đây là lý do sim này có 5 slip.
Pull-in range
Khoảng tối đa mà PLL có thể lock được nếu cho đủ thời gian — qua nhiều cycle slip. Với type-II:
Pull-in range lớn hơn lock-in range nhiều. Khi nằm giữa hai ngưỡng này → PLL lock được nhưng cần thời gian và trải qua nhiều cycle slip. Với thông số sim, vẫn nằm trong pull-in range (lock sau 5 slip).
Tại sao quá lớn gây mất lock hoàn toàn?
Khi rất lớn, beat frequency cao đến mức trong mỗi chu kỳ reference wrap qua nhiều lần — PFD chỉ lấy mẫu một lần mỗi nên CP bơm UP rồi DN gần như cân bằng. Trung bình thời gian, dòng CP về zero → không tích lũy được → VCO không kéo về target.
Trong thực nghiệm (cùng thông số config): lock với 5 slip; vẫn lock nhưng cần 13 slip; còn : CP UP/DN cancel, không tích lũy, PLL không lock dù chạy bao lâu.
7. Bài học cho engineer
Behavioral sim bổ sung cho linear analysis, không thay thế. Linear model cho bandwidth, PM, noise — tất cả đúng khi đã lock. Behavioral sim cho acquisition, cycle slip, pull-in range — cần thiết khi spec có yêu cầu về lock time hoặc channel switch.
Chọn C lớn để thấy cycle slip rõ ràng khi debug. Với C nhỏ (pF): mỗi pulse lớn, PLL lock nhanh, ít slip. Nếu cần quan sát acquisition behavior, có thể tăng C tạm thời trong sim để xem rõ hơn — rồi scale lại về thông số thực.
Ringing sau slip là expected, không phải lỗi. Ringing là đáp ứng tự nhiên của second-order loop trước step đổi cực tính CP. Nếu ringing quá lớn (underdamped), tăng để tăng . Nếu settle quá chậm, tăng (giảm hoặc tăng ).
Pull-in range phụ thuộc , , và . Khi spec yêu cầu lock nhanh từ lớn, các đòn bẩy là: tăng (kéo rộng pull-in range và tăng ), hoặc dùng frequency detector hỗ trợ CP trong giai đoạn acquisition.
Cycle slip count là metric cho acquisition. Số cycle slip phản ánh mức độ lệch pha phải “leo qua” để lock. càng lớn, càng nhỏ → càng nhiều slip. Đây là số liệu hữu ích khi so sánh các phương án thiết kế loop filter.
Tổng kết
| Linear model | Behavioral sim | |
|---|---|---|
| Dùng khi | Đã lock, dao động nhỏ | Acquisition, large-signal |
| Output | Bandwidth, PM, noise | Lock time, cycle slip count |
| Giả định | Tuyến tính, steady-state | Phi tuyến, time-domain |
| Tool | Bode plot, công thức | ODE solver (Radau) |
Bài này xây dựng behavioral model từ PFD/CP, loop filter ODE, đến VCO, giải bằng hybrid ODE (hai phase mỗi chu kỳ reference). Kết quả: 5 cycle slip, lock tại ~2.0 µs với và .
Tham khảo
-
Razavi, Design of Analog CMOS Integrated Circuits, 2nd ed., Chương 15 — transient behavior và acquisition range của CP-PLL.
-
Best, Phase-Locked Loops: Design, Simulation, and Applications, 6th ed. — lock-in range, pull-in range, và cycle slip analysis với ví dụ số.
-
Gardner, Phaselock Techniques, 3rd ed. — phân tích rigorous về pull-in process và acquisition time.