← Về trang chủ
Cơ bản IC 01 tháng 8, 2026 ⟳ 20 phút đọc

Mismatch: vì sao offset 4 mV không giết ADC 10-bit — và vì sao Monte Carlo ≠ chạy corner

Bài op-amp ép systematic offset về 0 rồi gạt random offset sang 'để sim'. Bài này tính nó ra: σ(Vos) = 4.3 mV = 2.4 LSB, to hơn mọi nguồn noise. Nhưng đó lại là lỗi con SAR ADC dễ tha nhất — còn thứ thật sự giới hạn 10-bit thì nằm im trong CDAC.

mismatchoffsetPelgromMonte CarlomatchingSAR ADC180nm
Nhận bài viết mới

Không spam. Chỉ bài kỹ thuật AMS đáng đọc — gửi qua email khi có bài mới.

Bài two-stage Miller op-amp làm một việc rất gọn với offset: nó ép systematic offset về đúng 0 bằng cách chọn (gm/ID)6=(gm/ID)3=10(g_m/I_D)_6 = (g_m/I_D)_3 = 10 để VDS4=VDS3V_{DS4} = V_{DS3}. Sạch sẽ, một dòng lý luận.

Rồi ngay cuối bài, ở mục “vẫn phải verify bằng sim”, nó viết một câu gọn hơn nữa: “…mismatch, VDSV_{DS} thật, RzR_z tracking… vẫn cần sim xác nhận.” Mismatch bị gộp chung vào đống “để sim lo”, rồi đi tiếp.

Bài này lôi cái “để sim lo” đó ra tính. Và có hai chuyện lòi ra mà mình nghĩ đáng viết hẳn một bài:

  1. Con số random offset to hơn mọi nguồn noise cộng lại — 4.3 mV, tức 2.4 LSB. Nghe như án tử cho con ADC 10-bit.
  2. Nhưng nó lại là lỗi con ADC đó dễ tha nhất — còn thứ thật sự giới hạn số bit thì im lặng nằm trong CDAC, đúng chỗ bài kT/C đã chạm vào.

Và ở giữa là một cái bẫy tư duy: mismatch không phải một PVT corner. Chạy SS/TT/FF cả ngày cũng không thấy nó.


Mục lục

  1. Pelgrom: vì sao offset đi theo 1/area1/\sqrt{\text{area}}
  2. Systematic vs random — hai kẻ thù khác loài
  3. Tính offset thật của con op-amp
  4. Luật area\sqrt{\text{area}}: giảm một nửa, trả gấp bốn
  5. Mismatch KHÔNG phải một corner
  6. 4.3 mV có đáng sợ không? — offset hằng số vs mismatch phần tử
  7. Cái thật sự ép số bit: matching CDAC
  8. Bài học

1. Pelgrom: vì sao offset đi theo 1/√area

Hai transistor vẽ giống hệt nhau, đặt cạnh nhau, cùng layout — vẫn không bao giờ bằng nhau. VthV_{th} của mỗi con phụ thuộc số nguyên tử dopant nằm dưới kênh, mà con số đó là ngẫu nhiên. Kênh càng nhỏ, số dopant càng ít, dao động tương đối càng lớn — đúng kiểu tung 10 đồng xu thì tỷ lệ mặt ngửa lệch nhiều hơn tung 1000 đồng.

Định lượng chuyện đó là định luật Pelgrom: độ lệch chuẩn của chênh lệch VthV_{th} giữa hai con giống nhau tỉ lệ nghịch với căn diện tích:

σ(ΔVth)=AVthWL\sigma(\Delta V_{th}) = \frac{A_{V_{th}}}{\sqrt{W L}}

AVthA_{V_{th}} là hằng số matching của process — đơn vị mV·µm, lấy từ chip đo matching của foundry. Với 180nm nó cỡ 4–5 mV·µm (NMOS thấp hơn PMOS một chút). Đây là con số bạn phải tra từ PDK, không đoán được.

Pelgrom: sigma(Vth) theo 1/căn diện tích, đánh dấu input pair và load

Đọc đường cong này một lần là nhớ cả bài: muốn offset nhỏ đi, chỉ có một đòn bẩy thật sự — diện tích. Và vì là 1/area1/\sqrt{\text{area}}, đòn bẩy đó rất đắt, mục 4 sẽ thấy đắt cỡ nào.

(Có một nguồn mismatch thứ hai: current-factor β=μCoxW/L\beta = \mu C_{ox} W/L, cũng lệch ngẫu nhiên với σ(Δβ/β)=Aβ/WL\sigma(\Delta\beta/\beta) = A_\beta/\sqrt{WL}. Nhưng nó quy về offset qua Vov/2V_{ov}/2, mà VovV_{ov} ở moderate inversion chỉ ~0.15 V, nên số hạng này nhỏ — mục 3 sẽ thấy nó đóng góp không tới 20%.)


2. Systematic vs random — hai kẻ thù khác loài

Trước khi tính, phải tách bạch hai loại offset, vì chúng chống bằng cách hoàn toàn khác nhau và người ta rất hay nhập nhằng.

Systematic offset đến từ bất đối xứng cố ý hoặc cấu trúc: VDSV_{DS} hai nhánh khác nhau, dòng hai bên lệch, mirror không cân. Nó giống nhau trên mọi con chip, và quan trọng nhất: bạn thiết kế nó về 0 được. Đó chính xác là điều bài op-amp làm — ép VDS4=VDS3V_{DS4}=V_{DS3} bằng cách chọn mức đảo của M6. Zero, bằng lý luận, không tốn diện tích.

Random offset đến từ mismatch dopant — Pelgrom. Nó khác nhau từng con chip, phân bố Gauss quanh 0. Và đây là chỗ đau: bạn không thiết kế nó về 0 được. Không có mẹo topology nào khử được một biến ngẫu nhiên. Chỉ có hai cách: bình quân nó xuống bằng diện tích lớn (mục 4), hoặc đo rồi trừ bằng calibration/auto-zero (mục 6).

Systematic là bài toán kỹ thuật, random là bài toán thống kê. Bài op-amp giải xong vế systematic bằng một dòng. Vế random thì không dòng nào giải được — nó chỉ có cái giá, và bạn chọn trả bằng diện tích hay bằng mạch calib.


3. Tính offset thật của con op-amp

Input-referred random offset của một cặp vi sai gồm hai phần: mismatch của chính cặp input, cộng mismatch của cặp tải quy về đầu vào (chia cho gain của tầng, tức nhân gm,load/gm,ing_{m,\text{load}}/g_{m,\text{in}}):

σ2(Vos)=σ2(ΔVth,in)input pair+(gm3gm1)2σ2(ΔVth,load)load, ref. to input+(Vov12)2σ2 ⁣(Δββ)β\sigma^2(V_{os}) = \underbrace{\sigma^2(\Delta V_{th,\text{in}})}_{\text{input pair}} + \underbrace{\left(\frac{g_{m3}}{g_{m1}}\right)^2\sigma^2(\Delta V_{th,\text{load}})}_{\text{load, ref. to input}} + \underbrace{\left(\frac{V_{ov1}}{2}\right)^2\sigma^2\!\left(\frac{\Delta\beta}{\beta}\right)}_{\beta}

Lấy thẳng sizing từ bài op-amp: input pair W1L1=4.37×0.5=2.19 μm2W_1L_1 = 4.37\times0.5 = 2.19\ \mu\text{m}^2, tải W3L3=1.66×1.0=1.66 μm2W_3L_3 = 1.66\times1.0 = 1.66\ \mu\text{m}^2, và gm3/gm1=0.83g_{m3}/g_{m1}=0.83. Với AVtp=5A_{V_{tp}}=5, AVtn=4A_{V_{tn}}=4 mV·µm:

Thành phầnTínhGiá trị
σ(ΔVth)\sigma(\Delta V_{th}) cặp input5/2.195/\sqrt{2.19}3.38 mV
σ(ΔVth)\sigma(\Delta V_{th}) cặp tải4/1.664/\sqrt{1.66}3.10 mV
— quy về input×0.83\times\,0.832.58 mV
β\beta term(Vov1/2)Aβ/W1L1(V_{ov1}/2)\cdot A_\beta/\sqrt{W_1L_1}0.85 mV
σ(Vos)\sigma(V_{os}) tổngcăn bậc hai tổng bình phương4.3 mV
Phân rã offset: input Vth, load Vth, beta, cộng bình phương ra 4.3 mV

Ba điều rút ra ngay:

VthV_{th} áp đảo (98%), β\beta chỉ 20%. Ở process hiện đại và mức đảo vừa, mismatch VthV_{th} gần như luôn thống trị. Nên khi ước lượng nhanh, tính mỗi VthV_{th} term là đủ sát.

Cặp tải đóng góp gần bằng cặp input (2.58 so với 3.38 mV), dù nó không phải tầng vào. Vì gm3/gm1=0.83g_{m3}/g_{m1}=0.83 gần 1 — mirror load “nói to” gần bằng input pair. Muốn tải im hơn thì phải hạ gm3/gm1g_{m3}/g_{m1}, mà cái đó lại đụng gain.

Con số cuối: σ(Vos)=4.3\sigma(V_{os}) = 4.3 mV, tức 2.4 LSB. Và đây là con offset 1σ1\sigma. Thiết kế phải chịu được ±3σ\pm3\sigma để có yield: ±13\pm13 mV = ±7.4\pm7.4 LSB.

Đặt cạnh mọi thứ bài kT/C đã tính cho đúng con ADC này:

Nguồn lỗiGiá trịTheo LSBLoại
Offset random (1σ1\sigma)4336 µV2.47 LSBDC / cố định mỗi chip
Quantization σq\sigma_q507 µV0.29 LSBsàn, không bỏ được
Buffer op-amp noise140 µV0.08 LSBRMS mỗi mẫu
kT/C @ 5 pF28.8 µV0.016 LSBRMS mỗi mẫu

Offset to hơn cả quantization noise 8.5 lần, hơn kT/C 150 lần. Nếu chỉ nhìn bảng này bạn sẽ kết luận con ADC hỏng bét. Mục 6 sẽ giải thích vì sao không.


4. Luật √area: giảm một nửa, trả gấp bốn

σ1/WL\sigma \propto 1/\sqrt{WL}, muốn offset nhỏ đi kk lần thì diện tích phải lớn lên k2k^2 lần. Đây là đòn bẩy duy nhất cho random offset, và nó tàn nhẫn:

Muốn σ(Vos)\sigma(V_{os})Cần W1L1W_1L_1So với hiện tại
4.3 mV (hiện tại)2.2 µm²×1
2.2 mV (1.2 LSB)8.7 µm²×4
1.1 mV (0.6 LSB)35 µm²×16
1.0 mV (0.57 LSB)41 µm²×19
Luật căn area: offset vs diện tích, mỗi lần giảm nửa phải tăng 4 lần diện tích

Kéo offset từ 4.3 xuống 1 mV là phóng input pair lên 19 lần diện tích — mà mới chỉ tới 0.57 LSB, vẫn chưa đủ nhỏ so với chuẩn 0.5 LSB. Đây là lý do không ai kéo offset xuống bằng diện tích một mình khi cần độ chính xác cao; đến một mức nào đó phải chuyển sang calibration (mục 6).

Nhưng có một an ủi, và nó nối thẳng vào bài op-amp. Nhớ mục 9 bài đó: flicker noise cũng 1/(WL)\propto 1/(WL), và việc chọn L=1.0L=1.0 µm cho tải (vì gain) đã phóng W3L3W_3L_3 lên, cắt flicker “miễn phí”. Offset cũng 1/WL\propto 1/\sqrt{WL} — nên cùng một diện tích đó cũng đang bình quân offset xuống.

Diện tích input pair là một khoản đầu tư ba-trong-một: gain (qua LL), flicker noise, và random offset đều được trả cùng lúc. Khi bạn phóng W1L1W_1L_1 vì một lý do, hai cái kia hưởng ké. Đó là lý do “input pair to” gần như luôn đúng ở mạch cần chính xác.


5. Mismatch KHÔNG phải một corner

Đây là mục mình muốn viết nhất, vì nó là lỗi tư duy mình thấy nhiều nhất ở người mới.

Bài op-amp gộp “mismatch” chung câu với “SS corner” khi nói “vẫn cần sim xác nhận”. Nghe thì hợp lý, nhưng nó gài một hiểu lầm: rằng chạy corner sim là sẽ thấy mismatch. Không.

PVT corner (SS/TT/FF, nhiệt độ, áp nguồn) là các góc của một hộp tất định: mọi transistor trên chip cùng trượt về một phía — SS thì tất cả VthV_{th} cùng tăng. Đó là biến động toàn cục và tương quan.

Mismatch là chuyện khác hẳn: hai transistor cạnh nhau, cùng corner, lệch nhau ngẫu nhiên. Nó là một trục thống kê vuông góc với trục PVT. Chạy hết SS/TT/FF vẫn cho ra offset = giá trị systematic (thường ~0), vì trong mỗi corner hai nhánh vẫn khớp. Cái ±13\pm13 mV kia không nằm trên bất kỳ corner nào — nó chỉ hiện ra khi bạn cho mỗi transistor một VthV_{th} random riêng, tức Monte Carlo.

Trục PVT corner vuông góc trục thống kê Monte Carlo — corner không thấy spread mismatch

Chạy corner để bắt mismatch là tìm chìa khoá dưới cột đèn. Corner cho bạn 3–5 điểm tất định; mismatch cần một đám mây Monte Carlo vài trăm điểm và bạn đọc ±3σ\pm3\sigma của phân bố đó. Hai loại sim trả lời hai câu hỏi khác nhau — và không thay thế nhau được.

Thực tế thiết kế: bạn cần cả hai. Corner cho worst-case tất định (GBW ở SS, ICMR ở lạnh — bài op-amp mục 11). Monte Carlo cho spread thống kê (offset, DNL). Một con chip phải sống ở giao của hai trục: SS corner đồng thời 3σ-3\sigma mismatch. Đó mới là góc thật sự tệ nhất.


6. 4.3 mV có đáng sợ không? — offset hằng số vs mismatch phần tử

Giờ quay lại con số làm bạn hoảng ở mục 3. Offset 2.42.4 LSB, to hơn mọi noise. Vì sao con ADC vẫn sống?

một offset hằng số chỉ dịch cả đường đặc tuyến, không làm méo nó. Con op-amp buffer có offset 4 mV nghĩa là mọi mẫu nó lấy đều bị cộng thêm đúng 4 mV — mẫu nào cũng vậy, không đổi. Trên đường transfer của ADC, đó là một phép dịch ngang toàn bộ, không phải bẻ cong — nên DNL, INL và số bit hữu dụng (ENOB) đều không đổi.

Và một lỗi cố định thì đo được rồi trừ đi: SAR ADC thường có sẵn cơ chế xử lý offset — một chu kỳ auto-zero, một mã hiệu chỉnh trong digital, hoặc đơn giản là spec offset riêng và trim. Đây là điểm khác căn bản với noise:

Offset (random mismatch)Noise (kT/C, thermal, flicker)
Thay đổi giữa các mẫu?Không — cố định mỗi chip — mỗi mẫu một giá trị
Làm méo transfer?Không, chỉ dịchKhông, nhưng thêm bất định mỗi lần đọc
Bỏ được không?Được — đo rồi trừ (calib)Không — không đo trước được cái ngẫu nhiên mỗi mẫu
Offset hằng số dịch đường transfer (calib được) vs mismatch phần tử CDAC gây răng cưa DNL

Đó là nghịch lý: offset là lỗi to nhất về biên độ nhưng nhẹ nhất về hậu quả, vì nó là thứ duy nhất trong bảng bạn đo trước và trừ đi được. Noise thì nhỏ hơn 150 lần nhưng bạn phải chịu nó nguyên vẹn, vì không ai đoán được giá trị ngẫu nhiên của mẫu tiếp theo.

Lặp lại đúng khuôn của bài kT/C: con số to nhất trong bảng không phải là ràng buộc. kT/C nói “5 pF là do CDAC, không phải noise”. Mismatch nói “4 mV offset là thứ dễ tha nhất, không phải thứ giết bạn”. Trong cả hai, thủ phạm thật đều im lặng hơn con số đập vào mắt.


7. Cái thật sự ép số bit: matching CDAC

Nếu offset comparator/buffer calib được, vậy mismatch nào không calib rẻ được, và thật sự đặt trần cho số bit? Là mismatch giữa các phần tử tụ trong CDAC — vì nó gây DNL/INL, tức làm méo đường transfer chứ không chỉ dịch, và không có một con số đơn để trừ.

Với mảng nhị phân, DNL tệ nhất xảy ra ở bước chuyển MSB (0111…1 → 1000…0), nơi nguyên nửa mảng tắt và nửa kia bật:

σ(DNL)max=2N1  σ(Cu)Cu[LSB]\sigma(\text{DNL})_{\max} = \sqrt{2^N - 1}\;\frac{\sigma(C_u)}{C_u} \quad[\text{LSB}]

Với N=10N=10: 102332\sqrt{1023}\approx 32. Muốn 3σ(DNL)<0.53\sigma(\text{DNL}) < 0.5 LSB (không mất mã):

σ(Cu)Cu<0.53×32=0.52%\frac{\sigma(C_u)}{C_u} < \frac{0.5}{3\times 32} = \mathbf{0.52\%}

Và matching tụ cũng theo luật căn diện tích, σ(Cu)/Cu=AC/area\sigma(C_u)/C_u = A_C/\sqrt{\text{area}}. Với AC1%A_C\approx 1\%·µm, để đạt 0.52% cần area unit cap >3.7 μm2> 3.7\ \mu\text{m}^2 — với mật độ MIM ~1.5 fF/µm² thì đó là:

Cu5.5 fFC_u \gtrsim 5.5\ \text{fF}

Đây chính là mảnh còn thiếu của bài kT/C. Bài đó khẳng định ”CuC_u bị chặn dưới bởi matching, khoảng vài fF” và dùng con thực tế 4.88 fF — nhưng không tính. Đây là phép tính đó. Con 5.5 fF ở trên là với ACA_C và mật độ ví dụ (1%·µm, 1.5 fF/µm²); đổi PDK là xê dịch, nên nó cùng cỡ với 4.88 fF thực tế — cả hai đều nói “matching ép CuC_u lên vài fF, và Cs=1024Cu5C_s = 1024\,C_u \approx 5 pF”. Cùng một luật 1/area1/\sqrt{\text{area}} vừa quyết định offset của op-amp, giờ quyết định CsC_s của cả ADC — và nó là ràng buộc thật, vì DNL không calib bằng một con số như offset.

Ba thứ trong con ADC này đều bị cùng một định luật Pelgrom cai trị: offset input pair, flicker của op-amp, và unit cap của CDAC. Khác nhau ở chỗ offset thì calib được nên area\sqrt{\text{area}} không phải trần cứng, còn DNL thì không — nên chính matching CDAC, chứ không phải offset hay noise, mới là thứ đặt con số 5 pF và giới hạn 10-bit.


8. Bài học

Systematic offset thiết kế về 0 được; random offset thì không. Bài op-amp ép VDSV_{DS} khớp để zero vế systematic bằng một dòng. Vế random là biến ngẫu nhiên — chỉ bình quân xuống bằng diện tích, hoặc đo rồi trừ. Đừng kỳ vọng một mẹo topology nào khử được nó.

Offset đi theo 1/area1/\sqrt{\text{area}} — đắt. Giảm một nửa phải trả gấp bốn diện tích. Nhưng khoản đó trả chung cho gain (qua L) và flicker noise, nên “input pair to” thường đúng vì ba lý do một lúc.

Mismatch không phải một PVT corner. Chạy SS/TT/FF không bao giờ thấy nó — corner là trục tất định, mismatch là trục thống kê vuông góc. Cần Monte Carlo và đọc ±3σ\pm3\sigma. Con chip thật phải sống ở giao của cả hai trục: SS corner 3σ-3\sigma mismatch.

Con số to nhất không phải ràng buộc to nhất. Offset 4.3 mV (2.4 LSB) áp đảo mọi noise, nhưng vì nó là hằng số, nó dịch chứ không méo, và calib được — thành lỗi dễ tha nhất. Thứ thật sự đặt trần 10-bit là matching CDAC (σ(Cu)/Cu<0.52%\sigma(C_u)/C_u < 0.52\%), vì DNL thì không trừ bằng một con số.

Khi ai đó chỉ vào offset và đòi làm input pair thật to, hãy hỏi lại: con này có calib offset không? Nếu có, diện tích đó nên dồn cho matching CDAC — nơi area\sqrt{\text{area}} là trần cứng thật sự.


Tổng kết

  • σ(Vos)\sigma(V_{os}) của con op-amp = 4.3 mV = 2.4 LSB, do VthV_{th} mismatch của input pair và load (β chỉ ~20%). ±3σ=±13\pm3\sigma = \pm13 mV.
  • Offset đi theo 1/area1/\sqrt{\text{area}}: giảm nửa = ×4 diện tích. Cùng khoản diện tích đó trả luôn cho gain và flicker.
  • Mismatch là trục thống kê vuông góc với PVT corner — Monte Carlo, không phải SS/TT/FF. Lỗi tư duy phổ biến nhất về mismatch.
  • Offset to nhưng calib được (dịch, không méo) → lỗi dễ tha nhất. Thứ thật sự giới hạn 10-bit là matching CDAC: σ(Cu)/Cu<0.52%\sigma(C_u)/C_u < 0.52\%Cu5C_u \gtrsim 5 fF → khớp đúng con 5 pF của bài kT/C.

Tham khảo

  • Pelgrom, M. J. M., Duinmaijer, A. C. J., Welbers, A. P. G., “Matching properties of MOS transistors”, IEEE JSSC, 1989 — bài gốc của định luật σA/WL\sigma \propto A/\sqrt{WL}. Nguồn của mọi con số matching trong bài.

  • Razavi, B., Design of Analog CMOS Integrated Circuits, 2nd ed., Chương 14 (Mismatch) + Chương 19 — offset của cặp vi sai, phân rã VthV_{th} vs β\beta, và vì sao mismatch cần Monte Carlo chứ không phải corner.

  • Baker, R. J., CMOS Circuit Design, Layout, and Simulation, 4th ed. — matching layout (common-centroid, guard ring), và DNL/INL của charge-redistribution DAC theo σ(Cu)/Cu\sigma(C_u)/C_u. Website: cmosedu.com.

  • Bài two-stage Miller op-amp — nguồn sizing input pair/load; nơi systematic offset được ép về 0 và random offset bị gạt sang “để sim”.

  • Bài kT/C noise — cùng con SAR ADC; bài này tính ra con số matching Cu5C_u \gtrsim 5 fF mà bài kT/C mới chỉ khẳng định.