Codificación 8b/10b
En telecomunicaciones, 8b/10b es un código de línea que asigna palabras de 8 bits a símbolos de 10 bits para lograr un equilibrio de CC y una disparidad limitada y, al mismo tiempo, proporciona suficientes cambios de estado para permitir recuperación de reloj razonable. Esto significa que la diferencia entre los recuentos de unos y ceros en una cadena de al menos 20 bits no es más de dos, y que no hay más de cinco unos o ceros seguidos. Esto ayuda a reducir la demanda del límite inferior de ancho de banda del canal necesario para transferir la señal.
Un código 8b/10b se puede implementar de varias maneras con enfoque en diferentes parámetros de rendimiento. Una implementación fue diseñada por K. Odaka para la grabadora de audio digital DAT. Kees Schouhamer Immink diseñó un código 8b/10b para la grabadora de audio DCC. La implementación de IBM fue descrita en 1983 por Al Widmer y Peter Franaszek.
IBM implementation
Como sugiere el nombre del esquema, se transmiten ocho bits de datos como entidad de 10 bits llamada símbolo, o carácter. Los cinco bits bajos de datos se codifican en un grupo de 6 bits (la porción 5b/6b) y los tres primeros bits se codifican en un grupo de 4 bits (la porción 3b/4b). Estos grupos de código están concatenados juntos para formar el símbolo de 10 bits que se transmite en el alambre. El símbolos de datos a menudo se conoce como D.x.y donde x rangos de más de 0–31 y y más de 0–7. Las normas que utilizan la codificación 8b/10b también definen hasta 12 símbolos especiales (o caracteres de control) que se puede enviar en lugar de un Signatura de datos. A menudo se utilizan para indicar el inicio del marco, el fin del marco, el enlace ocio, el salto y condiciones similares de nivel de enlace. Al menos uno de ellos (es decir, un símbolo "comma") necesita ser utilizado para definir la alineación de los símbolos de 10 bits. Se denominan K.x.y y tienen diferentes codificaciones de cualquiera de los símbolos D.x.y.
Debido a que la codificación 8b/10b utiliza símbolos de 10 bits para codificar palabras de 8 bits, algunos de los 1024 símbolos posibles (10 bits, 210) se pueden excluir para otorgar un límite de longitud de ejecución. de 5 bits iguales consecutivos y asegurar que la diferencia entre el conteo de ceros y unos no sea mayor a dos. Algunas de las 256 palabras posibles de 8 bits se pueden codificar de dos formas diferentes. Utilizando estas codificaciones alternativas, el esquema puede lograr un equilibrio de CC a largo plazo en el flujo de datos en serie. Esto permite que el flujo de datos se transmita a través de un canal con una característica de paso alto, por ejemplo, un par trenzado sin blindaje acoplado a transformador de Ethernet o receptores ópticos que utilizan control automático de ganancia.
Tablas de codificación y codificación de bytes
Tenga en cuenta que en las siguientes tablas, para cada byte de entrada (representado como HGF EDCBA
), A indica el bit menos significativo (LSB) y H el más significativo (MSB). La salida gana dos bits adicionales, i y j. Los bits se envían de LSB a MSB: a, b, c, d, e, i, f, g, h y j; es decir, el código 5b/6b seguido del código 3b/4b. Esto garantiza la unicidad de la secuencia de bits especial en los símbolos de coma.
El efecto residual en el flujo al número de cero y un bit transmitido se mantiene como el disparidad ()RD) y el efecto del trineo es equilibrado por la elección de codificación para los siguientes símbolos.
El código 5b/6b es un código de disparidad emparejado, al igual que el código 3b/4b. Cada palabra de código de 6 o 4 bits tiene números iguales de ceros y unos (una disparidad de cero), o viene en un par de formas, una con dos ceros más que unos (cuatro ceros y dos unos, o tres ceros y uno uno, respectivamente) y uno con dos menos. Cuando se utiliza un código de 6 o 4 bits que tiene una disparidad distinta de cero (cuenta de unos menos cuenta de ceros; es decir, −2 o +2), la elección de codificaciones de disparidad positiva o negativa debe ser la que alterna la disparidad corriente. En otras palabras, los códigos de disparidad distintos de cero se alternan.
Disparidad de carrera
La codificación 8b/10b es libre de DC, lo que significa que la relación a largo plazo de los y ceros transmitidos es exactamente 50%. Para lograr esto, la diferencia entre el número de los transmitidos y el número de ceros transmitidos se limita siempre a ±2, y al final de cada símbolo, es ya sea +1 o −1. Esta diferencia se conoce como disparidad (RD).
Este esquema necesita solo dos estados para la disparidad corriente de +1 y −1. Comienza en −1.
Para cada código 5b/6b y 3b/4b con un número desigual de unos y ceros, existen dos patrones de bits que se pueden utilizar para transmitirlo: uno con dos códigos "1" bits, y uno con todos los bits invertidos y, por tanto, dos ceros más. Dependiendo de la disparidad actual de la señal, el motor de codificación selecciona cuál de las dos posibles secuencias de seis o cuatro bits enviar para los datos dados. Obviamente, si el código de seis o cuatro bits tiene el mismo número de unos y ceros, no hay que elegir, ya que la disparidad no cambiaría, con las excepciones de los subbloques D.07 (00111) y D.x.3. (011). En cualquier caso, la disparidad aún no ha cambiado, pero si RD es positivo cuando se encuentra D.07, se usa 000111, y si es negativo, se usa 111000. Asimismo, si RD es positivo cuando se encuentra D.x.3, se usa 0011, y si es negativo, se usa 1100. Esto se refleja con precisión en los cuadros a continuación, pero vale la pena hacer una mención adicional, ya que estos son los dos únicos subbloques con números iguales de 1 y 0 y cada uno tiene dos codificaciones posibles.
anterior RD | Disparity of palabra clave | Disparidad elegido | siguiente RD |
---|---|---|---|
−1 | 0 | 0 | −1 |
−1 | ±2 | +2 | + 1 |
+ 1 | 0 | 0 | + 1 |
+ 1 | ±2 | −2 | −1 |
5b/6b code (abcdei)
Input | RD = 1 | RD = +1 | Input | RD = 1 | RD = +1 | ||||
---|---|---|---|---|---|---|---|---|---|
Código | EDCBA | ab | Código | EDCBA | ab | ||||
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 | 00101010 | D.20 | 10100 | 001011 | |||
D.05 | 00101 | 1010 Wien01 | D.21 | 10101 | 1010 10 | ||||
D.06 | 00110 | 011001 | D.22 | 10110 | 011010 | ||||
D.07 | 00111 | 111000 | 000111 | D.23 † | 10111 | 111010 | 000101 | también utilizado para el 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 | también utilizado para el símbolo K.27.7 | ||
D.12 | 01100 | 001101 | D.28 | 11100 | 001110 | ||||
D.13 | 01101 | 101100 | D.29 † | 11101 | 101110 | 010001 | también utilizado para el símbolo K.29.7 | ||
D.14 | 01110 | 011100 | D.30 † | 11110 | 011110 | 100001 | también utilizado para el símbolo K.30.7 | ||
D.15 | 01111 | 010111 | 101000 | D.31 | 11111 | Himmelpfortgasse 11 | 010100 | ||
no utilizado | 111100 | 000011 | K.28 ‡ | 11100 | 001111 | 110000 | utilizado exclusivamente para símbolos K.28.x |
† también se utiliza para el código 5b/6b de K.x.7
‡ utilizado exclusivamente para el código 5b/6b de K.28.y
Código 3b/4b (fghj)
Input | RD = 1 | RD = +1 | Input | RD = 1 | RD = +1 | |||
---|---|---|---|---|---|---|---|---|
Código | HGF | f g h j | Código | HGF | f g h j | |||
D.x.0 | 000 | 1011 | 0100 | K.x.0 | 000 | 1011 | 0100 | |
D.x.1 | 001 | 1001 | K.x.1 ‡ | 001 | 0110 | 1001 | ||
D.x.2 | 010 | 0101 | K.x.2 | 010 | Graben 19, 1010 | 0101 | ||
D.x.3 | 011 | 1100 | 0011 | K.x.3 | 011 | 1100 | 0011 | |
D.x.4 | 100 | 1101 | 0010 | K.x.4 | 100 | 1101 | 0010 | |
D.x.5 | 101 | Graben 19, 1010 | K.x.5 ‡ | 101 | 0101 | 1010 | ||
D.x.6 | 110 | 0110 | K.x.6 | 110 | 1001 | 0110 | ||
D.x.P7 † | 111 | 1110 | 0001 | K.x.7 ‡ | 111 | 0111 | 1000 | |
D.x.A7 † | 0111 | 1000 |
† Para D.x.7, se debe seleccionar la codificación Primaria (D.x.P7) o Alternativa (D.x.A7) para evitar una ejecución de cinco 0 o 1 consecutivos cuando se combina con el código 5b/6b anterior.< br/>Se utilizan secuencias de exactamente cinco bits idénticos en símbolos de coma para problemas de sincronización.
D.x.A7 se utiliza únicamente
- cuando RD = −1 x= 17, 18 y 20 y
- cuando RD = +1: para x= 11, 13 y 14.
Con x= 23, x= 27, x= 29, y x= 30, la porción de código 3b/4b utilizada para símbolos de control K.x.7 es la misma que la de D.x.A7.
Cualquier otro código D.x.A7 no se puede utilizar ya que resultaría en posibilidades de secuencias de coma mal alineadas.
‡ Sólo K.28.1, K.28.5 y K.28.7 generan símbolos de coma, que contienen una secuencia de bits de cinco 0 o 1.
El símbolo tiene el formato 110000 01xx o 001111 10xx.
Símbolos de control
Los símbolos de control dentro de 8b/10b son símbolos 10b que son secuencias válidas de bits (no más de seis unos o ceros) pero que no tienen un byte de datos 8b correspondiente. Se utilizan para funciones de control de bajo nivel. Por ejemplo, en Fibre Channel, K28.5 se utiliza al comienzo de secuencias de cuatro bytes (llamadas "conjuntos ordenados") que realizan funciones como arbitraje de bucle, palabras de relleno, restablecimiento de enlaces, etc.
Como resultado de las tablas 5b/6b y 3b/4b, se permite enviar los siguientes 12 símbolos de control:
Input | RD = 1 | RD = +1 | |||
---|---|---|---|---|---|
Signatura | DEC | 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 | 001111 1001 | 110000 0110 |
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 | BC | 101 11100 | 001111 1010 | 110000 0101 |
K.28.6 | 220 | DC | 110 11100 | 001111 0110 | 110000 1001 |
K.28.7 ‡ | 252 | FC | 111 11100 | 001111 1000 | 110000 0111 |
K.23.7 | 247 | F7 | 111 10111 | 111010 1000 | 000101 0111 |
K.27.7 | 251 | FB | 111 11011 | 110110 1000 | 00100101 |
K.29.7 | 253 | FD | 111 11101 | 101110 1000 | 010001 0111 |
K.30.7 | 254 | FE | 111 11110 | 011110 1000 | 100001 0111 |
† Dentro de los símbolos de control, K.28.1, K.28.5 y K.28.7 son "símbolos de coma". Los símbolos de coma se utilizan para la sincronización (encontrar la alineación de los códigos 8b/10b dentro de un flujo de bits). Si no se utiliza K.28.7, las secuencias de coma únicas 00111110 o 11000001 no pueden aparecer inadvertidamente en ninguna posición de bit dentro de cualquier combinación de códigos normales.
‡ Si se permite K.28.7 en la codificación real, se debe utilizar una definición más compleja del patrón de sincronización que la sugerida por †, ya que una combinación de K.28.7 con varios otros códigos forma un símbolo de coma falso desalineado que se superpone los dos códigos. En ningún caso se permite una secuencia de múltiples códigos K.28.7, ya que esto daría como resultado símbolos de coma desalineados indetectables.
K.28.7 es el único símbolo de coma que no puede ser el resultado de un error de un solo bit en el flujo de datos.
Ejemplo de codificación de D31.1
Input | RD = 1 | RD = +1 | |||
---|---|---|---|---|---|
Código | DEC | HEX | HGF EDCBA | abcdei fghj | abcdei fghj |
D31.1 | 63 | 3F | 001 11111 | 101011 1001 | 010100 1001 |
Tecnologías que utilizan 8b/10b
Tras la expiración de la patente IBM mencionada anteriormente, el esquema se hizo aún más popular y fue elegido como código de línea libre de DC para varias tecnologías de comunicación.
Entre las áreas en las que la codificación 8b/10b encuentra aplicación se encuentran las siguientes:
- Aurora
- Interfaz de serie de cámaras
- CoaXPress
- Interfaz de Radio Pública Común (CPRI)
- DVB Interfaz de serie Asincrónica (ASI)
- DVI y HDMI Video Island (transition-minimized differential signaling)
- DisplayPort 1.x
- ESCON (Enterprise Systems Connection)
- Canal de fibras
- Gigabit Ethernet (excepto para el par retorcido basado en 1000BASE-T)
- IEEE 1394b (FireWire y otros)
- InfiniBand
- JESD204B
- Interfaz OBSAI RP3
- PCI Express 1.x y 2.x
- Serial RapidIO
- SD UHS-II
- Serie ATA
- SAS 1.x, 2.x y 3.x
- SSA
- ServerNet (a partir de ServerNet2)
- SGMII
- UniPro MPHY
- USB 3.0
- Thunderbolt 1.x y 2.x
- XAUI
- SLVS-EC
Fibre Channel (solo variantes 4GFC y 8GFC)
El estándar FC-0 define qué esquema de codificación se utilizará (8b/10b o 64b/66b) en un sistema Fibre Channel. Las variantes de mayor velocidad suelen utilizar 64b/66b para optimizar la eficiencia del ancho de banda (ya que la sobrecarga del ancho de banda es del 20 %). en 8b/10b frente a aproximadamente el 3 % (~ 2/66) en sistemas 64b/66b). Por tanto, la codificación 8b/10b se utiliza para las variantes 4GFC y 8GFC; para las variantes 10GFC y 16GFC, es 64b/66b. La capa de enlace de datos Fibre Channel FC1 es responsable de implementar la codificación y decodificación de señales 8b/10b.
El esquema de codificación Fibre Channel 8b/10b también se utiliza en otros sistemas de telecomunicaciones. Los datos se expanden utilizando un algoritmo que crea uno de dos posibles valores de salida de 10 bits para cada valor de entrada de 8 bits. Cada valor de entrada de 8 bits se puede asignar a un valor de salida de 10 bits con disparidad impar o a uno con disparidad par. Este mapeo generalmente se realiza en el momento en que los datos de entrada paralelos se convierten en un flujo de salida en serie para su transmisión a través de un enlace de canal de fibra. La selección par/impar se realiza de tal manera que se mantenga una disparidad cero a largo plazo entre unos y ceros. Esto a menudo se denomina "equilibrio de CC".
El esquema de conversión de 8 bits a 10 bits utiliza sólo 512 de los 1024 valores de salida posibles. De los 512 valores de salida restantes no utilizados, la mayoría contiene demasiados unos (o demasiados ceros) y, por lo tanto, no están permitidos. Esto todavía deja suficientes pares de codificación pares e impares de 10 bits de repuesto para permitir al menos 12 caracteres especiales que no sean de datos.
Los códigos que representan los 256 valores de datos se denominan códigos de datos (D). Los códigos que representan los 12 caracteres especiales que no son datos se denominan códigos de control (K).
Todos los códigos se pueden describir indicando 3 valores octales. Esto se hace con una convención de nomenclatura de "Dxx.x" o "Kxx.x".
Ejemplo:
- Input Data Bits: ABCDEFGH
- Los datos se dividen: ABC DEFGH
- Los datos se eliminan: DEFGH ABC
Ahora estos bits se convierten a decimales en la forma en que están emparejados.
Datos de entrada
C3 (HEX) = 11000011 = 110 00011 = 00011 110 = 3 6
E 8B/10B = D03.6
Audio digital
Los esquemas de codificación 8b/10b han encontrado un uso intensivo en aplicaciones de almacenamiento de audio digital, a saber
- Digital Audio Tape, US Patent 4,456,905, junio de 1984 por K. Odaka.
- Digital Compact Cassette (DCC), US Patent 4,620,311, octubre 1986 por Kees Schouhamer Immink.
Se utiliza un esquema diferente pero relacionado para los CD de audio y los CD-ROM:
- Disco compacto de ocho a catorce modulación
Alternativas
Tenga en cuenta que 8b/10b es el esquema de codificación, no un código específico. Si bien muchas aplicaciones utilizan el mismo código, existen algunas implementaciones incompatibles; por ejemplo, la señalización diferencial minimizada de transición, que también expande de 8 bits a 10 bits, pero utiliza un método completamente diferente para hacerlo.
La codificación 64b/66b, introducida para las interfaces dependientes del medio físico (PMD) 10GBASE-R de 10 Gigabit Ethernet, es una alternativa con menos gastos generales a la codificación 8b/10b, con una sobrecarga de dos bits por cada 64 bits (en lugar de ocho bits) de datos codificados. Este esquema es considerablemente diferente en diseño de la codificación 8b/10b y no garantiza explícitamente el equilibrio de CC, la longitud de tirada corta y la densidad de transición (estas características se logran estadísticamente mediante codificación). La codificación 64b/66b se ha ampliado a las variantes de codificación 128b/130b y 128b/132b para PCI Express 3.0 y USB 3.1, respectivamente, reemplazando la codificación 8b/10b en revisiones anteriores de cada estándar.