Введение

Линейный код, отображающий 8-битные слова в 10-битные символы.

В телекоммуникациях 8b/10b — это линейный код, который отображает 8-битные слова в 10-битные символы для обеспечения баланса по постоянному току и ограниченной разности между единицами и нулями, а также достаточного количества переключений для надёжного восстановления тактовой частоты. Это означает, что разница между количеством единиц и нулей в последовательности длиной не менее 20 бит не превышает двух, и что в последовательности не более пяти единиц или нулей подряд. Это помогает снизить требования к нижней границе полосы пропускания канала, необходимой для передачи сигнала. Код 8b/10b может быть реализован различными способами с упором на разные параметры производительности. Одна из реализаций была разработана К. Одакой для цифрового аудиомагнитофона DAT. Кис Шуамер Имминк разработал код 8b/10b для аудиомагнитофона DCC. Реализация IBM была описана в 1983 году Аль Видмером и Питером Франжеком.

Внедрение IBM

Как следует из названия схемы, восемь бит данных передаются в виде 10-битного объекта, называемого символом или знаком. Нижние пять бит данных кодируются в 6-битовую группу (часть 5b/6b), а верхние три бита – в 4-битовую группу (часть 3b/4b). Эти группы кодов объединяются для формирования 10-битного символа, который передается по каналу связи. Символы данных часто обозначаются как D.x.y, где x изменяется в диапазоне от 0 до 31, а y – от 0 до 7. Стандарты, использующие кодирование 8b/10b, также определяют до 12 специальных символов (или управляющих символов), которые могут быть отправлены вместо символа данных. Они часто используются для обозначения начала кадра, конца кадра, состояния простоя канала, пропуска и подобных условий уровня канала. По крайней мере один из них (например, символ «запятая») необходим для определения выравнивания 10-битных символов. Они обозначаются как K.x.y и имеют кодировку, отличную от любой из кодировок символов D.x.y. Поскольку кодирование 8b/10b использует 10-битные символы для кодирования 8-битных слов, некоторые из возможных 1024 (10-битных, 2¹⁰) символов могут быть исключены для обеспечения ограничения максимальной длины последовательности в 5 одинаковых бит и для гарантии того, что разница между количеством нулей и единиц не превышает двух. Некоторые из 256 возможных 8-битных слов могут быть закодированы двумя различными способами. Используя эти альтернативные кодировки, схема способна обеспечить долгосрочный баланс постоянного тока в последовательном потоке данных. Это позволяет передавать поток данных по каналу с высокочастотными характеристиками, например, через трансформаторно-связанную витую пару Ethernet или оптические приемники с автоматической регулировкой усиления.

Таблицы кодирования и байтовое кодирование

Обратите внимание, что в следующих таблицах для каждого входного байта (представленного как ), A обозначает наименее значимый бит (LSB), а H – наиболее значимый (MSB). Выходные данные получают два дополнительных бита, i и j. Биты передаются от LSB к MSB: a, b, c, d, e, i, f, g, h и j; то есть код 5b/6b, за которым следует код 3b/4b. Это обеспечивает уникальность специальной последовательности битов в символах-разделителях. Остаточное влияние на поток в виде количества передаваемых нулей и единиц поддерживается в виде текущей дисперсии (RD), а влияние скорости нарастания/спада компенсируется выбором кодирования для последующих символов. Код 5b/6b является кодом парной дисперсии, как и код 3b/4b. Каждое 6- или 4-битное кодовое слово содержит либо равное количество нулей и единиц (дисперсия равна нулю), либо существует в паре форм: одна с двумя нулями больше, чем единиц (четыре нуля и две единицы, или три нуля и одна единица, соответственно), и одна с двумя единицами больше, чем нулей. Когда используется 6- или 4-битный код с ненулевой дисперсией (количество единиц минус количество нулей, то есть –2 или +2), выбор кодирования с положительной или отрицательной дисперсией должен быть таким, чтобы изменить текущую дисперсию. Иными словами, коды с ненулевой дисперсией чередуются.

Код 5b/6b (абцдей)

Вход RD = −1 RD = +1 Вход RD = −1 RD = +1 Код EDCBA a b c d e i Код 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 также используется для символа 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 также используется для символа K.27.7 D.12 01100 001101 D.28 11100 001110 D.13 01101 101100 D.29 † 11101 101110 010001 также используется для символа K.29.7 D.14 01110 011100 D.30 † 11110 011110 100001 также используется для символа K.30.7 D.15 01111 010111 101000 D.31 11111 101011 010100 не используется 111100 000011 K.28 ‡ 11100 001111 110000 используется исключительно для символов K.28. x

† также используется для 5b/6b кода K. x.7
‡ используется исключительно для 5b/6b кода K.28. y

Пример кодирования D31.1

+ D31.1 для обоих случаев бегущей диспропорции Вход RD = −1 RD = +1 Код DEC HEX HGF EDCBA abcdei fghj abcdei fghj D31.1 63 3F 001 11111 101011 1001 010100 1001

Альтернативы

Обратите внимание, что 8b/10b – это схема кодирования, а не конкретный код. Хотя многие приложения используют один и тот же код, существуют несовместимые реализации; например, Transition Minimized Differential Signaling, которая также преобразует 8 бит в 10, но использует для этого совершенно другой метод. Кодирование 64b/66b, представленное для интерфейсов 10GBASE R Physical Medium Dependent (PMD) 10 Gigabit Ethernet, является альтернативой с меньшими накладными расходами по сравнению с 8b/10b, имея двухбитные накладные расходы на каждые 64 бита (вместо восьми бит) закодированных данных. Эта схема значительно отличается по конструкции от кодирования 8b/10b и не обеспечивает явного баланса постоянного тока, короткой длины последовательности и плотности переходов (эти характеристики достигаются статистически посредством скремблирования). Кодирование 64b/66b было расширено до вариантов 128b/130b и 128b/132b для PCI Express 3.0 и USB 3.1 соответственно, заменяя кодирование 8b/10b в более ранних версиях каждого стандарта.