上一篇我們提到了 Menchaster 編碼雖然可以有效解決資料流都是 0 或 1 的情況,然而要同樣的資料卻需要兩倍的頻寬,這對高速傳輸來說是我們不希望的。
今天要介紹 4B/5B 編碼可以有效解決資料流都是 0 / 1 的情形,又不需要犧牲太多頻寬。
4B/5B
4B/5B 是將原始資料以 4 bit 為一組,改為 5 bit 一組。這樣一來像是 0000
、1111
這些資料流,透過編碼後讓他們不要都是 0 或 1,避免無法回復 clock 的情況發生。
4bit | 5bit |
---|---|
0000 | 11110 |
0001 | 01001 |
0010 | 10100 |
0011 | 10101 |
0100 | 01010 |
0101 | 01011 |
0110 | 01110 |
0111 | 01111 |
1000 | 10010 |
1001 | 10011 |
1010 | 10110 |
1011 | 10111 |
1100 | 11010 |
1101 | 11011 |
1110 | 11100 |
1111 | 11101 |
如果我們觀察 0000
與 1111
,可以發現轉為 5 bit 之後都會保證有一個 transition(從高電位到低電為或反過來)。雖然多了一個 bit,同樣的傳輸量需要多 20% 的頻寬,但跟 Menchaster 比起來還是差很多。1000BASE-X 是使用 8B/10B 編碼,概念上與 4B/5B 相同,只是改為一次編碼 8 bit。8B/10B 除了用在 1000BASE-X 以外,也用在各種高速傳輸的協定當中,例如 PCI1.0/2.0、USB3。
8B1Q4
對活在 2023 年的我們來說,有線網路的速度動輒 1Gbps,如果要求更大的頻寬則是 10Gbps。
常見的乙太網路電纜線,內部是由一對一對的絕緣線互相纏繞。這種纏繞方式可以有效減少雜訊。儘管如此,在頻率很高的情況下還是容易受到雜訊干擾。
在 100BASE-TX 以上的傳輸中,會用 8B1Q4 來編碼(8 binary to 1 quinary 4)。主要的原理是在同一個週期內送出多個 bit 進而加大資料量。例如 CAT-6 雖然傳輸頻率為 125Mhz,傳輸速率卻是 1Gbps。
8B1Q4 簡單來說是將 8bit + 1bit (檢查碼) 分成四組,可以看到上圖總共有四組線,分組以後再分別以不同的電位表示。
不過實際上是怎麼將 9bit 資料切成四組的呢?首先會看檢查碼 + 資料前兩碼總共 3bit 去找對應的變換表,剩下的 6bit 則是從前面找到的變換表中編碼。比較特別的地方在於,每條纜線的電位有 5 個,而不是只有高電位與低電位。透過這種方式,一個週期內可以傳送 2bit,同一頻寬內傳輸量就是兩倍。
這也是為什麼 CAT-6 雖然傳輸頻率為 125Mhz,傳輸速率卻是 1Gbps 的原因。