Взгляд на 10g ethernet со стороны fpga разработчика

Взгляд на 10g ethernet со стороны fpga разработчика

Всем привет!Многие эксперты знают, что топовое сетевое оборудование применяет особые чипы для обработки трафика. Я принимаю участие в разработке таких молотилок и желаю поделиться своим опытом в создании таких высокопроизводительных девайсов (со интерфейсами 10/40/100G Ethernet).
Смотрите кроме этого: Intel планирует выпустить серверные процессоры Xeon со встроеннй FPGA

Восьмиядерный процессор XeonКорпорация Intel собирается включить в состав собственных чипов Xeon программируемую пользователем вентильную матрицу (FPGA). FPGA разрешает пользователю переконфигурировать логику работы интегральной схемы, оптимизировав её под ответ конкретной задачи. Это разрешает ускорить кое-какие вычисления на порядок, либо намного снизить энергопотребление.

Иначе говоря это разрешит каждому пользователю создавать на кристалле Xeon личный сопроцессор, заточенный под конкретные задачи. Чип Xeon+FPGA будет применять сокет LGA2011.

Для нового канала сетевики значительно чаще берут оптику, несколько SFP+ модулей, втыкают их в девайсы: лампочки весело загораются, пакеты начинают приходить: чип начинает их передавать получателям. Но как чип приобретает пакеты из среды передачи? В случае если весьма интересно, то вам очень рады под кат.IEEE 802.3Ethernet — это стандарт, принятый ассоциацией IEEE.

Стандарты 802.3 охватывают все вероятные разновидности Ethernet (от 10M до 100G). Сконцентрируемся на конкретной реализации физического уровня: 10GBASE-R («простой» 10G, без излишеств). На этом рисунке продемонстрированы уровни модели OSI да и то, как они отображаются на подуровни протокола Ethernet.Подуровни:

  • PHY — физический подуровень.
  • MAC — подуровень управления доступом к среде.

PHY разделяется на следующие части:

  • PMD — снабжает приёма и передачи отдельных бит на физическом интерфейсе.
  • PMA — снабжает сериализацию/десериализацию данных, конечно выделение клока из последовательных данных (на приеме)
  • PCS — снабжает скремблирование/дескремблирование, конечно кодирование/декодирование (64b/66b) блоков данных
  • XGXS — XGMII расширитель: употребляется в случае если PHY и MAC находится на расстоянии друг от друга (опционален).
  • RECONCILIATION — подуровень, показывающий XGMII в сигналы MAC.

Термины:

  • Medium — среда передачи.
  • MDI — интерфейс, зависимый от среды передачи данных.
  • XGMII — 10G интерфейс, свободный от среды передачи данных. Задача XGMII — обеспечить дешёвое соединение и простой между PHY и MAC.
  • XAUI — 10G интерфейс подключения к трансиверу.

Для каждого типа физического уровня возможно собственная реализация отдельных PHY-подуровней: используется разное кодирование, разные частоты передачи (длины волн), но четкое разделение на уровни везде прослеживается. Наличие свободного от среды интерфейса (XGMII) упрощает разработку прикладной логики чипов, т.к. при любом подключении разработчик где-то возьмёт XGMII. О том, что собой воображает XGMII мы поболтаем позднее. PMD Самым родным к среде расположен подуровень PMD: его задачи решают особые модули, каковые прекрасно известны сетевым экспертам:

Тип модуляИнтерфейс
XENPAK XAUI
X2 XAUI
XFP XFI
SFP+ SFI

В данной таблице уже имеется знакомая сокращение: XAUI. Покинем рассмотрение XENPAK/X2 на середину статьи, и обратимся к самые популярным модулям: XFP и SFP+.XFI/SFI XFI и SFI практически являются одинаковый интерфейс: дифпара, трудящаяся на скоростях от 9.95 до 11.10 гигабод. Комплект скоростей обуславливается тем, что пара стандартов смогут применять данный интерфейс: от 10GBASE-W WAN до 10GBASE-R over G.709.

Нас интересует 10GBASE-R LAN с скоростью в 10.3125 гигабод. Одна дифпара употребляется для приема, вторая — для передачи. XFI/SFI подключается напрямую к ASIC/FPGA Задачи подуровней PMA и PCS возможно решить на чипе, где мы будем делать предстоящую обработку Ethernet пакетов (по окончании того, как выделим их из XGMII). Напомню, что в подуровне PMA нужно на приеме выделить тактовую частоту и десериализовать входной сигнал.

Такую работу смогут выполнить особые аппаратные блоки, каковые для других задач нельзя использовать. Эти блоки именуются трансиверами. На их подробное описание может уйти целая статья: кому весьма интересно, смогут взглянуть взглянуть блок-схему трансиверов в FPGA компании Altera. По окончании десериализации, эти попадают в подуровень PCS, где производится дескремблирование и декодирование (64b/66b) и отдаются данные в виде XGMII в сторону MAC’a.

На передаче выполняются обратные действия. PCS возможно реализован как с применением особых аппаратных блоков (Hard PCS), так и посредством логики, дешёвой пользователю (Soft PCS). Очевидно, это утверждение справедливо лишь для FPGA: в ASIC’ах всё сделанно аппаратно.

Производители FPGA закладывают аппаратные PCS блоки для стандартных протоколов, экономя разработчику ресурсы и время FPGA. Наличие таких блоков весьма подкупает, т.к. многие стандартные протоколы по опыту трудятся из коробки, и для большинства из них код предоставляется безвозмездно производителем FPGA. Подключение через внешний чип-трансивер Трансиверы в FPGA — вещь дорогая, дополнительный дюжина трансиверов может существенно увеличить цену на чип.

Имеется более недорогие чипы, с трансиверами, трудящимися на меньших скоростях (смогут сериализовать/десериализовать эти на меньших частотах). Вторым высокочастотным интерфейсом, что выяснен в секции 4 стандарта 802.3, есть XAUI: 4 дифференциальные пары с скоростью передачи в 3.125 гигабод (для одной линии передачи). При применении XAUI появляется опциональный уровень XGXS, что разрешает отдалить PHY и MAC друг от друга на расстояние. К примеру, делать в различных чипах.

Задачу PMA и PCS в таком подключении смогут выполнить особые 10G трансиверы (Допускаю, что может появиться путаница, т.к. чуть ранее «трансиверы» вспыли в FPGA, и сейчас тут появляется данный термин. Кстати, модули XFP/SFP+ также именуются трансиверами.)Примеры 10G трансиверов:

  • www.vitesse.com/products/productLine/10GE-PHYs
  • www.marvell.com/transceivers/alaska-x-gbe/
  • www.broadcom.com/products/Physical-Layer/10-Gigabit-Ethernet-PHYs

Данный трансивер есть отдельным чипом, ставится между XFP/SFP+ нашим чипом «и» модулем, что будет обрабатывать Ethernet пакеты. По факту, таковой трансивер применяя блоки PMA и PCS создаёт преобразование XFI/SFI в XGMI, а после этого XGMII преобразуется в XAUI.XAUI подается на ASIC/FPGA, где употребляются трансиверы, подобные тем, что были рассмотрены ранее, но на скорости 3.125G. Работа трансивера отличается от того варианта, как это происходит в режиме 10G:

  • Нужно четыре трансивера (четыре аппаратных блока), т.к. употребляется 4 дифпары для этого интерфейса.
  • XAUI PCS применяет кодирование 8b/10b. В 10G PCS используется 64b/66b.

XAUI PCS на выходе выдает интерфейс XGMII.Кое-какие PHY-трансиверы смогут сходу выдавать на пины интерфейс XGMII и тогда трансиверы в ASIC/FPGA не нужно применять:У для того чтобы способа подключения имеется весомые недочёты:

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

Подключение XENPAK/X2Как я и давал слово, мы добрались до этих типов модулей. Несложно заметить, что их подключение сводится ко второму варианту, лишь без применения внешнего чипа-трансивера. Модуль возьмет на себя задачи подуровней PMD, PMA и PCS.

XGMIIXGMII определяется в clause 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 Gbit/s. Значительно чаще от защелкивания по обоим фронтам клока уходят, повышая частоту либо ширину данных:

  • Шина 36 бит (32 + 4) на частоте 312.5 МГц.
  • Шина 72 бит (32 * 2 + 4 * 2) на частоте 156.25 МГц.

Чем меньше частота, тем несложнее обработать эти сведенья и тем более бюджетные чипы возможно применять. Работу на частотах в ~300 МГц смогут себе позволить лишь топовые (просматривай, дорогие) FPGA.Для того, что бы «выцепить» из XGMII пакет используется особое MAC-ядро:

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

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

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

В одном приборе сделано подключение по первому варианту: SFI напрямую входит в FPGA. В двух вторых по второму варианту (с применением трансивера и XAUI). Так же имеется девайс у которого имеется подключение как напрямую SFI, так и через XAUI, но без трансивера (FPGA подключается к второму чипу).Для применения внешних трансиверов (да и по большому счету, большинства специальных чипов) нужно подписать NDA. С этим особенных неприятностей значительно чаще не появляется.

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

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

На какое количество я осознаю, эти firmware создают умную настройку эквалайзеров, без которой определенный тип модулей будет трудиться с битовыми неточностями. Один из таких SFP+ модулей (с лимитирующим усилителем) лечился как раз так.

В случае если подключаться без трансивера, то такие настройки нужно готовить самим для ASIC/FPGA, что возможно непростой задачей.Наличие интерфейса, что свободен от среды передачи, весьма упрощает жизнь, т.к. код (application logic: парсеры, генераторы, анализаторы, фильтры, и пр.) весьма легко портировать из ветхих проектов в новые, т.к. не имеет значения, какой тип подключения употреблялся. Подключение (и обработка) 40G/100G к ASIC/FPGA похожа на 10G, но, в том месте имеется собственные нюансы.

В случае если будет весьма интересно, этому возможно будет посвятить отдельную статью, действительно, большой она не будет.Hello, habr!Заберём простой UDP-пакет с строчкой «Hello, habr!» и пошлём на прибор, что бы взглянуть, как он будет смотреться на XGMII.У меня на столе лежит разобранный девайс, на котором значительно чаще происходит тестирование новых фич: используем его для наглядного примера. Для этого подготовим особую прошивку и подключим отладчик, дабы заметить сигналы в чипа.

Подключение 10G сделано по второму варианту: посредством внешнего трансивера, что отдает эти по XAUI в сторону FPGA. Данный трансивер двухканальный: может трудиться с двумя SFP+.Как выглядит XGMII (и отечественный пакет) в FPGA:В этом приборе в FPGA употребляется 72 битная шина XGMII, трудящаяся на по хорошему фронту частоты 156.25 МГц. Легенда:

  • xgmii_rxc — комплект контрольных сигналов.
  • xgmii_rxd — комплект сигналов данных (разбито на байты для удобства).
  • IDLE — сигналы отсутствия передачи пакета.
  • PREAMBLE — преамбула, обозначает начало передачи пакета.
  • L2_HDR — заголовок 2 уровня: Ethernet.
  • L3_HDR — заголовок 3 уровня: IP.
  • L4_HDR — заголовок 4 уровня: UDP.
  • MSG — отечественное сообщение («Hello, habr!»).
  • PAD — заполнение. Присуствует в пакете, в случае если изначальная протяженность нужной нагрузки была меньше 60 байт.
  • FCS — проверочная сумма пакета. По ней возможно выяснить, побился пакет на протяжении пересылки, либо нет.
  • TERM — сигнал окончания передачи пакета.

Возможно подметить, что для получения Ethernet пакета осталось мало: отыскать его конец и начало (по контрольным знакам) и вырезать лишнее: IDLE, PREAMBLE и TERM. Благодарю за уделенное внимание и время! В случае если показались вопросы, задавайте без сомнений.P.S.Благодарю моих сотрудников по цеху des333 и paulig за советы и конструктивную критику.

Случайная статья:

FPGA 25G Ethernet MAC Demo


Похожие статьи:

Комментирование и размещение ссылок запрещено.

Обсуждение закрыто.