Взгляд На 10G Ethernet С Точки Зрения Разработчика Fpga

Всем привет! Многим специалистам известно, что топовое сетевое оборудование использует для обработки трафика специальные чипы.

Я принимаю участие в разработке таких молотилок и хочу поделиться своим опытом создания таких высокопроизводительных устройств (с интерфейсами 10/40/100G Ethernet).

Для создания нового канала сетевики чаще всего берут оптику, пару модулей SFP+, подключают их к устройствам: лампочки радостно загораются, пакеты начинают поступать: чип начинает передавать их получателям.

Но как чип получает пакеты из среды передачи? Если вам интересно, то добро пожаловать под кат.



И??? 802.3

Ethernet — это стандарт, принятый IEEE. Стандарты 802.3 охватывают все возможные разновидности Ethernet (от 10M до 100G).

Остановимся на конкретной реализации физического уровня: 10GBASE-R («обычный» 10G, без излишеств).



Взгляд на 10G Ethernet с точки зрения разработчика FPGA

На этом рисунке показаны уровни модели OSI и то, как они сопоставляются с подуровнями протокола Ethernet. Подуровни:

  • ФИЗИЧЕСКИЙ — физический подуровень.

  • MAC — подуровень контроля доступа в окружающую среду.

ФИЗИЧЕСКИЙ делится на следующие части:
  • ПМД — обеспечивает передачу и прием отдельных битов по физическому интерфейсу.

  • П.

    М.

    А.

    — обеспечивает сериализацию/десериализацию данных, а также извлечение фрагмента из последовательных данных (при приеме)

  • ПКС — обеспечивает скремблирование/дескремблирование, а также кодирование/декодирование (64b/66b) блоков данных
  • XGXS — Расширитель XGMII: используется, если PHY и MAC расположены на расстоянии друг от друга (опционально).

  • ПРИМИРЕНИЕ — подуровень, преобразующий XGMII в сигналы MAC.
Условия:
  • Середина — среда передачи.

  • МДИ — интерфейс, зависящий от среды передачи данных.

  • XGMII — Интерфейс 10G, независимый от среды передачи данных.

    Цель XGMII — обеспечить простое и недорогое соединение между PHY и MAC.

  • ХАУИ — Интерфейс 10G для подключения к трансиверу.

Каждый тип физического уровня может иметь свою реализацию отдельных подуровней PHY: используются разное кодирование и разные частоты передачи (длины волн), но везде можно увидеть четкое разделение на уровни.

Наличие независимого от среды интерфейса (XGMII) упрощает разработку прикладной логики чипов, т.к.

при любом подключении разработчик где-то получит XGMII. О том, что такое XGMII, мы поговорим позже.



ПМД

Подуровень PMD расположен ближе всего к окружающей среде: его задачи решают специальные модули, хорошо известные сетевым специалистам:
Тип модуля Интерфейс
КСЕНПАК ХАУИ
Х2 ХАУИ
XFP XFI
SFP+ СФИ
В этой таблице уже присутствует знакомая аббревиатура: XAUI. Оставим рассмотрение XENPAK/X2 на середину статьи и обратимся к наиболее популярным модулям: XFP и SFP+.



XFI/SFI

XFI и SFI — это по сути один и тот же интерфейс: дифференциальная пара, работающая на скоростях от 9,95 до 11,10 гигабод. Диапазон скоростей определяется тем, что этот интерфейс могут использовать несколько стандартов: от 10GBASE-W WAN до 10GBASE-R over G.709. Нас интересует LAN 10GBASE-R со скоростью 10,3125 гигабод. Одна дифференциальная пара используется для приема, другая – для передачи.



XFI/SFI подключается напрямую к ASIC/FPGA.



Взгляд на 10G Ethernet с точки зрения разработчика FPGA

Задачи подуровней PMA и PCS можно решить на чипе, где мы будем осуществлять дальнейшую обработку Ethernet-пакетов (после того, как извлечем их из XGMII).

Напомню, что в подуровне PMA необходимо выбрать тактовую частоту на приеме и десериализовать входной сигнал.

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

Эти блоки называются трансиверами.

Их подробное описание могло бы занять целую статью: кому интересно, может посмотреть смотреть Структурная схема трансиверов на ПЛИС от Altera. После десериализации данные поступают на подуровень PCS, где выполняются дескремблирование и декодирование (64b/66b) и данные отправляются в форме XGMII на MAC. Во время передачи выполняются обратные шаги.

PCS может быть реализован либо с использованием специальных аппаратных блоков (Hard PCS), либо с использованием логики, доступной пользователю (Soft PCS).

Конечно, это утверждение справедливо только для FPGA: в ASIC все делается аппаратно.

Производители FPGA предоставляют аппаратные блоки PCS для стандартных протоколов, экономя время и ресурсы разработчиков FPGA. Наличие таких блоков очень подкупает, ведь.

многие стандартные протоколы По опыту, они работают «из коробки», и для большинства из них код бесплатно предоставляется производителем ПЛИС.



Подключение через внешний чип трансивера



Взгляд на 10G Ethernet с точки зрения разработчика FPGA

Трансиверы в FPGA дороги; дополнительные десять трансиверов могут существенно повысить цену чипа.

Есть более дешевые чипы, трансиверы которых работают на более низких скоростях (они могут сериализовать/десериализовать данные на более низких частотах).

Еще один высокочастотный интерфейс, определенный в разделе 4 стандарта 802.3, — это XAUI: 4 дифференциальные пары со скоростью передачи данных 3,125 гигабод (для одной линии передачи).

При использовании XAUI возникает дополнительный уровень XGXS, который позволяет дистанцировать PHY и MAC друг от друга.

Например, запустить на разных чипах.

Задачу PMA и PCS в таком соединении могут выполнять специальные 10G-трансиверы (допускаю, что может возникнуть путаница, ведь чуть раньше в ПЛИС появились «трансиверы», а теперь здесь появляется этот термин.

Кстати, XFP/SFP+ модули также называются трансиверами.

) Примеры трансиверов 10G:

Этот трансивер представляет собой отдельный чип, размещаемый между модулем XFP/SFP+ и «нашим» чипом, который будет обрабатывать Ethernet-пакеты.

Фактически такой трансивер использует блоки PMA и PCS для преобразования XFI/SFI в XGMI, а затем XGMII преобразуется в XAUI. XAUI передается на ASIC/FPGA, который использует приемопередатчики, аналогичные обсуждавшимся ранее, но со скоростью 3,125G. Работа трансивера отличается от того, как это происходит в режиме 10G:

  • Требуется четыре трансивера (четыре аппаратных блока), поскольку для этого интерфейса используются 4 дифференциальные пары.

  • XAUI PCS использует кодировку 8b/10b. ПК 10G использует 64b/66b.
XAUI PCS выводит интерфейс XGMII. Некоторые PHY-трансиверы могут сразу выводить на пины интерфейс XGMII, и тогда трансиверы в ASIC/FPGA использовать не нужно:

Взгляд на 10G Ethernet с точки зрения разработчика FPGA

Этот способ подключения имеет существенные недостатки:
  • Высокое потребление выводов: в версии XGMII один чип использует минимум 78 выводов, против 16 в версии XAUI.
  • Параллельные интерфейсы могут потребовать выравнивания дорожек на плате, что иногда является нетривиальной задачей.



Соединение XENPAK/X2



Взгляд на 10G Ethernet с точки зрения разработчика FPGA

Как я и обещал, мы дошли до таких типов модулей.

Нетрудно заметить, что их подключение сводится ко второму варианту, только без использования внешнего чипа-трансивера.

Модуль возьмет на себя задачи подуровней PMD, PMA и PCS.

XGMII

XGMII определен в пункте 46 стандарта 802.3. Этот интерфейс состоит из независимого приема и передачи.

Каждое направление имеет 32-битную шину данных (RXD/TXD [31:0]), четыре сигнала управления (RXC/TXC [3:0]) и тактовый сигнал, по которому работает направление (RX_CLK/TX_CLK).

Стандарт определяет, что шины данных и сигналов управления анализируются по каждому фронту тактовой частоты (DDR).

Сам пакет перемещается по шине данных; сигналы управления определяют начало, помогают «выбрать» начало и конец пакета, а также сообщают об авариях.

Значение RX_CLK/TX_CLK составляет 156,25 МГц.

Умножение 156,25 * 10^6 * 32 * 2 дает ровно 10 Гбит/с.

Чаще всего фиксации на обоих фронтах тактовой частоты можно избежать, увеличивая частоту или ширину данных:

  • Шина 36 бит (32+4) на частоте 312,5 МГц.

  • Шина 72 бита (32*2+4*2) на частоте 156,25 МГц.

Чем ниже частота, тем проще обрабатывать эти данные и тем больше бюджетных чипов можно использовать.

Только топовые (читай: дорогие) ПЛИС могут себе позволить работать на частотах ~300 МГц.

Чтобы «отхватить» пакет от XGMII, используется специальное ядро MAC:

  • Собственный.

    Купив лицензию на такое IP-ядро, вы (чаще всего) получаете зашифрованные исходники (без возможности модификации) и специального ограничения на количество чипов, в которых может использоваться это ядро, нет. Пример .

  • Открытый источник.

    Такие ядра очень полезны для новичков, потому что.

    Код открытый, и вы можете разобраться, как он работает. Лицензия на использование определяется отдельно.

    Пример .

  • Самописный.

Разумеется, у этого ядра есть передающая часть, которая «конвертирует» пакет в интерфейс XGMII. Чаще всего такое ядро реализуется на логике, доступной для пользовательских задач.

Однако существует производитель FPGA, которая реализует ядра MAC на аппаратном уровне, экономя ресурсы для пользователя.

MAC-ядро, выбрав пакет из XGMII и поместив пакет во внутреннюю память чипа, «передаёт» управление пакетом прикладной логике чипа: парсерам, фильтрам, системам коммутации и т.п.

Например, если чип находится на сетевой карте, и принимается решение: если пакет необходимо отправить на хост, его можно отправить с помощью PCIe в ОЗУ, подключенное к ЦП.



Личный опыт

L1 в основном занимаются схемотехники, которые раскладывают платы для устройств.

Программисты FPGA работают с этим только в начале аппаратного подъема: когда XGMII работает и все трансиверы прошли тесты, тогда мы концентрируемся на том, как делать обработку трафика.

Одно устройство подключается по первому варианту: SFI выходит напрямую в ПЛИС.

В двух других - второй вариант (с использованием трансивера и XAUI).

Также есть устройство, имеющее подключение как напрямую SFI, так и через XAUI, но без трансивера (ПЛИС подключается к другому чипу).

Чтобы использовать внешние трансиверы (да и большинство специализированных чипов), необходимо подписать NDA. Чаще всего с этим особых проблем не возникает. Вместе с NDA выдаются различные документы, например, настройки регистра чипа.

По опыту работы с трансиверами двух разных производителей отмечу, что при подъеме аппаратуры первой партии стабильно возникают некоторые проблемы с настройкой трансивера, которые решались относительно быстро: трансиверы многофункциональны и иногда приходится экспериментировать, чтобы настроить необходимый режим работы.

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

Одним из преимуществ использования чипа трансивера является то, что вместе с документацией может распространяться набор настроек прошивки, который необходимо загрузить в трансивер при установке определенного типа модуля.

Насколько я понимаю, в этих прошивках есть хитрые настройки эквалайзеров, без которых определенный тип модулей будет работать с битовыми ошибками.

Именно так поступили с одним из таких модулей SFP+ (с ограничительным усилителем).

Если вы подключаетесь без трансивера, то вам придется самостоятельно подготовить такие настройки для ASIC/FPGA, что может оказаться нетривиальной задачей.

Наличие интерфейса, независимого от среды передачи, значительно упрощает жизнь, потому что.

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

Подключение (и обработка) 40G/100G к ASIC/FPGA аналогично 10G, однако есть некоторые нюансы.

Если интересно, этому можно было бы посвятить отдельную статью, хотя она и не будет большой.



Привет, хабр!

Возьмем обычный UDP-пакет со строкой «Привет, хабр!» и отправьте его на устройство, чтобы посмотреть, как оно будет выглядеть на XGMII.

Взгляд на 10G Ethernet с точки зрения разработчика FPGA

У меня на столе лежит разобранный.

устройство , где чаще всего тестируются новые функции: мы используем его как наглядный пример.

Для этого подготовим специальную прошивку и подключим отладчик, чтобы увидеть сигналы внутри чипа.

Подключение 10G осуществляется вторым вариантом: с помощью внешнего трансивера, отправляющего данные через XAUI на ПЛИС.

Этот трансивер двухканальный: он может работать с двумя SFP+.



Взгляд на 10G Ethernet с точки зрения разработчика FPGA

Как XGMII (и наш пакет) выглядит внутри FPGA:

Взгляд на 10G Ethernet с точки зрения разработчика FPGA

Это устройство использует 72-битную шину XGMII внутри FPGA, работающую на частоте положительного фронта 156,25 МГц.

Легенда:

  • xgmii_rxc — набор управляющих сигналов.

  • xgmii_rxd — набор сигналов данных (для удобства разбит на байты).

  • ПРАЗДНЫЙ — сигналы отсутствия передачи пакета.

  • ПРЕАМБУЛА — преамбула, указывает на начало передачи пакета.

  • L2_HDR — Заголовок уровня 2: Ethernet.
  • L3_HDR - Заголовок уровня 3: IP.
  • L4_HDR - Заголовок уровня 4: UDP.
  • глутамат натрия — наше сообщение («Привет, хабр!»).

  • ПАД - наполнение.

    Присутствует в пакете, если исходная длина полезных данных была меньше 60 байт.

  • ФТС — контрольная сумма пакета.

    С его помощью можно определить, был ли пакет поврежден во время передачи или нет.

  • СРОК — сигнал окончания передачи пакета.

Как видите, для приема Ethernet-пакета осталось не так уж и много: найдите его начало и конец (с помощью управляющих символов) и отрежьте лишнее: ПРАЗДНЫЙ , ПРЕАМБУЛА И СРОК .

Спасибо за ваше время и внимание! Если у вас есть вопросы, задавайте без колебаний.

P.S. Благодарю коллег по цеху des333 И паулиг за конструктивную критику и советы.

Теги: #10g #10gbe #ethernet #FPGA #pls #FPGA #pls #xgmii #xaui #SFP #xfp #phy #сетевое оборудование #программирование #FPGA

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.