Перейти к содержанию

Код 8b/10b

Через разделительный конденсатор или оптический модуль нельзя передать длинную серию нулей: постоянная составляющая уходит, а приёмник теряет такт. Код 8b/10b решает обе задачи ценой двух лишних бит на байт.

Обновлено Редакция GAW

8b/10b — линейный код, который отображает каждый байт данных в 10-битное слово. Коды разработала IBM в начале 1980-х годов; они гарантируют несколько перепадов в каждом слове и баланс по постоянному току — в среднем поровну нулей и единиц (TI SNLA187, разд. 3.4). На нём работают гигабитные SerDes и многие стандарты: TI называет Ethernet, Fibre Channel и InfiniBand на скоростях 1,0625, 1,25, 2,5 и 3,125 Гбит/с (разд. 3.6).

Что даёт

  • Короткие серии. Не больше 5 одинаковых бит подряд. Это ограничивает спектр: при скорости линии 1 Гбит/с основная частота сигнала лежит между 100 МГц (серии по 5 одинаковых бит) и 500 МГц (чередование 1010…). TI в том же примере приводит и удвоенные значения — 200 МГц и 1 ГГц, называя их первой гармоникой; так или иначе, нижняя граница спектра ограничена, что облегчает подавление излучения (SNLA187, разд. 3.6). Частые перепады нужны и приёмнику, чтобы восстанавливать такт из данных.
  • Баланс по постоянному току. По формулировке TI, у слов данных разность единиц и нулей +2, 0 или −2, и текущая разность (running disparity) потока всегда лежит между +2 и −2. В описаниях самого кода текущую разность обычно задают двумя состояниями, RD− и RD+, и кодер по ним выбирает один из двух вариантов слова. Среднее значение сигнала постоянно, поэтому поток проходит через разделительные конденсаторы и оптические модули без смещения, а межсимвольная интерференция меньше, и кабель может быть длиннее. В руководстве TI по тактовым сигналам 8b/10b стоит в одном ряду с тактом со скважностью 50 % и манчестерским кодом как данные, с которыми развязка конденсаторами работает лучше всего (SNAA103, гл. 6).
  • Обнаружение ошибок. Большинство из 1024 возможных 10-битных комбинаций — недопустимые слова данных. Десериализатор помечает их как ошибку: TI сравнивает это с контролем бита чётности — число ошибочных бит так не посчитать, но качество линии видно (разд. 3.6).
  • Управляющие символы. Кроме слов данных, код определяет служебные символы: маркеры пакетов и кадров, флаги неисправности, символы выравнивания.

Граница слов

Чтобы приёмник нашёл начало 10-битных слов в сплошном потоке, передатчик сначала посылает символ-запятую (comma) — например, K28.5 на рис. 3-4 SNLA187. Его битовая последовательность никогда не появляется в обычных данных и служит надёжным маркером. Выровнявшись, приёмник переводит 10-битные слова обратно в байты (разд. 3.4).

Цена

Каждые 8 бит данных занимают 10 бит линии: скорость линии на 25 % выше скорости данных, и пятая часть передаваемых бит — служебная (наш расчёт). Кроме того, десериализаторы 8b/10b восстанавливают такт по внешней опорной частоте, и требования к её точности и джиттеру жёсткие (разд. 3.4).

Родственные коды

Та же идея — меньше бит данных на символ ради перепадов и баланса — у кода 4B5B в Fast Ethernet. Манчестерский код идёт дальше: перепад в каждом бите и идеальный баланс, но вдвое больше полосы. Зачем баланс нужен выходам CML и линиям LVDS с развязкой конденсаторами — в статье «Интерфейс LVDS».

Частые вопросы

Почему с 8b/10b линия работает на 25 % быстрее данных?

Каждые 8 бит данных передаются 10 битами линии: из 1,25 Гбит/с на линии остаётся 1 Гбит/с данных. Лишние два бита на байт покупают баланс нулей и единиц, частые перепады для восстановления такта, обнаружение части ошибок и управляющие символы.

Что такое текущая разность (running disparity)?

Разность между числом переданных единиц и нулей. TI в LVDS Owner’s Manual описывает её так: у слов данных разность +2, 0 или −2, и текущая разность потока всегда остаётся между +2 и −2. В описаниях самого кода её обычно задают двумя состояниями — RD− и RD+, — и по текущему состоянию кодер выбирает один из двух вариантов слова. Поэтому среднее значение сигнала постоянно и проходит через разделительные конденсаторы без смещения.

Как приёмник находит начало 10-битного слова?

По символу-запятой. Передатчик отмечает границу слов особым символом — например K28.5, — битовая последовательность которого никогда не встречается в обычных данных. Найдя её, приёмник выравнивает границы слов и дальше декодирует поток, помечая недопустимые 10-битные коды как ошибки.

Источники

  1. Texas Instruments. LVDS Owner's Manual: Including High-Speed CML and Signal Conditioning, 4th Edition (SNLA187, 2008) — разд. 3.4, рис. 3-4: каждый байт отображается в 10-битный код; коды разработаны IBM в начале 1980-х, гарантируют несколько перепадов за цикл и баланс по постоянному току; символ-запятая (K28.5) отмечает границу слов и не встречается в обычных данных; приёмник помечает недопустимые коды; нужна внешняя опорная частота; разд. 3.6: 8b/10b используют Ethernet, Fibre Channel, InfiniBand и др. на 1,0625, 1,25, 2,5 и 3,125 Гбит/с; наибольшая длина серии одинаковых бит — 5; пример: при 1 Гбит/с первая гармоника от 200 МГц до 1 ГГц, основная частота от 100 до 500 МГц; слова имеют разность +2, 0 или −2, текущая разность всегда между +2 и −2; баланс снижает межсимвольную интерференцию; недопустимые коды дают контроль ошибок, похожий на бит чётности; управляющие слова — маркеры пакетов, флаги, символы выравнивания
  2. Texas Instruments (National Semiconductor). Clock Conditioner Owner's Manual (SNAA103, 4Q 2006) — гл. 6, AC-Coupling: развязку конденсаторами применяют, чтобы согласовать смещения разных логических семейств (LVDS и PECL в оптических системах), защитить выходы на съёмных платах и не пускать постоянный ток между системами с разными потенциалами земли; лучше всего она работает со сбалансированными данными — тактом со скважностью 50 %, кодом 8b/10b, манчестерским кодом; синфазное смещение LVDS при развязке теряется

Нашли ошибку?