Опыт работы с ядром Ethernet ПЛИС Achronix

PDF версия
В цикле статей о ПЛИС Achronix рассказывалось о том, как работать с аппаратными ядрами PCIe и DDR 3. Пришло время описать работу, пожалуй, с наиболее интересным ядром, имеющимся в составе ПЛИС Achronix семейства Speedster22i, — с ядром Ethernet, позволяющим работать с 100G Ethernet. ПЛИС семейства HD, в том числе Speedster22i HD1000, используемая в отладочном наборе Speedster22i HD1000 Development Kit, содержат по два ядра 100 гигабитного Ethernet.

Краткое описание ядра

Состав и характеристики

Ядро реализует уровни MAC (Media Access Control), PCS (Physical Coding Sublayer) и PMA (Physical Media Attachment). Все уровни конфигурируются через шину SBUS либо статически, либо динамически.

На MAC-уровне осуществляется работа с кадрами Ethernet.

Главной задачей уровня PCS является перекодирование данных из параллельной формы в последовательную и обратно.

Уровень PMA составляют последовательные приемопередатчики, которые могут напрямую работать с модулями SFP, SFP+ или же CFP. В частности, для 10‑гигабитного Ethernet доступны протоколы CAUI и XFI (рис. 1).

Ядро Ethernet ПЛИС семейства Speedster22i

Рис. 1. Ядро Ethernet ПЛИС семейства Speedster22i

Ядро Ethernet содержит полностью интегрированный 10/40/100‑Гбит MAC-уровень. Согласно документации оно имеет следующие характеристики:

  • Соответствует спецификации стандарта IEEE Std 802.3ba‑2010.
  • Конфигурируется для работы в полнодуплексном режиме со скоростью 10/40/100 Гбит/с в одном из 5 режимов:
    • 1–12 каналов 10‑гигабитного Ethernet;
    • 1 канал 100‑гигабитного Ethernet, 1–2 канала 10‑гигабитного Ethernet;
    • 1–3 канала 40‑гигабитного Ethernet;
    • 1–4 канала 10‑гигабитного, 1–2 канала 40‑гигабитного Ethernet;
    • 1–8 каналов 10‑гигабитного, 1 канал 40‑гигабитного Ethernet.
  • Обеспечивает доступ к статистике согласно рекомендации IEEE 802.3 (базовые, обязательные и рекомендованные информационные и управляющие пакеты — clause 30, MIB, MIB-II, IETF RFC 2665, SNMP, RMON в соответствии с IETF RFC 2819).
  • Обеспечивает счетчики, чтобы генерировать соответствующие базово‑информационные объекты управления (MIB, MIB-II) согласно IETF RFC 2665 (в том числе его обновления до 10 Гбит) для SNMP (простой протокол сетевого управления).
  • Поддерживает фреймы с тэгами VLAN согласно 802.1q VLAN.
  • Дополнительное конфигурируемое поле FCS (Frame Check Sequence) как в передаваемых, так и в принимаемых фреймах.
  • Автоматическое расширение коротких пакетов при передаче и восстановление первоначальной длины при приеме.
  • Каждый уровень PCS имеет обратную связь в MAC-ядре по интерфейсам X/XL/CGMII для пересылки данных из передатчика непосредственно в приемник, без передачи в блоки PCS.
  • Для интерфейса 10G Base-R PCS передает константу 0x00ff в интерфейс SerDes.
  • Для интерфейса 40G/100G Base-R PCS передает неизмененные данные из MAC в SerDes (как определено в стандарте IEEE802.3ba).
  • Шина для доступа к регистрам управления устройством (DCR) или шина управления хостом.
  • Конфигурируемое управление потоком через фреймы управления Ethernet MAC (PAUSE frames; symmetrically or asymmetrically enabled).
  • Конфигурируемая поддержка сверхдлинных фреймов (jumbo-frames) любой длины.
  • Каждый слой PCS реализует автоматическое согласование, но не включает в себя обнаружение параллельных каналов, которое при необходимости реализуется в пользовательской логике.
  • При работе в режиме 10G ядро может быть сконфигурировано для работы со скоростями 10/100/1000 по протоколу SGMII/1000 Base-X PCS (вместо протокола XGMII/10G Base-R PCS, используемого в режиме 10G).
  • Полностью конфигурируемый межпакетный интервал (IPG — Inter-Packet Gap).
  • Опция проверки последовательности фреймов (FCS — Frame Check Sequence) (добавление и удаление).
  • Вставка и удаление маркера лана (Lane Marker) на уровне PCS.
  • Уровень MAC поддерживает паузы для управления потоком (Link Pause Flow Control) и управление потоком с учетом приоритета (PFC — Priority Flow Control), до 8 классов трафика.
  • Поддержка протокола синхронизации времени PTP IEEE1588 на уровне PCS.

 

Типовая схема подключения

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

Ядро Ethernet в виде компонента

Рис. 2. Ядро Ethernet в виде компонента

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

  • глобальные сигналы. К этому типу относятся сигналы тактовой частоты и сброса;
  • сигналы управления и статуса;
  • шины управления. Через них доступны регистры, управляющие работой ядра;
  • интерфейс записи/чтения фреймов, использующий FIFO;
  • внешние линии последовательного ввода/вывода.

Схема подключения ядра приведена на рис. 3. Светло-голубым цветом выделены модули, реализованные в программируемой логике ПЛИС.

Схема подключения ядра Ethernet

Рис. 3. Схема подключения ядра Ethernet

 

Регистровая структура

Ядро управляется специальными регистрами, доступными через особые шины, а именно SBUS. Это стандартная шина, применяемая для конфигурирования всех аппаратных ядер, содержащихся в ПЛИС серии Speedster22i, она представляет собой последовательный канал, который может работать с данными разрядностью как 8, так и 32 бит. В ядре имеется 13 шин SBUS: одна 32‑разрядная шина, управляющая MAC-уровнем, и 12 8‑разрядных шин, управляющих отдельными каналами уровня PCS. Управляющих регистров огромное количество (больше 1000), но, к счастью, они отлично задокументированы.

Опыт применения

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

Несмотря на сложность и универсальность самого ядра, оказалось, что использовать его в своем проекте совсем несложно, в чем автор убедился на личном опыте. Сделать собственный проект было решено после ознакомления с фирменным референс-дизайном. В этом референс-дизайне связь с компьютером шла через шину USB c эмулятором Com-порта, а программное обеспечение было написано на языках PERL и TCL. Такой дизайн мог использоваться только для изучения ядра Ethernet, а нам хотелось иметь проект, на основе которого можно было бы создавать собственные разработки с полезной функциональностью. Поэтому было решено подключить отладочную плату через шину PCI. В качестве языка для написания тест-программы выбрали C++. Проект реализован на демонстрационной плате HD1000 Dev Kit, о которой рассказывалось ранее [2]. Ниже описываются этапы выполнения проекта.

Проектирование

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

 Упрощенная структура тестового проекта

Рис. 4. Упрощенная структура тестового проекта

Основная структурная единица проекта — контроллер, выполняющий определенные для него функции. Каждый контроллер управляется через регистры, подсоединенные к шине PCI посредством аппаратного ядра PCI, входящего в ПЛИС HD1000.

Пока реализован вариант на один канал, хотя в дальнейшем предполагается использовать четыре канала Ethernet 10G, а возможно, и больше. На рис. 3 показана упрощенная схема. Все использованные в проекте контроллеры перечислены ниже:

  • контроллер буфера передатчика;
  • контроллер буфера приемника;
  • контроллер сигналов подачи тактовой частоты и сброса;
  • контроллер шины SBUS;
  • контроллер шины MDIO (I2C);
  • контроллер чтения состояния ядра Ethernet.

Кодирование

Затем модули были закодированы на языке System Verilog. Также были сконфигурированы необходимые аппаратные ядра и сгенерированы вспомогательные модули — FIFO и внутренние блоки памяти. Одновременно были написаны интегрированные тесты, а для отладки некоторых модулей и автономные тесты (рис. 5).

Генерация компонента ядра Ethernet в конфигурации 1x10G

Рис. 5. Генерация компонента ядра Ethernet в конфигурации 1x10G

Симуляция

Далее с помощью пакета QuestaSim от MentorGraphics была осуществлена верификация сначала отдельных модулей, а затем и системы в целом.

Имплементация

Имплементация проекта состояла из следующих шагов:

  • задание констрейнтов (ограничений);
  • синтез, выполняемый с помощью синтезатора Synplify Pro (рис. 6);
  • трассировка, реализуемая с помощью оболочки ICE, разработанной непосредственно Achronix (рис. 7).

Синтез

Рис. 6. Синтез

Трассировка. Отчет об утилизации

Рис. 7. Трассировка. Отчет об утилизации

 

Программное обеспечение

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

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

Все эти задачи берет на себя программа-монитор, написанная в виде консольного приложения на языке С++ в среде разработки Microsoft Visual Studio. Управление выполняется командами, подаваемыми оператором с клавиатуры. В программе (рис. 8) предусмотрены команды как низкого уровня (запись, чтение отдельных регистров по конкретному адресу), так и функционально-ориентированные команды (заполнение буфера, передача данных, сравнение переданных и принятых пакетов, вывод статистики и т. д.).

Программа-монитор для управления и тестирования проекта Ethernet 10G

Рис. 8. Программа-монитор для управления и тестирования проекта Ethernet 10G

Для работы данной программы необходим драйвер, входящий в состав референс-дизайна ядра PCI (дизайн доступен для зарегистрированных пользователей на сайте компании Achronix).

С помощью описанного приложения тестовый дизайн сначала отлажен, а затем проверен в режиме передачи и последующего приема данных в режиме loopback.

 

Результаты

В результате вышеописанных усилий появился проект, который может стать основой реальных разработок — Ethernet-карт, коммутаторов, маршрутизаторов и т. д. Как обычно, все исходники проекта доступны не только нашим клиентам, но и просто заинтересованным специалистам [5].

Особенности, которые необходимо учитывать при проектировании:

  1. Инициализация ядра. Поскольку ядро сложное, состоящее из различных подсистем (MAC, PCS, PMA), ему требуется определенная инициализационная последовательность. Она включает очередность снятия сигналов сброса, выдерживание интервалов между этими сигналами, а также инициализацию ядра через регистры. Впрочем, хост-компьютер легко справляется с этой задачей через программу-монитор.
  2. Для достижения высокой производительности системы требуется работа с шиной PCIe в режиме DMA. В описываемом тестовом проекте данный режим пока не используется, что ограничивает функциональность проекта только тестовыми функциями. Однако добавить режим DMA со стороны аппаратуры несложно. Основная работа при этом ложится на плечи программистов.
  3. Подключение оптических модулей. Оптические модули на 10G напрямую электрически подключаются к ПЛИС. Но из-за примененного на отладочной плате разъема CFP напрямую подключить модули формата SFP+ невозможно. Данная задача сейчас находится в процессе решения. Модули стандарта CFP, разумеется, подключаются напрямую, но у нас, к сожалению, их не оказалось.
  4. Несмотря на то, что реализованные в пользовательской логике модули выполняют достаточно сложные функции, они занимают очень немного ресурсов ПЛИС (отчет по утилизации приведен на рис. 7). Вообще, ПЛИС Speedster22i HD1000 оказалась чрезвычайно емкой, что позволяет реализовывать самые сложные проекты, не беспокоясь о нехватке ресурсов.

 

Заключение

На основе аппаратных ядер Ethernet и PCI создан тестовый проект, который может быть взят за основу для проектирования реальных телекоммуникационных устройств.

Тестовый проект проверен на отладочной плате в режиме loopback.

Даже такой относительно сложный проект занял удивительно мало ресурсов ПЛИС Speedster 22i HD1000.

Литература
  1. Руководство по использованию контроллеров 10G/40G/100G Ethernet на Speedster22i (англ.). achronix.com/wp-content/uploads/docs/Speedster22i_100GEthernet_User_Guide_UG029.pdf/ссылка утрачена/
  2. Плис Achronix — опыт освоения.
  3. Ядро PCI-express в ПЛИС Achronix — быстрый старт,
  4. Викулин В. Аппаратное ядро DDR3 ПЛИС Achronix и его применение // Современная электроника. 2015. № 3.
  5. Ссылка на архив описанного проекта. 
  6. Сайт представительства компании Achronix. 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *