Кодирование 8b/10b¶
Кодирование 8b/10b — это линейный код, используемый в цифровых системах передачи данных для преобразования 8-битных символов (байтов) в 10-битные кодовые слова. Основная цель кодирования — обеспечение баланса по постоянному току (DC-balance) и достаточного количества перепадов сигнала (переходов между 0 и 1) для надёжного восстановления тактовой частоты на принимающей стороне. Код был разработан в 1983 году Альбертом Уидмером (Albert Widmer) и Питером Франкашеком (Peter Franaszek) в компании IBM.
¶История
Потребность в кодировании 8b/10b возникла в связи с развитием высокоскоростных последовательных интерфейсов. В начале 1980-х годов стандартные методы передачи данных, такие как NRZ (Non-Return-to-Zero), сталкивались с проблемами: длинные последовательности одинаковых битов приводили к потере синхронизации и дрейфу постоянной составляющей сигнала. Инженеры IBM, работавшие над системой ESCON (Enterprise Systems Connection), предложили схему, которая гарантирует, что в любом 10-битном кодовом слове количество единиц и нулей отличается не более чем на 2, а максимальная длина серии одинаковых битов (run length) не превышает 5. Это обеспечивало надёжную работу электрических и оптоволоконных линий связи.
Первоначально код применялся в проприетарных интерфейсах IBM, но к концу 1990-х годов был стандартизирован в таких открытых спецификациях, как Fibre Channel (ANSI X3.230-1994) и Gigabit Ethernet (IEEE 802.3z-1998). Впоследствии он лёг в основу многих других протоколов, включая Serial ATA, DisplayPort, PCI Express (до версии 3.0), USB 3.0 (SuperSpeed) и HDMI.
¶Принцип работы
Кодирование 8b/10b разбивает каждый 8-битный байт данных на две части: 5 старших битов (5b) и 3 младших бита (3b). Каждая часть кодируется отдельно с использованием таблиц подстановки, что даёт 6-битный код (6b) и 4-битный код (4b) соответственно. Затем эти два кода объединяются в 10-битное кодовое слово.
¶Кодирование 5b/6b
Пять битов данных (от D0 до D4) преобразуются в 6-битный код. Из 32 возможных комбинаций 5-битных входных данных 30 используются для передачи данных, а 2 зарезервированы для специальных управляющих символов. Для каждого 5-битного значения существует два возможных 6-битных кода — один с нулевой или положительной диспаритетностью (disparity), другой с отрицательной. Выбор между ними определяется текущим состоянием диспаритетности (running disparity, RD) кодера.
¶Кодирование 3b/4b
Три младших бита данных (от D5 до D7) преобразуются в 4-битный код. Аналогично, для каждого 3-битного значения существует два варианта 4-битного кода с разной диспаритетностью. Все 8 комбинаций 3-битных данных используются для кодирования.
¶Управление диспаритетностью
Кодер отслеживает текущую диспаритетность (RD) — разницу между количеством единиц и нулей, переданных с момента последнего сброса. RD может быть положительной (больше единиц) или отрицательной (больше нулей). При выборе кодового слова для очередного байта кодер стремится минимизировать абсолютное значение RD. Если текущая RD положительна, выбирается вариант с отрицательной диспаритетностью, и наоборот. Это гарантирует, что долговременная средняя диспаритетность стремится к нулю.
¶Кодовые слова
В результате кодирования получается 10-битное кодовое слово, которое содержит от 4 до 6 единиц. Код 8b/10b имеет 256 возможных кодовых слов для данных (D-символы) и 12 специальных управляющих символов (K-символы). Управляющие символы используются для обозначения границ пакетов, сигналов синхронизации, состояния канала и других целей. Они выбираются таким образом, чтобы не конфликтовать с кодовыми словами данных.
¶Характеристики
Код 8b/10b обладает следующими ключевыми характеристиками:
- Избыточность: на каждые 8 бит полезных данных передаётся 10 бит, что приводит к 25% служебной нагрузки (overhead). Эффективная скорость передачи данных составляет 80% от физической скорости линии.
- Баланс по постоянному току: код гарантирует, что разница между количеством единиц и нулей в любом кодовом слове не превышает 2, а накопленная диспаритетность не превышает 3.
- Максимальная длина серии (run length): не более 5 последовательных одинаковых битов. Это обеспечивает достаточное количество перепадов сигнала для восстановления тактовой частоты.
- Обнаружение ошибок: код может обнаруживать одиночные и некоторые множественные ошибки. Принимающая сторона проверяет, является ли полученное 10-битное слово допустимым кодовым словом. Любое недопустимое слово считается ошибкой.
¶Применение
Кодирование 8b/10b широко применяется в различных высокоскоростных последовательных интерфейсах:
- Gigabit Ethernet (1000BASE-X): первый стандарт Ethernet, использующий кодирование 8b/10b. Скорость передачи данных 1 Гбит/с достигается при физической скорости линии 1,25 Гбит/с.
- Fibre Channel: используется в сетях хранения данных (SAN) со скоростями от 1 до 4 Гбит/с (в более поздних версиях заменён на 64b/66b).
- Serial ATA (SATA): интерфейс для подключения накопителей. SATA 1.0 (1,5 Гбит/с) и SATA 2.0 (3 Гбит/с) используют кодирование 8b/10b. Начиная с SATA 3.0 (6 Гбит/с), код также применяется, но с некоторыми модификациями.
- PCI Express (до версии 3.0): в PCIe 1.0 (2,5 ГТ/с) и PCIe 2.0 (5 ГТ/с) используется кодирование 8b/10b. В PCIe 3.0 (8 ГТ/с) оно заменено на более эффективное 128b/130b.
- USB 3.0 (SuperSpeed): использует кодирование 8b/10b для передачи данных со скоростью 5 Гбит/с.
- DisplayPort: интерфейс для передачи видео и аудио. В версиях 1.0–1.2 используется 8b/10b, в DisplayPort 1.3 и выше — 128b/132b.
- HDMI: в некоторых режимах (например, при использовании TMDS) применяется кодирование 8b/10b.
- Thunderbolt: интерфейс, объединяющий PCI Express и DisplayPort, использует 8b/10b в первых версиях.
- ESCON и FICON: проприетарные интерфейсы IBM для подключения к мейнфреймам.
¶Преимущества и недостатки
¶Преимущества
- Простота реализации: кодирование и декодирование выполняются с помощью таблиц подстановки, что требует минимальных вычислительных ресурсов.
- Надёжность: гарантированное количество перепадов сигнала и баланс по постоянному току обеспечивают стабильную работу линий связи.
- Обнаружение ошибок: встроенная проверка кодовых слов позволяет быстро выявлять ошибки передачи.
¶Недостатки
- Высокая избыточность: 25% служебной нагрузки снижает эффективную пропускную способность канала.
- Ограниченная скорость: для современных высокоскоростных интерфейсов (10 Гбит/с и выше) избыточность становится критичной, поэтому код 8b/10b уступает место более эффективным схемам, таким как 64b/66b, 128b/130b или 128b/132b.
¶Сравнение с другими кодами
Кодирование 8b/10b является одним из представителей семейства линейных кодов с балансом по постоянному току. Более ранние коды, такие как манчестерский код (Manchester code), имели 100% избыточность (2 бита на 1 бит данных). Позднее были разработаны более эффективные коды:
- 64b/66b: используется в 10 Gigabit Ethernet и PCI Express 3.0. Избыточность составляет 3,125% (2 служебных бита на 64 бита данных).
- 128b/130b: применяется в PCI Express 3.0 и 4.0. Избыточность — 1,56%.
- 128b/132b: используется в DisplayPort 1.3 и выше. Избыточность — 3,125%.
Несмотря на появление более эффективных кодов, 8b/10b остаётся широко распространённым благодаря своей простоте и проверенной временем надёжности.
¶Интересные факты
- Код 8b/10b не является единственным кодом с таким названием. Существуют также коды 4b/5b (используется в Fast Ethernet) и 5b/6b, но они менее распространены.
- Специальные управляющие символы (K-символы) часто используются для обозначения начала и конца пакета. Например, в Gigabit Ethernet символ /S/ (Start of Packet) и /T/ (End of Packet) являются K-символами.
- Алгоритм кодирования был запатентован IBM (US Patent 4,486,739), но впоследствии стал общедоступным и используется в открытых стандартах.
¶Источники
- Albert X. Widmer, Peter A. Franaszek. "A DC-Balanced, Partitioned-Block, 8B/10B Transmission Code". IBM Journal of Research and Development, 1983.
- IEEE Standard 802.3z-1998 — Gigabit Ethernet.
- ANSI X3.230-1994 — Fibre Channel Physical and Signaling Interface (FC-PH).
- Donald L. Schilling, Charles Belove. "Electronic Circuits: Discrete and Integrated". McGraw-Hill, 1989.
- William Stallings. "Data and Computer Communications". Pearson, 2013.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


