Line Coding: NRZ, PAM4, 8b/10b¶
Mã hóa đường truyền (line coding) là bước biến chuỗi bit thành dạng tín hiệu điện hoặc quang để truyền trên dây, đường mạch PCB hoặc sợi quang. Trang này trình bày line coding ở mức PHY của chip và SerDes, theo thứ tự: các yêu cầu mà line coding phải đáp ứng, các line code dạng mức tín hiệu (NRZ, NRZI, Manchester, AMI, PAM4), các mã khối (8b/10b, 64b/66b, 128b/130b), vị trí của chúng trong một đường SerDes, và bảng tổng hợp theo chuẩn giao tiếp. Mã hóa kênh để sửa lỗi (FEC) trong vô tuyến được trình bày riêng ở Channel Coding (LDPC, Polar).
Phân biệt với mã hóa kênh¶
Line coding và mã hóa kênh (channel coding) thường bị gọi chung là "mã hóa", nhưng giải quyết hai vấn đề khác nhau. Line coding làm cho tín hiệu phù hợp với đặc tính vật lý của đường truyền, còn mã hóa kênh thêm bit dư thừa để bên thu phát hiện và sửa được lỗi bit.
| Line coding | Mã hóa kênh (FEC) | |
|---|---|---|
| Mục đích | Tạo dạng tín hiệu phù hợp với đường truyền | Phát hiện và sửa lỗi bit |
| Vấn đề giải quyết | Thành phần DC, khôi phục clock, băng thông, nhận biết ranh giới khối | Lỗi do nhiễu, suy hao, fading |
| Ví dụ | NRZ, NRZI, Manchester, AMI, PAM4, 8b/10b, 64b/66b | Hamming, Reed-Solomon, BCH, LDPC, Polar |
| Nơi gặp | SerDes, PCIe, Ethernet PHY, USB, UART, CAN | Vô tuyến, lưu trữ (ECC của NAND), Ethernet và PCIe tốc độ cao |
Hai kỹ thuật có thể dùng cùng lúc trên một đường truyền. Ethernet 400G và PCIe 6.0 dùng PAM4 (line coding) kết hợp với FEC.
Yêu cầu đối với line coding¶
Một line code được chọn dựa trên các yêu cầu sau:
- Khôi phục clock (clock recovery): các đường SerDes tốc độ cao không truyền clock riêng. Bên thu dùng mạch khôi phục clock và dữ liệu (Clock and Data Recovery, CDR) để suy ra clock từ các cạnh chuyển mức của tín hiệu. Một chuỗi dài bit giống nhau không tạo cạnh nào làm CDR mất khóa pha. Độ dài lớn nhất của chuỗi bit giống nhau gọi là run length.
- Cân bằng DC (DC balance): nhiều đường truyền ghép AC qua tụ hoặc biến áp, nên không truyền được thành phần một chiều. Nếu số bit 1 và bit 0 lệch nhau lâu, mức trung bình của tín hiệu trôi dần (baseline wander) và bên thu đặt sai ngưỡng quyết định.
- Hiệu suất băng thông: số bit truyền được trên mỗi Hz băng thông của kênh. Line code thêm cạnh chuyển mức hoặc bit phụ sẽ tốn thêm băng thông.
- Overhead: tỷ lệ bit phụ so với bit dữ liệu của mã khối, ảnh hưởng trực tiếp tới tốc độ hữu ích.
- Đồng bộ khối: bên thu cần biết ranh giới của từng ký tự hoặc từng khối trong luồng bit nối tiếp.
Các line code dạng mức tín hiệu¶
Hình dưới biểu diễn cùng một chuỗi bit bằng bốn line code. Đường clock ở trên cùng chỉ dùng để đánh dấu chu kỳ bit, không được truyền đi.
NRZ¶
NRZ (Non-Return-to-Zero) gán bit 1 cho một mức điện áp và bit 0 cho mức còn lại. Tín hiệu giữ nguyên mức trong suốt chu kỳ bit, không quay về 0 giữa chu kỳ, nên có tên như vậy. Đây là cách mã hóa đơn giản nhất và có hiệu suất băng thông tốt: tần số cơ bản lớn nhất bằng một nửa tốc độ bit, xảy ra khi bit 0 và bit 1 xen kẽ.
Nhược điểm của NRZ là không bảo đảm cạnh chuyển mức và không cân bằng DC. Trong hình, ba bit 0 liên tiếp tạo ra một đoạn tín hiệu phẳng. Vì vậy NRZ thường đi kèm một cơ chế bổ sung: bit start và stop trong UART, bit stuffing trong CAN, mã khối hoặc scrambler trong SerDes.
NRZ còn được gọi là PAM2 (Pulse Amplitude Modulation hai mức) khi đặt cạnh PAM4. Có hai biến thể: NRZ unipolar dùng mức 0 V và +V, NRZ polar dùng −V và +V. Đường vi sai (differential) như LVDS hay CML về bản chất là NRZ polar trên hai dây.
NRZI¶
NRZI (Non-Return-to-Zero Inverted) mã hóa bit bằng sự thay đổi mức thay vì bằng bản thân mức. Theo quy ước trong hình, bit 1 làm tín hiệu đổi mức ở đầu chu kỳ và bit 0 giữ nguyên mức. USB 2.0 dùng quy ước ngược lại: bit 0 đổi mức, bit 1 giữ mức.
Ưu điểm của NRZI là không phụ thuộc cực tính: đảo ngược hai dây của cặp vi sai không làm sai dữ liệu. NRZI vẫn có chuỗi không có cạnh chuyển mức (chuỗi bit giữ mức), nên USB 2.0 thêm bit stuffing: sau sáu bit 1 liên tiếp, bên phát chèn một bit 0 để buộc tín hiệu đổi mức.
Manchester¶
Manchester đặt một cạnh chuyển mức ở giữa mỗi chu kỳ bit, hướng của cạnh xác định giá trị bit. Theo IEEE 802.3, bit 1 là cạnh lên (thấp lên cao) và bit 0 là cạnh xuống. Một số tài liệu khác dùng quy ước ngược lại, nên cần kiểm tra quy ước của chuẩn cụ thể.
Vì mỗi bit có ít nhất một cạnh, clock nằm sẵn trong tín hiệu và CDR luôn khóa được pha. Mỗi bit cũng có nửa chu kỳ ở mức cao và nửa chu kỳ ở mức thấp, nên tín hiệu cân bằng DC. Cái giá là băng thông: tần số cơ bản lớn nhất bằng tốc độ bit, gấp đôi NRZ. Manchester được dùng ở 10BASE-T Ethernet, nơi tốc độ thấp nên băng thông không phải giới hạn chính.
AMI và các biến thể¶
AMI (Alternate Mark Inversion) là mã ba mức: bit 0 là 0 V, các bit 1 luân phiên giữa +V và −V. Vì các xung +V và −V xen kẽ, tín hiệu cân bằng DC. Việc vi phạm quy tắc luân phiên cũng giúp bên thu phát hiện một phần lỗi bit.
Chuỗi bit 0 dài vẫn làm mất cạnh chuyển mức, nên đường T1 dùng biến thể B8ZS và đường E1 dùng HDB3. Hai biến thể này thay một chuỗi 8 hoặc 4 bit 0 bằng một mẫu xung cố ý vi phạm quy tắc luân phiên, để bên thu nhận ra và khôi phục lại chuỗi 0 ban đầu.
PAM4¶
PAM4 dùng bốn mức biên độ, mỗi symbol mang 2 bit. Ở cùng tốc độ symbol (baud rate), PAM4 truyền được gấp đôi số bit so với NRZ, hay nói cách khác, cùng tốc độ bit thì PAM4 chỉ cần một nửa băng thông. Đây là lý do PAM4 được chọn khi suy hao của đường mạch PCB ở tần số cao làm NRZ khó tăng tốc thêm.
Bốn mức được gán theo mã Gray (00, 01, 11, 10), để hai mức kề nhau chỉ khác nhau một bit: khi nhiễu làm bên thu nhầm sang mức kề bên, chỉ một bit bị lỗi.
Nhược điểm của PAM4 nằm ở biên độ. Với cùng biên độ đỉnh, khoảng cách giữa hai mức kề nhau chỉ bằng 1/3 so với NRZ, tương ứng mất khoảng 9,5 dB (20·log10(3)) về tỷ số tín hiệu trên nhiễu (SNR). Tỷ lệ lỗi bit thô của đường PAM4 vì vậy cao hơn NRZ, nên các chuẩn dùng PAM4 đều bắt buộc kèm FEC: Reed-Solomon RS(544,514) trong Ethernet 200G/400G, FEC nhẹ kết hợp CRC trong PCIe 6.0.
Mã khối¶
Mã khối (block code) ánh xạ mỗi nhóm m bit dữ liệu thành một từ mã n bit, với n > m. Các từ mã được chọn để bảo đảm có đủ cạnh chuyển mức, cân bằng DC và có cách nhận biết ranh giới khối. Mã khối hoạt động ở tầng logic, đầu ra của nó vẫn được truyền đi bằng NRZ hoặc PAM4.
8b/10b¶
8b/10b ánh xạ mỗi byte dữ liệu thành một ký tự 10 bit. Mã này do Widmer và Franaszek tại IBM công bố năm 1983, và có các tính chất sau:
- Run length tối đa 5: không có quá năm bit giống nhau liên tiếp, kể cả qua ranh giới giữa hai ký tự.
- Running disparity: mỗi byte có thể có hai từ mã, một từ nghiêng về bit 1 và một từ nghiêng về bit 0. Bên phát theo dõi độ chênh lệch tích lũy giữa số bit 1 và bit 0 rồi chọn từ mã để kéo độ chênh lệch về 0, nhờ đó tín hiệu cân bằng DC.
- Ký tự điều khiển (K-character): ngoài 256 ký tự dữ liệu (D-character), mã có thêm 12 ký tự điều khiển. Ký tự K28.5 chứa chuỗi bit "comma" không xuất hiện trong bất kỳ tổ hợp ký tự dữ liệu nào, nên bên thu dùng nó để căn ranh giới ký tự.
- Phát hiện lỗi: từ mã không hợp lệ hoặc sai running disparity cho biết đường truyền có lỗi.
Overhead của 8b/10b là 25% so với dữ liệu, tức chỉ 80% tốc độ đường truyền là dữ liệu hữu ích. PCIe 2.0 chạy ở 5 GT/s nhưng tốc độ dữ liệu mỗi lane chỉ là 4 Gbit/s.
64b/66b và 128b/130b¶
Khi tốc độ tăng lên hàng chục Gbit/s, overhead 25% trở nên quá đắt. Các mã khối thế hệ sau đổi cách tiếp cận: thêm một header ngắn cho mỗi khối dữ liệu lớn, và dùng scrambler để tạo cạnh chuyển mức thay vì chọn từ mã.
- 64b/66b (Ethernet 10GBASE-R trở lên): mỗi khối 64 bit có thêm header 2 bit, giá trị 01 cho khối dữ liệu và 10 cho khối điều khiển. Hai giá trị 00 và 11 không hợp lệ, nên header luôn có một cạnh chuyển mức và bên thu dùng nó để tìm ranh giới khối. Phần 64 bit được trộn bằng scrambler tự đồng bộ với đa thức x^58 + x^39 + 1. Overhead khoảng 3%.
- 128b/130b (PCIe 3.0 đến 5.0): mỗi khối 128 bit có header 2 bit, cũng kết hợp với scrambler. Overhead khoảng 1,5%.
Scrambler làm chuỗi bit trông giống ngẫu nhiên, nên về thống kê có đủ cạnh chuyển mức và gần cân bằng DC. Khác với 8b/10b, đây là bảo đảm theo xác suất chứ không phải bảo đảm cứng: về lý thuyết vẫn có chuỗi dữ liệu tạo ra run length dài sau khi trộn, nhưng xác suất rất thấp.
| Mã | Overhead so với dữ liệu | Run length tối đa | Cơ chế cân bằng DC | Dùng ở |
|---|---|---|---|---|
| 8b/10b | 25% | 5 | Running disparity | PCIe 1.x/2.x, SATA, USB 3.0 Gen 1, 1000BASE-X, DisplayPort 1.x |
| 64b/66b | 3,125% | Theo xác suất | Scrambler | 10GBASE-R, 25G/40G/100G Ethernet |
| 128b/130b | 1,5625% | Theo xác suất | Scrambler | PCIe 3.0 đến 5.0 |
| 128b/132b | 3,125% | Theo xác suất | Scrambler | USB 3.1 Gen 2 trở lên |
Line coding trong một đường SerDes¶
SerDes (Serializer/Deserializer) là khối chuyển dữ liệu song song bên trong chip thành luồng bit nối tiếp tốc độ cao và ngược lại. Hình dưới cho thấy vị trí của mã khối, scrambler và line code dạng mức tín hiệu trong một đường SerDes, cùng với các khối ở bên thu phụ thuộc vào chúng.
Ở bên phát, dữ liệu song song đi qua FEC (nếu chuẩn yêu cầu), mã khối và scrambler, rồi được serializer chuyển thành luồng nối tiếp. Driver đưa luồng này ra đường truyền dưới dạng NRZ hoặc PAM4.
Ở bên thu, equalizer (CTLE, DFE) bù suy hao của kênh truyền, CDR suy ra clock từ các cạnh chuyển mức, deserializer chuyển lại thành dữ liệu song song. Khối đồng bộ khối tìm ranh giới ký tự (comma của 8b/10b) hoặc ranh giới khối (sync header của 64b/66b), sau đó dữ liệu được descramble và giải mã. Như vậy, line coding là điều kiện để CDR và khối đồng bộ khối hoạt động được.
Tổng hợp theo chuẩn giao tiếp¶
| Chuẩn | Tốc độ mỗi lane | Line code | Mã khối hoặc cơ chế phụ | FEC |
|---|---|---|---|---|
| UART | Tới vài Mbit/s | NRZ | Bit start, stop | Không (có thể có parity) |
| CAN | Tới 1 Mbit/s (CAN cổ điển) | NRZ | Bit stuffing sau 5 bit giống nhau | Không (có CRC) |
| USB 2.0 | 480 Mbit/s | NRZI | Bit stuffing sau 6 bit 1 | Không (có CRC) |
| 10BASE-T | 10 Mbit/s | Manchester | Không | |
| 100BASE-TX | 100 Mbit/s | MLT-3 (ba mức) | 4B5B | Không |
| 1000BASE-X | 1,25 GBd | NRZ | 8b/10b | Không |
| 10GBASE-R | 10,3125 GBd | NRZ | 64b/66b | Tùy chọn |
| PCIe 1.0 / 2.0 | 2,5 / 5 GT/s | NRZ | 8b/10b | Không |
| PCIe 3.0 / 4.0 / 5.0 | 8 / 16 / 32 GT/s | NRZ | 128b/130b | Không |
| PCIe 6.0 | 64 GT/s | PAM4 | Chế độ FLIT | FEC nhẹ + CRC |
| Ethernet 200G/400G (802.3bs) | 26,5625 GBd PAM4 mỗi lane điện | PAM4 | 64b/66b, chuyển mã 256b/257b | RS(544,514) |
Bảng cho thấy xu hướng chung: tốc độ thấp dùng NRZ với cơ chế phụ đơn giản; tốc độ vài Gbit/s dùng NRZ với 8b/10b; tốc độ cao hơn chuyển sang mã khối overhead thấp kèm scrambler; và từ khoảng 50 Gbit/s mỗi lane trở lên, các chuẩn chuyển sang PAM4 kèm FEC bắt buộc.
Liên quan¶
- Channel Coding (LDPC, Polar) (Wireless / RAN): mã hóa kênh để sửa lỗi trong LTE và NR.
- Open Fronthaul (Wireless / RAN): fronthaul eCPRI chạy trên Ethernet 10G/25G, tức dùng các line code ở trang này ở tầng vật lý.
- SoC / System: vị trí của các khối PHY và SerDes trong SoC.
Tài liệu tham khảo¶
- A. X. Widmer, P. A. Franaszek, "A DC-Balanced, Partitioned-Block, 8B/10B Transmission Code", IBM Journal of Research and Development, vol. 27, no. 5, 1983. DOI 10.1147/rd.275.0440
- IEEE Std 802.3: Clause 14 (10BASE-T, Manchester), Clause 25 (100BASE-TX), Clause 36 (1000BASE-X, 8b/10b), Clause 49 (10GBASE-R, 64b/66b), Clause 119 (200GBASE-R/400GBASE-R PCS, RS(544,514)). IEEE 802.3 Working Group
- PCI-SIG, PCI Express Base Specification (Revision 3.0: 128b/130b; Revision 6.0: PAM4, FLIT mode, FEC). PCI-SIG Specifications
- USB Implementers Forum, Universal Serial Bus Specification Revision 2.0, mục 7.1.8 (NRZI) và 7.1.9 (bit stuffing). USB Document Library
- ISO 11898-1: CAN data link layer (bit stuffing).
- ITU-T G.703: Physical/electrical characteristics of hierarchical digital interfaces (HDB3 cho E1).