Открыть сервис

Кодирование 64b/66b

Кодирование 64b/66b — это линейный код, используемый в цифровых телекоммуникациях и системах хранения данных для преобразования 64-битных блоков данных в 66-битные блоки перед передачей по физической среде. Основная цель кодирования — обеспечение синхронизации приёмника и передатчика, поддержание постоянного среднего уровня сигнала (DC-баланс) и обнаружение ошибок без значительного увеличения избыточности. Код 64b/66b является более эффективным по сравнению с более старыми схемами, такими как 8b/10b, поскольку его избыточность составляет всего около 3,125 % (против 25 % у 8b/10b). Он широко применяется в стандартах Ethernet (10GBASE-R, 40GBASE-R, 100GBASE-R), Fibre Channel, InfiniBand и других высокоскоростных интерфейсах.

История и предпосылки создания

Разработка кода 64b/66b была обусловлена необходимостью увеличения пропускной способности каналов связи при сохранении надёжности. В 1990-х годах доминирующим линейным кодом для высокоскоростных последовательных интерфейсов был 8b/10b, предложенный Альбертом Видмером и Питером Франкашом в 1983 году. Он гарантировал сбалансированность по постоянному току и достаточное количество перепадов сигнала для восстановления тактовой частоты, но имел высокую избыточность (25 %), что снижало эффективную скорость передачи данных.

С ростом требований к скорости (от 1 Гбит/с до 10 Гбит/с и выше) стало очевидно, что избыточность 8b/10b становится неприемлемой. В 1999 году Институт инженеров электротехники и электроники (IEEE) начал разработку стандарта 10 Gigabit Ethernet (10GbE), в рамках которого была предложена новая схема кодирования — 64b/66b. Она была стандартизирована в 2002 году в документе IEEE 802.3ae. Ключевыми разработчиками выступили специалисты компаний Intel, Cisco, Broadcom и других участников рабочей группы IEEE P802.3ae.

Принцип работы

Кодирование 64b/66b состоит из двух основных этапов: скремблирование данных и добавление служебного заголовка (синхрогруппы).

Скремблирование

Перед кодированием 64-битный блок данных (или управляющий блок) подвергается скремблированию с помощью генератора псевдослучайной последовательности (ПСП). Скремблирование выполняется для того, чтобы избежать длинных последовательностей одинаковых битов (например, серий из нулей или единиц), которые могут привести к потере синхронизации приёмника. В коде 64b/66b используется самосинхронизирующийся скремблер на основе линейной обратной связи сдвигового регистра (LFSR) с полиномом \(x^{58} + x^{39} + 1\). Скремблер инициализируется случайным значением при старте передачи, и его состояние не передаётся отдельно — приёмник восстанавливает его, анализируя поток данных.

Добавление синхрогруппы

После скремблирования к каждому 64-битному блоку добавляется двухбитный заголовок (синхрогруппа), который помещается в начало 66-битного блока. Синхрогруппа выполняет две функции:

  • Обозначение типа блока: «01» указывает на блок данных (Data block), «10» — на блок управления (Control block). Комбинации «00» и «11» являются недопустимыми и используются для обнаружения ошибок.
  • Обеспечение синхронизации: гарантированное наличие перепада сигнала (изменение от 0 к 1 или от 1 к 0) в каждом блоке, что позволяет приёмнику восстанавливать тактовую частоту.

Таким образом, на выходе кодера получается 66-битная последовательность, которая передаётся по каналу связи. Приёмник, получив поток битов, сначала выделяет синхрогруппы, определяет границы блоков, затем дескремблирует данные и извлекает исходные 64 бита.

Типы блоков

В коде 64b/66b различают два основных типа блоков, которые идентифицируются по синхрогруппе:

  • Блок данных (Data block): синхрогруппа «01». Содержит 64 бита скремблированных данных. Используется для передачи обычной информации (полезной нагрузки).
  • Блок управления (Control block): синхрогруппа «10». Содержит 64 бита, которые интерпретируются по-разному в зависимости от типа управляющего символа. Внутри блока управления выделяется поле из 8 бит, которое указывает на тип управляющей последовательности (например, начало кадра, конец кадра, ошибка, простой). Оставшиеся 56 бит могут содержать дополнительные данные, такие как зарезервированные коды или служебную информацию.

Использование двух типов блоков позволяет различать поток данных и служебные сигналы, необходимые для управления каналом (например, для поддержания связи в отсутствие полезной нагрузки).

Сравнение с другими кодами

Код 64b/66b является компромиссом между эффективностью и сложностью реализации. Основные отличия от других распространённых линейных кодов:

Характеристика8b/10b64b/66b128b/130b (PCIe 3.0)
Избыточность25 %3,125 %1,56 %
СкремблированиеНетДаДа
Сложность реализацииНизкаяСредняяВысокая
Максимальная скорость передачи (на 2000-е)До 1 Гбит/сДо 10 Гбит/с и вышеДо 8 Гбит/с (на линию)
DC-балансГарантированОбеспечивается скремблированиемОбеспечивается скремблированием

Код 8b/10b гарантирует сбалансированность по постоянному току и не требует скремблирования, но его избыточность делает его непригодным для скоростей выше 1 Гбит/с. Код 64b/66b, напротив, полагается на скремблирование для обеспечения DC-баланса, что снижает избыточность, но требует более сложной обработки сигнала. Код 128b/130b, используемый в PCI Express 3.0 и выше, ещё более эффективен, но его реализация сложнее и требует дополнительных механизмов коррекции ошибок.

Применение

Код 64b/66b нашёл широкое применение в нескольких ключевых областях:

Ethernet

Основная область применения — стандарты Ethernet серии 10GbE и выше:

  • 10GBASE-R (10 Gigabit Ethernet) — первая реализация кода 64b/66b, стандартизированная в IEEE 802.3ae.
  • 40GBASE-R и 100GBASE-R (40 и 100 Gigabit Ethernet) — используют 64b/66b в сочетании с мультиплексированием нескольких линий (например, 4 линии по 10 Гбит/с для 40GbE).
  • 25GBASE-R и 50GBASE-R — более поздние стандарты, также основанные на 64b/66b.

Fibre Channel

В Fibre Channel (стандарт FC-PI-4 и выше) код 64b/66b используется для скоростей 8, 16 и 32 Гбит/с. Он заменил более старый код 8b/10b, применявшийся в более медленных версиях (1, 2, 4 Гбит/с).

InfiniBand

В InfiniBand (стандарт EDR — Enhanced Data Rate, 25 Гбит/с на линию) и HDR (High Data Rate, 50 Гбит/с) применяется 64b/66b в сочетании с другими схемами модуляции.

Другие интерфейсы

  • Interlaken — протокол для соединения ASIC и сетевых процессоров, использующий 64b/66b.
  • RapidIO — последовательная версия (Serial RapidIO) для встроенных систем.
  • SATA Express — на ранних стадиях разработки рассматривался вариант с 64b/66b, но в итоге был принят 128b/130b.

Преимущества и недостатки

Преимущества

  • Высокая эффективность: избыточность всего 3,125 % позволяет передавать больше полезных данных при той же битовой скорости.
  • Хорошая синхронизация: двухбитная синхрогруппа гарантирует наличие перепада сигнала в каждом блоке, что упрощает восстановление тактовой частоты.
  • Скремблирование: предотвращает появление длинных серий одинаковых битов, что снижает требования к полосе пропускания и улучшает электромагнитную совместимость.
  • Обнаружение ошибок: недопустимые синхрогруппы («00» и «11») позволяют быстро выявлять ошибки на уровне блока.

Недостатки

  • Сложность реализации: требуется скремблер и дескремблер, что увеличивает задержки и потребление энергии.
  • Зависимость от скремблирования: при случайном совпадении начального состояния скремблера или при длительных помехах возможна потеря синхронизации, хотя это маловероятно.
  • Отсутствие гарантированного DC-баланса: в отличие от 8b/10b, код 64b/66b не гарантирует, что средний уровень сигнала будет нулевым в любой момент времени; баланс обеспечивается только статистически за счёт скремблирования.

Критика и альтернативы

Код 64b/66b подвергался критике за то, что его скремблер не является самосинхронизирующимся в полной мере — приёмник может потерять синхронизацию при длительном отсутствии перепадов сигнала в блоке, хотя синхрогруппа минимизирует этот риск. В ответ на это были разработаны более совершенные схемы, такие как 128b/130b (используется в PCI Express 3.0/4.0/5.0) и 256b/257b (используется в Ethernet 200GbE и 400GbE). Эти коды имеют ещё меньшую избыточность (1,56 % и 0,39 % соответственно), но требуют более сложных механизмов коррекции ошибок, таких как прямой код коррекции ошибок (FEC).

Тем не менее, 64b/66b остаётся одним из самых распространённых линейных кодов в высокоскоростных последовательных интерфейсах благодаря балансу между эффективностью, надёжностью и простотой реализации.

Источники

  • IEEE Standard 802.3ae-2002 — 10 Gigabit Ethernet.
  • IEEE Standard 802.3ba-2010 — 40 Gb/s and 100 Gb/s Ethernet.
  • Fibre Channel Physical Interface-4 (FC-PI-4) — INCITS 450-2009.
  • InfiniBand Architecture Specification, Volume 2, Release 1.3.
  • Widmer, A. X., & Franaszek, P. A. (1983). A DC-Balanced, Partitioned-Block, 8B/10B Transmission Code. IBM Journal of Research and Development.
  • Спецификация Interlaken Protocol, Revision 1.2.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →