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 proporcionar suficientes cambios de estado para permitir una 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 de ancho de banda inferior del canal necesario para transferir la señal. [1]
Un código 8b/10b se puede implementar de varias maneras con el foco puesto en diferentes parámetros de rendimiento. Una implementación fue diseñada por K. Odaka para la grabadora de audio digital DAT . [2] Kees Schouhamer Immink diseñó un código 8b/10b para la grabadora de audio DCC . [3] La implementación de IBM fue descrita en 1983 por Al Widmer y Peter Franaszek . [4] [5]
Como sugiere el nombre del esquema, ocho bits de datos se transmiten como una entidad de 10 bits llamada símbolo o carácter . Los cinco bits inferiores de datos se codifican en un grupo de 6 bits (la parte 5b/6b) y los tres bits superiores se codifican en un grupo de 4 bits (la parte 3b/4b). Estos grupos de códigos se concatenan para formar el símbolo de 10 bits que se transmite por el cable. Los símbolos de datos se denominan a menudo Dxy, donde x oscila entre 0 y 31 e y entre 0 y 7. Los estándares que utilizan la codificación 8b/10b también definen hasta 12 símbolos especiales (o caracteres de control ) que se pueden enviar en lugar de un símbolo de datos . A menudo se utilizan para indicar el inicio de la trama, el final de la trama, el enlace inactivo, el salto y condiciones similares a nivel de enlace. Se debe utilizar al menos uno de ellos (es decir, un símbolo de "coma") para definir la alineación de los símbolos de 10 bits. Se les conoce como Kxy y tienen codificaciones diferentes de cualquiera de los símbolos Dxy.
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, 2 10 ) pueden excluirse para garantizar un límite de longitud de ejecución de 5 bits iguales consecutivos y para garantizar que la diferencia entre el recuento de ceros y unos no sea mayor que dos. Algunas de las 256 palabras de 8 bits posibles pueden codificarse de dos maneras diferentes. Al utilizar 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, el par trenzado sin blindaje acoplado por transformador de Ethernet o los receptores ópticos que utilizan control automático de ganancia.
Tenga en cuenta que en las siguientes tablas, para cada byte de entrada (representado como HGF EDCBA
), A denota 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 del número de bits cero y uno transmitidos se mantiene como la disparidad de ejecución ( RD ) y el efecto de variación se equilibra con la elección de la codificación para los símbolos siguientes.
El código 5b/6b es un código de disparidad pareada , y también lo es el código 3b/4b. Cada palabra de código de 6 o 4 bits tiene la misma cantidad 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 un uno, respectivamente) y otra con dos menos. Cuando se utiliza un código de 6 o 4 bits que tiene una disparidad distinta de cero (número de unos menos número de ceros; es decir, −2 o +2), la elección de las codificaciones de disparidad positiva o negativa debe ser la que alterne la disparidad en ejecución. En otras palabras, los códigos de disparidad distintos de cero se alternan.
La codificación 8b/10b no tiene corriente continua, lo que significa que la proporción a largo plazo de unos y ceros transmitidos es exactamente del 50 %. Para lograrlo, la diferencia entre la cantidad de unos transmitidos y la cantidad de ceros transmitidos siempre está limitada a ±2 y, al final de cada símbolo, es +1 o −1. Esta diferencia se conoce como disparidad continua (RD).
Este esquema necesita sólo dos estados para la disparidad de funcionamiento de +1 y −1. Comienza en −1. [6]
Para cada código 5b/6b y 3b/4b con un número desigual de unos y ceros, hay dos patrones de bits que se pueden utilizar para transmitirlo: uno con dos bits "1" más y otro con todos los bits invertidos y, por lo 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 Dx3 (011). En cualquier caso, la disparidad sigue siendo la misma, pero si RD es positivo cuando se encuentra D.07, se utiliza 000111, y si es negativo, se utiliza 111000. De la misma manera, si RD es positivo cuando se encuentra Dx3, se utiliza 0011, y si es negativo, se utiliza 1100. Esto se refleja con precisión en los gráficos a continuación, pero vale la pena hacer una mención adicional, ya que estos son los únicos dos subbloques con la misma cantidad de 1 y 0 que tienen cada uno dos codificaciones posibles.
† también se utiliza para el código 5b/6b de Kx7
‡ utilizado exclusivamente para el código 5b/6b de K.28.y
† Para Dx7, se debe seleccionar la codificación primaria (DxP7) o la codificación alternativa (DxA7) para evitar una serie de cinco 0 o 1 consecutivos cuando se combina con el código 5b/6b anterior.
Se utilizan secuencias de exactamente cinco bits idénticos en símbolos de coma para problemas de sincronización.
DxA7 se utiliza únicamente
Con x = 23, x = 27, x = 29 y x = 30, la parte del código 3b/4b que se utiliza para los símbolos de control Kx7 es la misma que la de DxA7.
No se puede utilizar ningún otro código DxA7, ya que podría generar secuencias de comas desalineadas.
‡ Solo 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 11 0000 0 1xx o 00 1111 1 0xx.
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 1 o 0) 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.
De las tablas 5b/6b y 3b/4b se permite enviar los siguientes 12 símbolos de control:
† 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 (para 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 00 11111 0 o 11 00000 1 no pueden aparecer inadvertidamente en ninguna posición de bit dentro de ninguna combinación de códigos normales.
‡ Si se permite el código K.28.7 en la codificación actual, 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 desalineado falso que se superpone a 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 solo error de bit en el flujo de datos.
Después de que expiró la patente de IBM mencionada anteriormente, el esquema se hizo aún más popular y fue elegido como código de línea sin CC para varias tecnologías de comunicación.
Entre las áreas en las que se aplica la codificación 8b/10b se encuentran las siguientes:
El estándar FC-0 define qué esquema de codificación se debe utilizar (8b/10b o 64b/66b) en un sistema Fibre Channel [8] – las variantes de mayor velocidad normalmente utilizan 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 los sistemas 64b/66b). Por lo tanto, la codificación 8b/10b se utiliza para las variantes 4GFC y 8GFC; para las variantes 10GFC y 16GFC, es 64b/66b. [9] La capa de enlace de datos Fibre Channel FC1 es entonces responsable de implementar la codificación y decodificación 8b/10b de las señales.
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 los dos posibles valores de salida de 10 bits para cada valor de entrada de 8 bits. Cada valor de entrada de 8 bits puede asignarse a un valor de salida de 10 bits con disparidad impar o a uno con disparidad par. Esta asignación se realiza normalmente en el momento en que los datos de entrada en paralelo 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 de pares/impares se realiza de tal manera que se mantenga una disparidad cero a largo plazo entre unos y ceros. Esto suele denominarse "equilibrio de CC".
El esquema de conversión de 8 bits a 10 bits utiliza solo 512 de los 1024 valores de salida posibles. De los 512 valores de salida restantes sin usar, la mayoría contiene demasiados unos (o demasiados ceros) y, por lo tanto, no se permiten. Esto aún deja suficientes pares de codificación impar+par de 10 bits libres para permitir al menos 12 caracteres especiales que no son 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 tres valores octales. Esto se hace con una convención de nomenclatura de "Dxx.x" o "Kxx.x". (Tenga en cuenta que las tablas de las secciones anteriores utilizan valores decimales, en lugar de octales, para Dxx.x o Kxx.x)
Ejemplo:
Ahora estos bits se convierten a decimal en la forma en que están emparejados.
Datos de entrada
C3 (hexagonal) = 11000011 = 110 00011 = 00011 110 = 3 6
E8B/10B = D03.6
Los esquemas de codificación 8b/10b han encontrado un uso intensivo en aplicaciones de almacenamiento de audio digital, a saber:
Para los CD de audio y los CD-ROM se utiliza un esquema diferente pero relacionado :
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, Transition Minimized Differential Signaling , que también expande 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 de menor sobrecarga 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 ejecución corta y la densidad de transición (estas características se logran estadísticamente a través de la codificación ). La codificación 64b/66b se ha extendido 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. [10]
Los códigos balanceados en CC o sin CC , como se los suele llamar, tienen una larga historia y su aplicación ciertamente no se limita a la práctica de grabación.