Gương dòng mismatch: sách cho công thức, layout mới cho con số
Razavi cho bạn công thức sai số gương dòng, Baker cho bạn danh sách luật layout. Mình dựng đúng một con gương 1:1 bốn kiểu trên sky130, tất cả DRC=0, rồi PEX ra số: sai số nhảy từ −26% xuống +1.3% chỉ vì cách vẽ. Và luật common-centroid thì sim nominal không hề thấy.
Không spam. Chỉ bài kỹ thuật AMS đáng đọc — gửi qua email khi có bài mới.
Có một dạng bài trong Razavi và Baker mà ai học analog cũng gặp: cho một gương dòng 1:1, ước lượng sai số copy. Lời giải trên giấy gọn gàng — một số hạng do channel-length modulation (), cỡ một vài phần trăm, cộng một chút random mismatch mà ta quen gạt sang “để Monte Carlo lo”. Xong. Sách khép lại phần đó và nhắc thêm mấy luật layout: để device gần nhau, dùng common-centroid, thêm dummy. Nghe như lời khuyên đạo đức hơn là con số.
Mình muốn biết mấy luật “đạo đức” đó đáng bao nhiêu phần trăm, nên dựng đúng một con gương 1:1 đó bốn kiểu layout khác nhau trên sky130 — cùng một netlist, cùng transistor, cả bốn đều qua DRC sạch — rồi extract ký sinh (PEX) và mô phỏng. Kết quả không nằm trong khoảng “một vài phần trăm” của lời giải giấy:
Cùng một sơ đồ, sai số trượt từ −26% xuống +1.3%, hơn hai mươi bảy điểm phần trăm, chỉ vì cách đặt hình và đi dây. DRC không thấy gì khác biệt giữa chúng, LVS cũng vậy — cả bốn đều “đúng” theo mọi thứ tool signoff kiểm được. Bài này đi qua bốn con số đó: chỗ nào là công thức trong sách hiện ra thật, chỗ nào là thứ sách chỉ dám gọi là “luật ngầm”, và vì sao có một luật quan trọng mà ngay cả sim nominal cũng không nhìn thấy.
Mục lục
- Công thức trong sách
- Cùng schematic, bốn layout, DRC=0 hết
- Mổ −26%: IR-drop và cái R không hề bịa
- Cái sàn không vượt được: số hạng λ
- Common-centroid: luật mà sim nominal không thấy
- Vì sao signoff mù chuyện này
- Bài học
Công thức trong sách
Gương dòng đơn 1:1: một transistor M1 nối diode làm tham chiếu, một M2 copy dòng ra tải. Nếu hai con giống hệt nhau và cùng , dòng phải bằng nhau. Sách cho bạn hai lý do khiến chúng không bằng.
Thứ nhất là channel-length modulation — M1 và M2 hiếm khi có cùng . M1 nối diode nên , còn M2 gánh điện áp mà tải áp vào. Razavi viết tỉ số dòng ra dưới dạng
Đây là số hạng hệ thống, tính được, và ở một gương không cascode nó thường là vài phần trăm. Thứ hai là random mismatch giữa hai device — chênh và chênh do sai số chế tạo, gói trong công thức Pelgrom:
Phần random này mình đã tách riêng ở bài mismatch/Monte Carlo — nó là biến ngẫu nhiên, giảm bằng cách tăng diện tích, và bài hôm nay không đụng tới nó. Cái mình quan tâm là phần còn lại: sau khi bạn đã chọn device đủ to để random mismatch nhỏ, thì layout quyết định phần hệ thống ra bao nhiêu. Và ở đây sách đổi giọng, từ phương trình sang danh sách lời khuyên. Baker và Hastings dành hẳn nhiều chương cho nó: đặt device sát nhau để gradient process tuyến tính triệt bớt, xen kẽ common-centroid quanh một trọng tâm chung, bọc dummy hai biên, giữ dây của hai nhánh đối xứng về R và C. Đúng, hữu ích, nhưng không có con số nào đi kèm. Bạn học thuộc phương trình rồi coi phần layout như văn hoá truyền miệng.
Cách duy nhất để gắn số vào văn hoá truyền miệng là dựng nó ra và đo.
Cùng schematic, bốn layout, DRC=0 hết
Device là con sky130_fd_pr__nfet_01v8, , , có guard ring sẵn trong PCell. Testbench cố định: bơm vào nhánh diode, nút ra giữ ở , nguồn . Netlist gương thì bốn bản y hệt nhau — cùng hai transistor, cùng cách nối. Khác biệt duy nhất nằm ở lớp và hình học của dây, tức là ở layout:
- Rail dài 20 µm — nút nguồn chung của hai transistor chạy bằng một dải li1 (lớp local-interconnect) rộng tối thiểu, dài 20 µm. Mình cố tình làm xấu để cô lập một cơ chế.
- Compact — hai device kề sát nhau ở khoảng cách nhỏ nhất DRC cho phép (2.40 µm), nút nguồn đi bằng một đoạn met2 thẳng và ngắn nhất có thể.
- Common-centroid 6-device rời — chẻ mỗi transistor thành hai finger , xếp hàng dummy–A–B–B–A–dummy, sáu device rời nhau, đúng bài common-centroid trong sách.
- Abut nf=4 — cũng ABBA nhưng dùng một PCell bốn finger chung một vùng diffusion và một guard ring duy nhất, cộng dummy hai đầu. Đây là bản “làm đúng mọi luật”.
Cả bốn đều nạp vào magic, chạy full DRC deck của sky130 ra 0 lỗi, và kiểm kết nối bằng KLayout LayoutToNetlist độc lập với bước extract để chắc chắn các net không lẫn nhau. Rồi extract cả điện trở lẫn điện dung ký sinh thành netlist SPICE và cho ngspice chạy với model tt. Không có bước nào ở đây là ước lượng — con số ra là con số của layout thật.
Hai bản “tốt” trông thế này (render thẳng từ KLayout, các hình layout trong bài đều cùng một tỉ lệ để dễ so khoảng cách):
Bản compact — hai device kề sát 2.4 µm, nút nguồn là một cầu met2 ngắn. Sai số −0.15%.
Bản abut nf=4 — bốn finger chung một dải diffusion, drain-source dùng chung, chỉ một vòng guard ring, dummy hai đầu. Sai số +1.27%.
Cả hai đều gọn, nhưng bản abut “đối xứng” và chặt hơn hẳn — và số cũng nói vậy. Hai bản còn lại (rail dài và common-centroid rời) xuất hiện ở các mục dưới, cùng tỉ lệ để bạn so trực tiếp kích thước.
Mổ −26%: IR-drop và cái R không hề bịa
Con số tệ nhất, −26%, đến từ bản rail dài, và cơ chế của nó thuần điện chứ không dính gì tới mismatch device. Đây là layout đó — hai device bị đẩy xa nhau 20 µm, cái dải li1 chạy ngang nối nguồn hai bên chính là thủ phạm:
Bản rail dài 20 µm — hai device bị đẩy xa nhau, dải li1 nguồn chạy ngang suốt giữa. Sai số −26%. (Cùng tỉ lệ với bản compact ở trên — để ý nó rộng gấp mấy lần.)
Đặt cạnh bản compact ở trên — nơi hai device kề sát và nút nguồn chỉ là một đoạn met2 ngắn — thì khác biệt hình học đập ngay vào mắt, dù netlist hai bản y hệt. Cơ chế điện của cái rail dài đó thế này:
Nút nguồn chung không thật sự là một điểm — nó là một dải kim loại có điện trở. Trong bản rail dài, đoạn li1 nối từ nguồn M2 về điểm nối đất (ở gần nguồn M1) dài 20 µm. Dòng của M2 phải chảy hết qua đoạn đó, và điện trở của nó nâng điện thế nguồn M2 lên khỏi 0. Nguồn M2 bị “kê” cao hơn nguồn M1 một chút, nên với cùng điện áp cổng, nhỏ hơn , và dòng sụp theo .
Điểm đáng nói là cái điện trở đó không phải mình bịa ra. sky130 ghi sheet resistance của li1 là . Dải dài 20 µm rộng tối thiểu 0.17 µm là khoảng 117 ô vuông, nên
và khi để magic tự extract do resistance trên chính dải đó, nó trả về 1506 Ω — khớp tới từng ohm. Đây là chỗ mình thích nhất của thí nghiệm: con ký sinh giết 26% dòng là một đại lượng bạn tính được bằng tay từ luật PDK, trước cả khi mở simulator. Ước lượng tay kiểu-sách cho một rail lý tưởng 1.5 kΩ ra sai số quanh −28%; PEX toàn mạch với mạng R phân bố thật (không phải một điện trở gộp) cho −26.0%. Giấy và layout gặp nhau ở đúng cỡ độ lớn.
Và đây cũng là lý do bản compact với bản abut tốt hơn hẳn: chúng giữ nút nguồn ngắn. Đoạn rail của bản compact chỉ còn khoảng 54 Ω, so với hơn 1 kΩ của bản rail dài — hơn hai mươi lần nhỏ hơn, nên IR-drop gần như biến mất. Luật “dây matched-node phải ngắn và rộng” trong sách, quy ra số, đáng cỡ hai chục phần trăm dòng.
Cái sàn không vượt được: số hạng λ
Nếu IR-drop là thứ layout tốt dập được, thì có một phần không dập được, và đó chính là số hạng trong công thức Razavi ở đầu bài. Trong testbench này (áp tải) còn . Hai lệch nhau thì channel-length modulation kéo dòng ra lệch khỏi tham chiếu, bất kể bạn vẽ layout đẹp đến đâu.
Đo riêng phần này — extract không kèm ký sinh để tắt hết IR-drop — ra sai số +1.39%. Đút vào công thức thì nó ứng với , đúng cỡ mong đợi cho . Đây là cái sàn: một gương đơn không cascode ở process này không thể chính xác hơn ~1.4% chỉ nhờ layout, vì lỗi đó là topology chứ không phải hình học. Muốn xuống thấp hơn thì phải đổi mạch — thêm cascode để ghì về gần — chứ không phải đổi cách vẽ.
Bản abut đạt +1.27%, gần như chạm sàn lý thuyết. Nó gần như đã vắt kiệt mọi thứ layout có thể làm: ký sinh routing bị triệt nhờ abutment (dùng chung diffusion, chỉ một guard ring, dây nguồn cực ngắn), nên cái còn lại đúng bằng phần topology không tránh được. Đó là định nghĩa của một layout gương dòng làm đúng — không phải “sai số bằng 0”, mà “sai số bằng đúng cái sàn mà mạch cho phép, không cõng thêm gì từ hình học”.
Common-centroid: luật mà sim nominal không thấy
Đến đây có một chuyện lật ngược trực giác, và nó là lý do chính khiến mình muốn viết bài này. Bản common-centroid 6-device rời trông thế này — mỗi transistor chẻ đôi thành finger , xếp hàng dummy–A–B–B–A–dummy, sáu device có guard ring riêng, nối nhau bằng hai rail met2 chạy ngang:
Bản common-centroid 6-device rời — hàng D–A–B–B–A–D, sáu guard ring riêng, hai rail met2 ngang nối chung. Sai số −2…−5%.
Nhìn lại bar chart: bản này ra −2 đến −5%, tức là tệ hơn bản compact chỉ −0.15%. Common-centroid là luật matching danh giá nhất trong sách, sao nó lại thua một bản chỉ đặt hai device cạnh nhau? Và bản compact −0.15% kia, có phải nó matching giỏi không?
Không. Con −0.15% của bản compact là may rủi — IR-drop nhỏ còn sót (kéo âm) tình cờ gần triệt số hạng (đẩy dương), hai cái khử nhau ra gần 0. Còn bản common-centroid rời thì có nhiều via và dây hơn, nên ký sinh routing của nó lớn hơn, kéo số xuống. Vấn đề sâu hơn nằm ở chỗ: một sim nominal về nguyên tắc không thể thấy lợi ích của common-centroid. Sim nominal dùng một model đồng nhất cho mọi device — không có gradient nào để mà triệt. Cái common-centroid sinh ra để chống lại — gradient tuyến tính của ngang qua die do process và ứng suất — đơn giản không tồn tại trong một điểm DC danh định. Nó chỉ thấy với ký sinh, và về hai khoản đó thì bản CC rời còn thiệt.
Muốn thấy common-centroid làm việc, phải cho nó cái để chống. Mình áp một gradient tuyến tính theo đúng toạ độ x của bốn finger thật, rồi so cách xếp ABBA (common-centroid, trọng tâm M1 trùng trọng tâm M2) với AABB (hai nhóm tách về hai phía):
Ở gradient 4 mV/µm, cách xếp AABB lệch tới 27%, còn ABBA giữ nguyên quanh 0.5% — đúng cái sàn , như thể gradient không tồn tại. Common-centroid triệt thành phần bậc nhất của gradient đúng như lý thuyết hứa. Bài học kép ở đây, và là thứ mình nghĩ đáng nhớ nhất: luật matching có thật, nhưng thí nghiệm sai thì không đo ra nó. Nếu bạn chấm điểm layout bằng một điểm DC nominal, common-centroid trông vô dụng hoặc tệ hơn; giá trị của nó chỉ lộ khi bạn chạy đúng bài — Monte Carlo có gradient, hoặc gradient tất định như trên. Rất nhiều tranh luận “common-centroid có bõ diện tích không” thực ra là tranh luận về việc đã đo đúng cách chưa.
Vì sao signoff mù chuyện này
Gộp lại: cả bốn layout qua DRC sạch và LVS khớp, mà sai số của chúng trải từ −26% tới +1.3%. Không mâu thuẫn gì cả, vì mấy tool đó không kiểm cái này.
DRC kiểm luật hình học — bề rộng, khoảng cách, enclosure. Một dải li1 dài 20 µm hợp lệ y như một dải 1 µm; DRC không có khái niệm “dây này gánh dòng matched nên đừng để nó dài”. LVS kiểm sơ đồ kết nối khớp netlist — bốn layout của mình đều có đúng hai transistor nối đúng cách, nên cả bốn đều pass. Cái quyết định con số — điện trở phân bố trên nút nguồn, trọng tâm của các finger, tính đối xứng của hai nhánh — nằm ở một tầng mà signoff mặc định không chạm tới. Nó là vật lý layout, và bạn chỉ bắt được nó bằng PEX rồi sim, hoặc bằng một cái đầu đã đọc Hastings. Đây đúng là khoảng cách giữa “layout hợp lệ” và “layout analog giỏi”, và toàn bộ cuốn Baker/Hastings sống trong khoảng đó — chỗ mà PDK không hề chứa.
Bài học
- Sai số gương dòng không phải một thuộc tính của schematic — nó là thuộc tính của layout. Cùng một netlist, cùng device, cùng DRC-clean, con số vẫn trượt hơn hai mươi bảy điểm phần trăm tuỳ cách vẽ.
- Số hạng trong công thức là cái sàn topology, không phải hình học. Ở gương đơn sky130 này nó là ~1.4%; layout giỏi nhất chỉ chạm sàn đó (bản abut +1.27%), không xuống thấp hơn được nếu không đổi mạch.
- IR-drop trên nút nguồn là thủ phạm tính được bằng tay. từ sheet resistance của PDK khớp extract tới từng ohm; giữ dây matched-node ngắn đáng cỡ hai chục phần trăm dòng.
- Common-centroid hoạt động thật, nhưng sim nominal không thấy. Lợi ích của nó là triệt gradient bậc nhất — chỉ hiện khi bạn cho nó một gradient để triệt. Chấm layout bằng một điểm DC danh định thì bạn đang đo nhầm thứ.
Nếu định lấy một bài trong sách ra làm cho tới, gương dòng là ứng viên tốt vì nó nhỏ đủ để dựng thật mà vẫn chứa cả ba tầng — công thức tính được, luật ngầm quy ra số, và một cái bẫy đo đạc. Toàn bộ thí nghiệm chạy được rootless trên laptop bằng magic/ngspice/KLayout, không cần Docker hay quyền root.
Tham khảo
-
Razavi, Design of Analog CMOS Integrated Circuits, 2nd ed., Chương 5 (Current Mirrors) — dẫn xuất sai số gương do channel-length modulation, công thức .
-
Baker, CMOS: Circuit Design, Layout, and Simulation, 4th ed. — layout matching cho gương dòng, common-centroid, dummy. Website: cmosedu.com.
-
Hastings, The Art of Analog Layout, 2nd ed. — bảy luật matching kinh điển và các layout-dependent effect (WPE, LOD, STI stress) mà DRC không kiểm.
-
Pelgrom, Duinmaijer, Welbers, “Matching properties of MOS transistors”, IEEE JSSC, 1989 — mô hình random mismatch ; phần này tách riêng ở bài mismatch/Monte Carlo.
-
SkyWater sky130 PDK — sheet resistance li1 và full DRC deck dùng trong thí nghiệm.
Phụ lục: bộ đồ nghề
Cả thí nghiệm dùng đồ mở, và chạy rootless — không Docker, không quyền root — nhờ gói mọi binary qua nix-portable. Mỗi tool một việc rõ ràng, nên nếu bạn muốn tự dựng lại thì đây là ai làm gì:
-
magic — vẽ và sửa layout ở mức transistor, chạy DRC, và extract ký sinh (điện trở + điện dung) từ hình ra netlist SPICE. Con số sai số gương đi ra từ chuỗi magic-extract → ngspice; và chính magic cho ra khớp với tính tay.
-
ngspice — simulator SPICE mã nguồn mở. Mọi mô phỏng dòng gương trong bài (op-point với model sky130 corner
tt) chạy trên đây. -
KLayout — xem/sửa layout, kèm API Python (
pya). Mình dùng nó để ghép layout bằng code (đặt instance PCell, đi dây) và kiểm kết nối bằngLayoutToNetlist— một đường độc lập với magic để chắc các net không lẫn nhau. Mọi hình layout trong bài cũng render từ KLayout, ở cùng một tỉ lệ. -
sky130 PDK — process design kit mở của SkyWater/Google cho node 130nm: model transistor, định nghĩa lớp, và full DRC deck. Mọi luật hình học và con số vật lý (sheet resistance, kích thước tối thiểu) đều đến từ đây.
-
nix-portable — thứ khiến cả bộ trên chạy được trên một laptop remote mà không cần cài đặt hay quyền root: nó kéo binary từ cache Nix và chạy trong sandbox bwrap. Đây là mảnh ghép biến “flow open-EDA” từ thứ cần server có Docker thành thứ chạy được ngay trên máy cá nhân.