Кодирование 128b/130b
Кодирование 128b/130b — это линейный код, используемый в цифровых системах передачи данных для преобразования 128-битных блоков данных в 130-битные блоки, передаваемые по физическому каналу. Относится к классу блочных кодов с избыточностью, предназначенных для обеспечения самосинхронизации, баланса постоянной составляющей сигнала (DC-баланс) и обнаружения ошибок. Код был разработан в 2010-х годах и впервые стандартизирован в спецификациях PCI Express 3.0 (2009 год, как часть стандарта) и Fibre Channel (16GFC). Является эволюционным развитием кода 64b/66b, обеспечивая более высокую эффективность использования полосы пропускания (98,5 % против 96,9 % у 64b/66b) за счёт меньшей относительной избыточности.
История и предпосылки создания
С развитием высокоскоростных последовательных интерфейсов (PCI Express, SATA, USB, Ethernet) возникла необходимость в кодах, обеспечивающих низкую избыточность при высокой скорости передачи. Предшествующие коды, такие как 8b/10b, имели избыточность 25 % (10 бит на 8 бит данных), что ограничивало полезную пропускную способность. Код 64b/66b (избыточность 3,1 %) стал шагом вперёд, но для скоростей свыше 8 Гбит/с (например, PCI Express 3.0 — 8 ГТ/с) потребовалась ещё более эффективная схема. Код 128b/130b был разработан инженерами PCI-SIG (PCI Special Interest Group) и ANSI T11 (Fibre Channel) как компромисс между низкой избыточностью (1,5 %) и достаточной надёжностью синхронизации.
Первое массовое применение код получил в PCI Express 3.0 (2009 год), где заменил 8b/10b. В дальнейшем он был принят в стандартах Fibre Channel 16GFC (2011 год), 32GFC (2016 год) и 64GFC (2020 год), а также в DisplayPort 2.0 (2019 год) и USB4 (2019 год) в режиме передачи данных.
Принцип работы
Структура кадра
Код 128b/130b оперирует блоками длиной 130 бит. Каждый блок состоит из:
- 2 синхронизирующих бит (sync header) — первые два бита блока, которые не подвергаются скремблированию. Они служат для обнаружения границ блоков на приёмной стороне. Возможные значения: 01 (блок данных) или 10 (блок управления). Комбинации 00 и 11 считаются ошибкой синхронизации.
- 128 бит данных — полезная информация, которая перед передачей подвергается скремблированию.
Скремблирование
Для предотвращения длинных последовательностей одинаковых бит (что нарушает DC-баланс и затрудняет восстановление тактовой частоты) 128 бит данных скремблируются с помощью генератора псевдослучайной последовательности (PRBS). В PCI Express 3.0 используется полином x^23 + x^21 + 1 (или x^23 + x^18 + 1 в разных версиях). Скремблер синхронизируется по началу каждого блока, но его состояние не сбрасывается между блоками — это обеспечивает непрерывность псевдослучайной последовательности.
DC-баланс
В отличие от кода 8b/10b, который гарантирует нулевой DC-баланс на каждом символе, код 128b/130b не обеспечивает точного баланса. Вместо этого используется скремблирование, которое статистически выравнивает количество единиц и нулей. Для дополнительного контроля применяется мониторинг «бегущего расхождения» (running disparity) на уровне приёмника — если расхождение превышает порог, передатчик может вставить специальный управляющий символ для коррекции. Однако в стандартной реализации PCI Express 3.0 такие меры не предусмотрены — баланс считается достаточным за счёт скремблирования.
Управляющие блоки
Помимо блоков данных, код поддерживает блоки управления (control blocks), которые передают информацию о состоянии канала, сигналы сброса, выравнивания и т. д. Управляющие блоки имеют синхронизирующий заголовок 10 и содержат 128 бит, структурированных как 16 байт, каждый из которых может быть либо байтом данных, либо управляющим символом. Внутри блока управления используется дополнительное кодирование для различения типов управляющих последовательностей (например, SKP — пропуск, SDS — начало данных).
Характеристики и эффективность
Избыточность
Код 128b/130b добавляет 2 избыточных бита на каждые 128 бит данных, что составляет избыточность 1,5625 % (или 1,56 % в округлении). Для сравнения:
- 8b/10b: 25 %
- 64b/66b: 3,125 %
- 256b/257b (используется в Ethernet 25/50/100/200GbE): 0,39 %
Эффективность использования полосы пропускания
Полезная пропускная способность (raw data rate) составляет 128/130 ≈ 0,9846 от физической скорости передачи. Например, для PCI Express 3.0 с физической скоростью 8 ГТ/с (гигатранзакций в секунду) полезная скорость равна 7,877 Гбит/с на линию.
Задержка
Из-за отсутствия сложного декодирования (в отличие от 8b/10b, где требуется таблица преобразования) задержка кодирования/декодирования минимальна — порядка нескольких тактов. Скремблирование и дескремблирование также выполняются за один такт.
Применение
PCI Express
Код 128b/130b является основным для PCI Express версий 3.0, 4.0, 5.0 и 6.0. В PCI Express 3.0 (8 ГТ/с) он заменил 8b/10b, что позволило удвоить пропускную способность без увеличения физической частоты. В PCI Express 4.0 (16 ГТ/с) и 5.0 (32 ГТ/с) код остался неизменным. В PCI Express 6.0 (64 ГТ/с) используется модифицированная версия с PAM-4 (4-уровневая амплитудная модуляция) и кодированием 128b/130b с дополнительным FEC (прямая коррекция ошибок).
Fibre Channel
Стандарты Fibre Channel 16GFC (14,025 Гбит/с), 32GFC (28,05 Гбит/с) и 64GFC (56,1 Гбит/с) используют 128b/130b вместо 8b/10b, применявшегося в 8GFC и более ранних версиях. Это позволило увеличить скорость при сохранении совместимости на уровне протокола.
DisplayPort
DisplayPort 2.0 (2019 год) использует 128b/130b для передачи данных в режиме UHBR (Ultra High Bit Rate). Скорости: UHBR 10 (10 Гбит/с на линию), UHBR 13,5 (13,5 Гбит/с) и UHBR 20 (20 Гбит/с). Код заменил 8b/10b, применявшийся в DisplayPort 1.4.
USB4
USB4 (2019 год) в режиме передачи данных через туннелирование PCI Express использует 128b/130b. Для собственного протокола USB4 применяется кодирование 64b/66b.
Сравнение с другими кодами
| Характеристика | 8b/10b | 64b/66b | 128b/130b | 256b/257b |
|---|---|---|---|---|
| Избыточность | 25 % | 3,125 % | 1,5625 % | 0,39 % |
| DC-баланс | Гарант. | Стат. | Стат. | Стат. |
| Синхронизация | По битам | По блокам | По блокам | По блокам |
| Обнаружение ошибок | Да (код) | Нет (только FEC) | Нет (только FEC) | Нет (только FEC) |
| Применение | SATA, USB 3.0, PCIe 1.0/2.0 | 10GbE, 25GbE | PCIe 3.0+, 16GFC+ | 100GbE+ |
Критика и ограничения
Основным недостатком кода 128b/130b является отсутствие встроенного механизма обнаружения ошибок на уровне кодирования. В отличие от 8b/10b, где любая ошибка приводит к нарушению кодовой таблицы, в 128b/130b ошибка в данных может быть не замечена до уровня протокола (например, CRC). Это компенсируется использованием FEC (в PCIe 6.0) или CRC на более высоких уровнях.
Скремблирование, хотя и решает проблему DC-баланса, не гарантирует его при определённых паттернах данных (например, при передаче повторяющихся управляющих последовательностей). В некоторых реализациях (например, в Fibre Channel) предусмотрена вставка дополнительных символов для коррекции.
Код не обеспечивает тактовой синхронизации на уровне бит — для восстановления тактовой частоты требуется отдельный механизм (CDR — Clock and Data Recovery), работающий с 130-битными блоками.
Интересные факты
- Выбор 130 бит вместо 128+2 = 130 бит был сделан для того, чтобы синхронизирующий заголовок не был частью скремблируемых данных, что упрощает обнаружение границ блоков.
- В PCI Express 3.0 код 128b/130b позволил увеличить пропускную способность на линию с 2,5 Гбит/с (PCIe 1.0, 8b/10b) до 7,877 Гбит/с при той же тактовой частоте 2,5 ГГц.
- В стандарте Fibre Channel 32GFC код 128b/130b используется вместе с PAM-4 (4-уровневая модуляция), что даёт эффективную скорость 28,05 Гбит/с на линию.
Источники
- PCI Express Base Specification Revision 3.0 (2009), PCI-SIG.
- Fibre Channel Physical Interface-5 (FC-PI-5), ANSI INCITS 479-2011.
- DisplayPort 2.0 Standard, VESA (2019).
- USB4 Specification, USB-IF (2019).
- «High-Speed Serial Buses: 8b/10b, 64b/66b, 128b/130b and Beyond», IEEE Communications Magazine, 2012.
- «Coding Techniques for High-Speed Serial Links», Journal of Lightwave Technology, 2015.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


