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.
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:
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
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:
- Zorza polarna
- Interfejs szeregowy aparatu
- CoaXPress
- Wspólny publiczny interfejs radiowy (CPRI)
- Asynchroniczny interfejs szeregowy DVB (ASI)
- DVI i HDMI Video Island ( sygnalizacja różnicowa o zminimalizowanym przejściu )
- DisplayPort 1.x
- ESCON (połączenie systemów korporacyjnych)
- kanał światłowodowy
- Gigabit Ethernet (z wyjątkiem skrętki 1000BASE -T )
- IEEE 1394b (FireWire i inne)
- InfiniBand
- JESD204B
- Interfejs OBSAI RP3
- PCI Express 1.x i 2.x
- Serial RapidIO
- SD UHS II
- Serial ATA
- SAS 1.x, 2.x i 3.x
- SSA
- ServerNet (począwszy od ServerNet2)
- SGMII
- UniPro M-PHY
- USB 3.0
- Thunderbolt 1.x i 2.x
- XAUI
- SLVS-EC
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
- Cyfrowa taśma audio , patent USA 4 456 905, czerwiec 1984, autor: K. Odaka.
- Cyfrowa kaseta kompaktowa (DCC), patent USA 4,620,311, październik 1986, autor: Kees Schouhamer Immink .
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
- „Definicja kodowania 8b / 10b” . Zarchiwizowane od oryginału w dniu 8 czerwca 2014 r . Źródło 2 września 2014 r .