kodowanie 8b/10b

Fibre Channel
Warstwa 4. Mapowanie protokołów
Maskowanie LUN
Warstwa 3. Wspólne usługi
Warstwa 2. Sieć


Struktura Fibre Channel Podział na strefy Fibre Channel Zarejestrowane powiadomienie o zmianie stanu
Warstwa 1. Łącze danych
Kodowanie Fibre Channel 8b/10b
Warstwa 0. Fizyczna

W telekomunikacji 8b/10b to kod liniowy , który odwzorowuje 8-bitowe słowa na 10-bitowe symbole , aby osiągnąć równowagę DC i ograniczoną rozbieżność, a jednocześnie zapewnia wystarczającą liczbę zmian stanu, aby umożliwić rozsądne przywrócenie zegara . Oznacza to, że różnica między zliczeniami jedynek i zer w ciągu co najmniej 20 bitów wynosi nie więcej niż dwa i że nie ma więcej niż pięć jedynek lub zer w rzędzie. Pomaga to zmniejszyć zapotrzebowanie na dolną granicę przepustowości kanału niezbędną do przesłania sygnału.

Kod 8b/10b można zaimplementować na różne sposoby, z naciskiem na różne parametry wydajności. Jedna implementacja została zaprojektowana przez K. Odakę dla DAT . Kees Schouhamer Immink zaprojektował kod 8b/10b dla rejestratora audio DCC . Implementację IBM opisali w 1983 roku Al Widmer i Peter Franaszek .

Implementacja IBMa

Jak sugeruje nazwa schematu, osiem bitów danych jest przesyłanych jako 10-bitowa jednostka zwana symbolem lub znakiem . Pięć niższych bitów danych jest kodowanych w grupie 6-bitowej (część 5b/6b), a trzy górne bity są kodowane w grupie 4-bitowej (część 3b/4b). Te grupy kodów są łączone ze sobą, tworząc 10-bitowy symbol przesyłany przewodem. Symbole danych są często określane jako Dxy, gdzie x wynosi od 0 do 31, a y od 0 do 7. Standardy wykorzystujące kodowanie 8b/10b definiują również do 12 symboli specjalnych (lub znaków sterujących ), które mogą być przesyłane zamiast symbolu danych . Są często używane do wskazania początku ramki, końca ramki, bezczynności łącza, pominięcia i podobnych warunków na poziomie łącza. Przynajmniej jeden z nich (tj. symbol „przecinka”) musi być użyty do zdefiniowania wyrównania 10-bitowych symboli. Są one określane jako Kxy i mają inne kodowanie niż którykolwiek z symboli Dxy.

Ponieważ kodowanie 8b/10b wykorzystuje symbole 10-bitowe do kodowania słów 8-bitowych, niektóre z możliwych 1024 (10 bitów, 2 10 ) symboli można wykluczyć, aby zapewnić ograniczenie długości serii do 5 kolejnych równych bitów i zapewnić różnicę między liczbą zer i jedynek nie większą niż dwa. Niektóre z 256 możliwych 8-bitowych słów można zakodować na dwa różne sposoby. Korzystając z tych alternatywnych kodowań, schemat jest w stanie osiągnąć długoterminową równowagę DC w szeregowym strumieniu danych. Pozwala to na przesyłanie strumienia danych kanałem o charakterystyce górnoprzepustowej, na przykład nieekranowaną skrętką sprzężoną z transformatorem Ethernet lub odbiornikami optycznymi wykorzystującymi automatyczną kontrolę wzmocnienia .

Tabele kodowania

Zauważ, że w poniższych tabelach dla każdego bajtu wejściowego A jest najmniej znaczącym bitem , a H najbardziej znaczącym. Wyjście zyskuje dwa dodatkowe bity, i oraz j . Bity są wysyłane od niskiego do wysokiego: a, b, c, d, e, i , f, g, h i j ; tj. kod 5b/6b, po którym następuje kod 3b/4b. Zapewnia to niepowtarzalność specjalnej sekwencji bitów w symbolach przecinków.

Resztkowy wpływ na strumień przesyłanej liczby bitów zerowych i jeden jest utrzymywany jako rozbieżność bieżąca ( RD ), a efekt obrotu jest równoważony przez wybór kodowania dla kolejnych symboli.

Kod 5b/6b jest sparowanym kodem rozbieżności , podobnie jak kod 3b/4b. Każde 6- lub 4-bitowe słowo kodowe ma albo równą liczbę zer i jedynek (różnica zerowa), albo występuje w parze form, z których jedna ma o dwa zera więcej niż jedynki (cztery zera i dwie jedynki lub trzy zera i odpowiednio jeden jeden) i jeden z dwoma mniej. Gdy używany jest kod 6- lub 4-bitowy, który ma niezerową rozbieżność (liczba jedynek minus liczba zer, tj. −2 lub +2), wybór kodowania dodatniej lub ujemnej rozbieżności musi być tym, który przełącza dysproporcja biegu. Innymi słowy, niezerowe kody rozbieżności występują naprzemiennie.

Dysproporcje w bieganiu

Kodowanie 8b/10b jest wolne od DC, co oznacza, że ​​długoterminowy stosunek przesyłanych jedynek i zer wynosi dokładnie 50%. Aby to osiągnąć, różnica między liczbą przesyłanych jedynek a liczbą przesyłanych zer jest zawsze ograniczona do ± 2, a na końcu każdego symbolu wynosi +1 lub -1. Ta różnica jest znana jako dysproporcja biegu (RD).

Ten schemat wymaga tylko dwóch stanów dla bieżącej rozbieżności +1 i -1. Zaczyna się od -1.

Dla każdego kodu 5b/6b i 3b/4b z nierówną liczbą jedynek i zer istnieją dwa wzorce bitowe, których można użyć do jego transmisji: jeden z dwoma dodatkowymi bitami „1” i jeden z odwróconymi wszystkimi bitami, a zatem dwoma więcej zer. W zależności od bieżącej dysproporcji sygnału, silnik kodujący wybiera, którą z dwóch możliwych sekwencji sześcio- lub czterobitowych wysłać dla danych danych. Oczywiście, jeśli sześciobitowy lub czterobitowy kod ma równą liczbę jedynek i zer, nie ma wyboru, ponieważ różnica byłaby niezmieniona, z wyjątkiem podbloków D.07 (00111) i Dx3 ( 011). W obu przypadkach rozbieżność pozostaje niezmieniona, ale jeśli RD jest dodatnie, gdy napotkano D.07, używane jest 000111, a jeśli jest ujemne, używane jest 111000. Podobnie, jeśli RD jest dodatnie, gdy napotkane jest Dx3, używane jest 0011, a jeśli jest ujemne, używane jest 1100. Jest to dokładnie odzwierciedlone na poniższych wykresach, ale warto o tym wspomnieć, ponieważ są to jedyne dwa podbloki z równymi liczbami jedynek i zer, z których każdy ma dwa możliwe kodowania.

Zasady prowadzenia dysproporcji

poprzedni R.D

Rozbieżność słowa kodowego
Wybrano dysproporcję

następny R.D
−1 0 0 −1
−1 ±2 +2 +1
+1 0 0 +1
+1 ±2 −2 −1

kod 5b/6b (abcdei)

Wejście RD = −1 RD = +1 Wejście RD = −1 RD = +1
Kod EDCBA a b c d e i Kod EDCBA a b c d e i
D.00 00000 100111 011000 D.16 10000 011011 100100
D.01 00001 011101 100010 D.17 10001 100011
D.02 00010 101101 010010 D.18 10010 010011
D.03 00011 110001 D.19 10011 110010
D.04 00100 110101 001010 D.20 10100 001011
D.05 00101 101001 D.21 10101 101010
D.06 00110 011001 D.22 10110 011010
D.07 00111 111000 000111 D.23 † 10111 111010 000101 używany również dla symbolu K.23.7
D.08 01000 111001 000110 D.24 11000 110011 001100
D.09 01001 100101 D.25 11001 100110
D.10 01010 010101 D.26 11010 010110
D.11 01011 110100 D.27 † 11011 110110 001001 używany również dla symbolu K.27.7
D.12 01100 001101 D.28 11100 001110
D.13 01101 101100 D.29 † 11101 101110 010001 używany również dla symbolu K.29.7
D.14 01110 011100 D.30 † 11110 011110 100001 używany również dla symbolu K.30.7
D.15 01111 010111 101000 D.31 11111 101011 010100
nieużywany 1111 00 0000 11 K.28 ‡ 11100 00 1111 11 0000 używany wyłącznie dla symboli K.28.x

† używany również dla kodu 5b / 6b z Kx7

‡ używany wyłącznie dla kodu 5b/6b K.28.y

Kod 3b/4b (fghj)

Wejście RD = −1 RD = +1 Wejście RD = −1 RD = +1
Kod HGF f g h j Kod HGF f g h j
Dx0 000 1011 0100 Kx0 000 0100 1011
Dx1 001 1001 Kx1 ‡ 001 0110 1 001
dx2 010 0101 Kx2 010 1010 0101
Dx3 011 1100 0011 Kx3 011 1100 0011
dx4 100 1101 0010 Kx4 100 1101 0010
Dx5 101 1010 Kx5 ‡ 101 0101 1 010
Dx6 110 0110 Kx6 110 1001 0110
DxP7 † 111 1110 0001 Kx7 ‡ 111 0111 1 000
DxA7 † 0111 1000



† W przypadku Dx7 należy wybrać kodowanie podstawowe (DxP7) lub alternatywne (DxA7), aby uniknąć serii pięciu kolejnych zer lub jedynek w połączeniu z poprzedzającym kodem 5b/6b. Sekwencje dokładnie pięciu identycznych bitów są używane w symbolach przecinków w kwestiach synchronizacji. Używany jest tylko DxA7

  • gdy RD = −1: dla x = 17, 18 i 20 oraz
  • gdy RD = +1: dla x = 11, 13 i 14.


Przy x = 23, x = 27, x = 29 i x = 30, część kodu 3b/4b używana dla symboli kontrolnych Kx7 jest taka sama jak dla DxA7. Żadnego innego kodu DxA7 nie można użyć, ponieważ spowodowałoby to ryzyko nieprawidłowego ustawienia sekwencji przecinków.


‡ Tylko K.28.1, K.28.5 i K.28.7 generują symbole przecinków, które zawierają sekwencję bitów pięciu zer lub jedynek. Symbol ma format 11 0000 0 1xx lub 00 1111 1 0xx.

Symbole kontrolne

Symbole kontrolne w obrębie 8b/10b są symbolami 10b, które są prawidłowymi sekwencjami bitów (nie więcej niż sześć jedynek lub zer), ale nie mają odpowiadającego im bajtu danych 8b. Służą do wykonywania funkcji sterowania niskiego poziomu. Na przykład w Fibre Channel K28.5 jest używany na początku czterobajtowych sekwencji (zwanych „uporządkowanymi zestawami”), które wykonują takie funkcje, jak arbitraż pętli, wypełnianie słów, resetowanie łącza itp.

Z tablic 5b/6b i 3b/4b wynika, że ​​dopuszczonych jest do przesłania 12 symboli kontrolnych:

Symbole kontrolne
Wejście RD = −1 RD = +1
Symbol grudzień KLĄTWA HGF EDCBA abcdei fghj abcdei fghj
K.28.0 28 1C 000 11100 001111 0100 110000 1011
K.28.1 † 60 3C 001 11100 00 1111 1 001 11 0000 0 110
K.28.2 92 5C 010 11100 001111 0101 110000 1010
K.28.3 124 7C 011 11100 001111 0011 110000 1100
K.28.4 156 9C 100 11100 001111 0010 110000 1101
K.28.5 † 188 pne 101 11100 00 1111 1 010 11 0000 0 101
K.28.6 220 DC 110 11100 001111 0110 110000 1001
K.28.7 ‡ 252 FC 111 11100 00 1111 1 000 11 0000 0 111
K.23.7 247 F7 111 10111 111010 1000 000101 0111
K.27.7 251 pełne wyżywienie 111 11011 110110 1000 001001 0111
K.29.7 253 FD 111 11101 101110 1000 010001 0111
K.30.7 254 FE 111 11110 011110 1000 100001 0111

† W symbolach kontrolnych K.28.1, K.28.5 i K.28.7 to „symbole przecinka”. Symbole przecinków są używane do synchronizacji (znalezienia wyrównania kodów 8b/10b w strumieniu bitów). Jeśli K.28.7 nie jest używany, unikalne sekwencje przecinków 00 11111 0 lub 11 00000 1 nie mogą przypadkowo pojawić się na żadnej pozycji bitowej w dowolnej kombinacji normalnych kodów.

‡ Jeśli K.28.7 jest dozwolony w rzeczywistym kodowaniu, należy zastosować bardziej złożoną definicję wzorca synchronizacji niż sugerowana przez †, ponieważ kombinacja K.28.7 z kilkoma innymi kodami tworzy fałszywie źle wyrównany symbol przecinka nakładający się na dwa kody . Sekwencja wielu kodów K.28.7 jest niedozwolona w żadnym przypadku, ponieważ skutkowałaby niewykrywalnymi, źle ustawionymi symbolami przecinków.

K.28.7 to jedyny symbol przecinka, który nie może być wynikiem błędu pojedynczego bitu w strumieniu danych.

Przykładowe kodowanie D31.1

D31.1 dla obu bieżących przypadków rozbieżności
Wejście RD = −1 RD = +1
Kod grudzień KLĄTWA HGF EDCBA abcdei fghj abcdei fghj
D31.1 63 3F 001 11111 101011 1001 010100 1001

Technologie korzystające z 8b/10b

Po wygaśnięciu wspomnianego wyżej patentu IBM schemat stał się jeszcze bardziej popularny i został wybrany jako kod liniowy bez prądu stałego dla kilku technologii komunikacyjnych.

Wśród obszarów, w których kodowanie 8b/10b znajduje zastosowanie, są następujące:

Fibre Channel (tylko warianty 4GFC i 8GFC)

Standard FC-0 określa, jaki schemat kodowania ma być używany (8b/10b lub 64b/66b) w systemie Fibre Channel – warianty o większej szybkości zazwyczaj wykorzystują 64b/66b w celu optymalizacji wydajności pasma (ponieważ obciążenie przepustowości wynosi 20% w 8b/ 10b w porównaniu z około 3% (~ 2/66) w systemach 64b/66b). Zatem kodowanie 8b/10b jest używane dla wariantów 4GFC i 8GFC; dla wariantów 10GFC i 16GFC jest to 64b/66b. Fibre Channel FC1 jest wówczas odpowiedzialna za implementację kodowania i dekodowania sygnałów 8b/10b.

Schemat kodowania Fibre Channel 8b/10b jest stosowany również w innych systemach telekomunikacyjnych. Dane są rozszerzane przy użyciu algorytmu, który tworzy jedną z dwóch możliwych 10-bitowych wartości wyjściowych dla każdej 8-bitowej wartości wejściowej. Każda 8-bitowa wartość wejściowa może być odwzorowana albo na 10-bitową wartość wyjściową z nieparzystą rozbieżnością, albo na taką z parzystą rozbieżnością. To mapowanie jest zwykle wykonywane w czasie, gdy równoległe dane wejściowe są konwertowane na szeregowy strumień wyjściowy do transmisji przez łącze Fibre Channel. Wybór nieparzysty/parzysty jest dokonywany w taki sposób, że utrzymywana jest długoterminowa zerowa różnica między zerami a jedynkami. Nazywa się to często „równoważeniem DC”.

Schemat konwersji 8-bitowej na 10-bitową wykorzystuje tylko 512 z 1024 możliwych wartości wyjściowych. Z pozostałych 512 niewykorzystanych wartości wyjściowych większość zawiera zbyt wiele jedynek (lub zbyt wiele zer) i dlatego nie jest dozwolona. To wciąż pozostawia wystarczającą ilość zapasowych 10-bitowych nieparzystych i parzystych par kodowania, aby umożliwić co najmniej 12 specjalnych znaków innych niż dane.

Kody reprezentujące 256 wartości danych nazywane są kodami danych (D). Kody reprezentujące 12 specjalnych znaków niebędących danymi nazywane są kodami sterującymi (K).

Wszystkie kody można opisać, podając 3 wartości ósemkowe. Odbywa się to za pomocą konwencji nazewnictwa „Dxx.x” lub „Kxx.x”.

Przykład:

Bity danych wejściowych: ABCDEFGH
Dane są dzielone: ​​ABC DEFGH
Dane są tasowane: DEFGH ABC

Teraz te bity są konwertowane na dziesiętne w sposób, w jaki są sparowane.

Dane wejściowe

C3 (HEX) = 11000011 = 110 00011 = 00011 110 = 3 6

E 8B/10B = D03.6

Dźwięk cyfrowy

Schematy kodowania 8b/10b znalazły szerokie zastosowanie w aplikacjach do przechowywania dźwięku cyfrowego, a mianowicie

płyt audio CD i CD-ROM używany jest inny, ale pokrewny schemat :

Alternatywy

Zauważ, że 8b/10b to schemat kodowania, a nie konkretny kod. Chociaż wiele aplikacji używa tego samego kodu, istnieją pewne niekompatybilne implementacje; na przykład Transition Minimized Differential Signaling , który również rozszerza 8 bitów do 10 bitów, ale wykorzystuje do tego zupełnie inną metodę.

Kodowanie 64b/66b , wprowadzone dla interfejsów 10GBASE-R zależnych od nośnika fizycznego (PMD) 10 Gigabit Ethernet , jest alternatywą dla kodowania 8b/10b o niższym narzucie, z dwubitowym narzutem na 64 bity (zamiast ośmiu bitów) zakodowanych danych. Ten schemat znacznie różni się konstrukcją od kodowania 8b/10b i nie gwarantuje wyraźnie równowagi DC, krótkiej długości serii i gęstości przejścia (cechy te są osiągane statystycznie poprzez szyfrowanie ) . Kodowanie 64b/66b zostało rozszerzone do wariantów kodowania 128b/130b i 128b/132b odpowiednio dla PCI Express 3.0 i USB 3.1 , zastępując kodowanie 8b/10b we wcześniejszych wersjach każdego standardu.

Linki zewnętrzne