Codificação 8b / 10b - 8b/10b encoding
Fibre Channel | |
---|---|
Camada 4. Mapeamento de protocolo | |
Mascaramento de LUN | |
Camada 3. Serviços comuns | |
Camada 2. Rede | |
Notificação de mudança de estado registrado de zoneamento de Fibre Channel de malha de Fibre Channel | |
Camada 1. Link de dados | |
Codificação Fibre Channel 8B / 10B | |
Camada 0. Física |
Em telecomunicações , 8b / 10b é um código de linha que mapeia 8-bit palavras para 10 bits símbolos para alcançar DC-equilíbrio ea disparidade limitada, e ao mesmo tempo fornecer o estado suficiente muda para permitir razoável recuperação de relógio . Isso significa que a diferença entre as contagens de uns e zeros em uma string de pelo menos 20 bits não é mais do que dois e que não há mais do que cinco uns ou zeros em uma linha. Isso ajuda a reduzir a demanda pelo limite inferior de largura de banda do canal necessário para transferir o sinal.
Um código 8b / 10b pode ser implementado de várias maneiras, onde o projeto pode se concentrar em parâmetros específicos, como requisitos de hardware, equilíbrio DC, etc. Uma implementação foi projetada por K. Odaka para o gravador de áudio digital DAT . Kees Schouhamer Immink projetou um código 8b / 10b para o gravador de áudio DCC . A implementação da IBM foi descrita em 1983 por Al Widmer e Peter Franaszek .
Implementação IBM
Como o nome do esquema sugere, oito bits de dados são transmitidos como uma entidade de 10 bits chamada de símbolo ou caractere . Os cinco bits de dados inferiores são codificados em um grupo de 6 bits (a parte 5b / 6b) e os três bits superiores são codificados em um grupo de 4 bits (a parte 3b / 4b). Esses grupos de códigos são concatenados para formar o símbolo de 10 bits que é transmitido na conexão. Os símbolos de dados são freqüentemente referidos como Dxy, onde x varia entre 0–31 ey entre 0–7. Os padrões que usam a codificação 8b / 10b também definem até 12 símbolos especiais (ou caracteres de controle ) que podem ser enviados no lugar de um símbolo de dados . Eles são freqüentemente usados para indicar início de quadro, fim de quadro, link ocioso, pular e condições de nível de link semelhantes. Pelo menos um deles (ou seja, um símbolo de "vírgula") precisa ser usado para definir o alinhamento dos símbolos de 10 bits. Eles são chamados de Kxy e têm codificações diferentes de qualquer um dos símbolos Dxy.
Como a codificação 8b / 10b usa símbolos de 10 bits para codificar palavras de 8 bits, alguns dos possíveis símbolos de 1024 (10 bits, 2 10 ) podem ser excluídos para conceder um limite de comprimento de execução de 5 bits iguais consecutivos e para garantir a diferença entre a contagem de zeros e uns não seja mais do que dois. Algumas das 256 palavras de 8 bits possíveis podem ser codificadas de duas maneiras diferentes. Usando essas codificações alternativas, o esquema é capaz de obter equilíbrio DC de longo prazo no fluxo de dados seriais. Isto permite que o fluxo de dados a ser transmitida através de um canal com uma característica passa-alto, por exemplo Ethernet 's transformador -coupled par trançado ou receptores ópticos que utilizam controlo de ganho automático.
Tabelas de codificação
Observe que nas tabelas a seguir, para cada byte de entrada, A é o bit menos significativo e H o mais significativo. A saída ganha dois bits extras, i e j . Os bits são enviados de baixo para cima: a, b, c, d, e, i , f, g, h e j ; ou seja, o código 5b / 6b seguido pelo código 3b / 4b. Isso garante a exclusividade da sequência de bits especial nos símbolos de vírgula.
O efeito residual no fluxo para o número de zero e um bits transmitidos é mantido como a disparidade em execução ( RD ) e o efeito da variação é equilibrado pela escolha da codificação para os símbolos seguintes.
O código 5b / 6b é um código de disparidade emparelhado , assim como o código 3b / 4b. Cada palavra de código de 6 ou 4 bits tem números iguais de zeros e uns (uma disparidade de zero) ou vem em um par de formas, uma com dois zeros a mais do que uns (quatro zeros e dois uns, ou três zeros e um um, respectivamente) e um com menos dois. Quando um código de 6 ou 4 bits é usado com uma disparidade diferente de zero (contagem de uns menos contagem de zeros; ou seja, -2 ou +2), a escolha de codificações de disparidade positiva ou negativa deve ser aquela que alterna a disparidade em execução. Em outras palavras, os códigos de disparidade diferente de zero se alternam.
Disparidade em execução
A codificação 8b / 10b é livre de DC, o que significa que a proporção de uns e zeros transmitidos a longo prazo é exatamente 50%. Para isso, a diferença entre o número de uns transmitidos e o número de zeros transmitidos é sempre limitada a ± 2 e, ao final de cada símbolo, é +1 ou -1. Essa diferença é conhecida como disparidade em execução (RD).
Este esquema precisa de apenas dois estados para a disparidade de execução de +1 e -1. Ele começa em -1.
Para cada código 5b / 6b e 3b / 4b com um número desigual de uns e zeros, existem dois padrões de bits que podem ser usados para transmiti-lo: um com mais dois bits "1" e um com todos os bits invertidos e, portanto, dois mais zeros. Dependendo da disparidade atual do sinal, o mecanismo de codificação seleciona qual das duas possíveis sequências de seis ou quatro bits enviar para os dados fornecidos. Obviamente, se o código de seis ou quatro bits tiver números iguais de uns e zeros, não há escolha a ser feita, pois a disparidade permaneceria inalterada, com as exceções dos sub-blocos D.07 (00111) e Dx3 ( 011). Em ambos os casos, a disparidade ainda permanece inalterada, mas se RD for positivo quando D.07 for encontrado, 000111 será usado e, se for negativo, 111000 será usado. Da mesma forma, se RD for positivo quando Dx3 for encontrado, 0011 será usado, e se for negativo, 1100 será usado. Isso é refletido com precisão nos gráficos abaixo, mas vale a pena fazer menção adicional, pois esses são os únicos dois sub-blocos com números iguais de 1s e 0s, cada um com duas codificações possíveis.
RD anterior |
Disparidade de palavra de código |
Disparidade escolhida |
próximo RD |
---|---|---|---|
-1 | 0 | 0 | -1 |
-1 | ± 2 | +2 | +1 |
+1 | 0 | 0 | +1 |
+1 | ± 2 | -2 | -1 |
Código 5b / 6b (abcdei)
Entrada | RD = -1 | RD = +1 | Entrada | RD = -1 | RD = +1 | ||||
---|---|---|---|---|---|---|---|---|---|
Código | EDCBA | a b c d e i | Código | EDCBA | a b c d e i | ||||
D.00 | 00000 | 100111 | 011000 | D.16 | 10.000 | 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 | também usado para o símbolo 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 | também usado para o símbolo K.27.7 | ||
D.12 | 01100 | 001101 | D.28 | 11100 | 001110 | ||||
D.13 | 01101 | 101100 | D.29 † | 11101 | 101110 | 010001 | também usado para o símbolo K.29.7 | ||
D.14 | 01110 | 011100 | D.30 † | 11110 | 011110 | 100001 | também usado para o símbolo K.30.7 | ||
D.15 | 01111 | 010111 | 101000 | D.31 | 11111 | 101011 | 010100 | ||
não usado | 1111 00 | 0000 11 | K.28 ‡ | 11100 | 00 1111 | 11 0000 | usado exclusivamente para símbolos K.28.x |
† também usado para o código 5b / 6b de Kx7
‡ usado exclusivamente para o código 5b / 6b de K.28.y
Código 3b / 4b (fghj)
Entrada | RD = -1 | RD = +1 | Entrada | RD = -1 | RD = +1 | |||
---|---|---|---|---|---|---|---|---|
Código | HGF | f g h j | Código | HGF | f g h j | |||
Dx0 | 000 | 1011 | 0100 | Kx0 | 000 | 1011 | 0100 | |
Dx1 | 001 | 1001 | Kx1 ‡ | 001 | 0 110 | 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 | 0 101 | 1 010 | ||
Dx6 | 110 | 0110 | Kx6 | 110 | 1001 | 0110 | ||
DxP7 † | 111 | 1110 | 0001 | Kx7 ‡ | 111 | 0 111 | 1 000 | |
DxA7 † | 0111 | 1000 |
† Para Dx7, a codificação primária (DxP7) ou alternativa (DxA7) deve ser selecionada para evitar uma execução de cinco 0s ou 1s consecutivos quando combinada com o código 5b / 6b anterior.
Sequências de exatamente cinco bits idênticos são usadas em símbolos de vírgula para problemas de sincronização.
DxA7 é usado apenas
- quando RD = −1: para x = 17, 18 e 20 e
- quando RD = +1: para x = 11, 13 e 14.
Com x = 23, x = 27, x = 29 e x = 30, a porção do código 3b / 4b usada para os símbolos de controle Kx7 é a mesma que para DxA7.
Qualquer outro código DxA7 não pode ser usado, pois isso resultaria em chances de sequências de vírgulas desalinhadas.
‡ Apenas K.28.1, K.28.5 e K.28.7 geram símbolos de vírgula, que contêm uma sequência de bits de cinco 0s ou 1s.
O símbolo tem o formato 11 0000 0 1xx ou 00 1111 1 0xx.
Símbolos de controle
Os símbolos de controle dentro de 8b / 10b são símbolos de 10b que são sequências válidas de bits (não mais do que seis 1s ou 0s), mas não têm um byte de dados 8b correspondente. Eles são usados para funções de controle de baixo nível. Por exemplo, no Fibre Channel, K28.5 é usado no início de sequências de quatro bytes (chamadas "Conjuntos ordenados") que executam funções como arbitragem de loop, palavras de preenchimento, redefinições de link, etc.
Resultantes das tabelas 5b / 6b e 3b / 4b, os seguintes 12 símbolos de controle podem ser enviados:
Entrada | RD = -1 | RD = +1 | |||
---|---|---|---|---|---|
Símbolo | DEZ | HEX | 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 | AC | 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 | FB | 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 |
† Nos símbolos de controle, K.28.1, K.28.5 e K.28.7 são "símbolos de vírgula". Símbolos de vírgula são usados para sincronização (encontrar o alinhamento dos códigos 8b / 10b em um fluxo de bits). Se K.28.7 não for usado, as sequências de vírgulas exclusivas 00 11111 0 ou 11 00000 1 não podem ser encontradas em qualquer posição de bit dentro de qualquer combinação de códigos normais.
‡ Se K.28.7 for permitido na codificação real, uma definição mais complexa do padrão de sincronização do que sugerido por † precisa ser usada, pois uma combinação de K.28.7 com vários outros códigos forma um símbolo de vírgula falso desalinhado sobrepondo os dois códigos . Uma sequência de múltiplos códigos K.28.7 não é permitida em nenhum caso, pois isso resultaria em símbolos de vírgula desalinhados indetectáveis.
K.28.7 é o único símbolo de vírgula que não pode ser o resultado de um erro de bit único no fluxo de dados.
Exemplo de codificação de D31.1
Entrada | RD = -1 | RD = +1 | |||
---|---|---|---|---|---|
Código | DEZ | HEX | HGF EDCBA | abcdei fghj | abcdei fghj |
D31.1 | 63 | 3F | 001 11111 | 101011 1001 | 010100 1001 |
Tecnologias que usam 8b / 10b
Depois que a patente IBM mencionada acima expirou, o esquema se tornou ainda mais popular e foi escolhido como um código de linha DC-free para várias tecnologias de comunicação.
Entre as áreas em que a codificação 8b / 10b encontra aplicação estão as seguintes:
- aurora
- Interface serial da câmera
- CoaXPress
- Interface de rádio pública comum (CPRI)
- Interface serial assíncrona DVB (ASI)
- Ilha de vídeo DVI e HDMI ( sinalização diferencial minimizada por transição )
- DisplayPort
- ESCON (Enterprise Systems Connection)
- Fibre Channel
- Gigabit Ethernet (exceto para o par trançado - baseado em 1000Base-T )
- IEEE 1394b (FireWire e outros)
- InfiniBand
- JESD204B
- Interface OBSAI RP3
- PCI Express 1.xe 2.x
- Serial RapidIO
- SD UHS-II
- Serial ATA
- SAS
- SSA
- ServerNet (começando com ServerNet2)
- SGMII
- UniPro M-PHY
- USB 3.0
- Thunderbolt 3
- XAUI
- SLVS-EC
Fibre Channel (apenas variantes 4GFC e 8GFC)
O padrão FC-0 define qual esquema de codificação deve ser usado (8b / 10b ou 64b / 66b) em um sistema Fibre Channel - variantes de velocidade mais alta normalmente usam 64b / 66b para otimizar a eficiência da largura de banda (uma vez que a sobrecarga da largura de banda é de 20% em 8b / 10b versus aproximadamente 3% (~ 2/66) em sistemas 64b / 66b). Assim, a codificação 8b / 10b é usada para variantes 4GFC e 8GFC; para variantes 10GFC e 16GFC, é 64b / 66b. A camada de enlace de dados Fibre Channel FC1 é então responsável por implementar a codificação 8b / 10b e decodificação de sinais.
O esquema de codificação Fibre Channel 8b / 10b também é usado em outros sistemas de telecomunicações. Os dados são expandidos usando um algoritmo que cria um dos dois valores de saída de 10 bits possíveis para cada valor de 8 bits de entrada. Cada valor de entrada de 8 bits pode ser mapeado para um valor de saída de 10 bits com disparidade ímpar ou para um valor com disparidade par. Esse mapeamento geralmente é feito no momento em que os dados de entrada paralela são convertidos em um fluxo de saída serial para transmissão em um link de canal de fibra. A seleção ímpar / par é feita de forma que uma disparidade zero de longo prazo entre uns e zeros seja mantida. Isso geralmente é chamado de "balanceamento DC".
O esquema de conversão de 8 para 10 bits usa apenas 512 dos 1024 valores de saída possíveis. Dos 512 valores de saída não utilizados restantes, a maioria contém muitos uns (ou muitos zeros) e, portanto, não são permitidos. Isso ainda deixa pares sobressalentes de codificação ímpar + par de 10 bits suficientes para permitir pelo menos 12 caracteres especiais sem dados.
Os códigos que representam os 256 valores de dados são chamados de códigos de dados (D). Os códigos que representam os 12 caracteres especiais não dados são chamados de códigos de controle (K).
Todos os códigos podem ser descritos declarando 3 valores octais. Isso é feito com uma convenção de nomenclatura de "Dxx.x" ou "Kxx.x".
Exemplo:
- Bits de dados de entrada: ABCDEFGH
- Os dados são divididos: ABC DEFGH
- Os dados são misturados: DEFGH ABC
Agora, esses bits são convertidos em decimais da maneira como são emparelhados.
Dados de entrada
C3 (HEX) = 11000011 = 110 00011 = 00011 110 = 3 6
E 8B / 10B = D03.6
Áudio digital
Os esquemas de codificação 8b / 10b encontraram um uso pesado em aplicações de armazenamento de áudio digital, a saber
- Digital Audio Tape , Patente US 4.456.905, junho de 1984 por K. Odaka.
- Digital Compact Cassette (DCC), Patente US 4.620.311, outubro de 1986 por Kees Schouhamer Immink .
Um esquema diferente, mas relacionado, é usado para CDs de áudio e CD-ROMs :
Alternativas
Observe que 8b / 10b é o esquema de codificação, não um código específico. Embora muitos aplicativos usem o mesmo código, existem algumas implementações incompatíveis; por exemplo, Transition Minimized Differential Signaling , que também expande 8 bits para 10 bits, mas usa um método completamente diferente para fazer isso.
64b / 66b que codifica , introduzidas para 10 Gigabit Ethernet 's 10GBASE-R dependentes Meio físico interfaces (PMD), é uma alternativa de baixo-cima para 8b / 10b que codifica, tendo um dois bits sobrecarga por 64 bits (em vez de oito bits) de dados codificados. Este esquema é consideravelmente diferente em design da codificação 8b / 10b e não garante explicitamente o equilíbrio DC, a duração curta e a densidade de transição (esses recursos são obtidos estatisticamente por meio de embaralhamento ). A codificação 64b / 66b foi estendida às variantes de codificação 128b / 130b e 128b / 132b para PCI Express 3.0 e USB 3.1 , respectivamente, substituindo a codificação 8b / 10b nas revisões anteriores de cada padrão.
Referências
links externos
- "Definição de codificação 8b / 10b" . Arquivado do original em 8 de junho de 2014 . Recuperado em 2 de setembro de 2014 .