Опыт работы с ядром Ethernet ПЛИС Achronix
Краткое описание ядра
Состав и характеристики
Ядро реализует уровни 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 содержит полностью интегрированный 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) свидетельствует о том же.
Несмотря на огромное количество портов, работать с ядром несложно, так как его порты достаточно хорошо структурированы. Среди них можно выделить следующие группы:
- глобальные сигналы. К этому типу относятся сигналы тактовой частоты и сброса;
- сигналы управления и статуса;
- шины управления. Через них доступны регистры, управляющие работой ядра;
- интерфейс записи/чтения фреймов, использующий FIFO;
- внешние линии последовательного ввода/вывода.
Схема подключения ядра приведена на рис. 3. Светло-голубым цветом выделены модули, реализованные в программируемой логике ПЛИС.
Регистровая структура
Ядро управляется специальными регистрами, доступными через особые шины, а именно 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).
Основная структурная единица проекта — контроллер, выполняющий определенные для него функции. Каждый контроллер управляется через регистры, подсоединенные к шине PCI посредством аппаратного ядра PCI, входящего в ПЛИС HD1000.
Пока реализован вариант на один канал, хотя в дальнейшем предполагается использовать четыре канала Ethernet 10G, а возможно, и больше. На рис. 3 показана упрощенная схема. Все использованные в проекте контроллеры перечислены ниже:
- контроллер буфера передатчика;
- контроллер буфера приемника;
- контроллер сигналов подачи тактовой частоты и сброса;
- контроллер шины SBUS;
- контроллер шины MDIO (I2C);
- контроллер чтения состояния ядра Ethernet.
Кодирование
Затем модули были закодированы на языке System Verilog. Также были сконфигурированы необходимые аппаратные ядра и сгенерированы вспомогательные модули — FIFO и внутренние блоки памяти. Одновременно были написаны интегрированные тесты, а для отладки некоторых модулей и автономные тесты (рис. 5).
Симуляция
Далее с помощью пакета QuestaSim от MentorGraphics была осуществлена верификация сначала отдельных модулей, а затем и системы в целом.
Имплементация
Имплементация проекта состояла из следующих шагов:
- задание констрейнтов (ограничений);
- синтез, выполняемый с помощью синтезатора Synplify Pro (рис. 6);
- трассировка, реализуемая с помощью оболочки ICE, разработанной непосредственно Achronix (рис. 7).
Программное обеспечение
Ядро работает под управлением PC и управляется им через шину PCIe. PC, как хост-компьютер, обеспечивает:
- реализацию корректной последовательности подачи сигналов тактовой частоты и сброса;
- передачу, прием и проверку корректности данных;
- включение требуемых режимов (например, Loopback).
Все эти задачи берет на себя программа-монитор, написанная в виде консольного приложения на языке С++ в среде разработки Microsoft Visual Studio. Управление выполняется командами, подаваемыми оператором с клавиатуры. В программе (рис. 8) предусмотрены команды как низкого уровня (запись, чтение отдельных регистров по конкретному адресу), так и функционально-ориентированные команды (заполнение буфера, передача данных, сравнение переданных и принятых пакетов, вывод статистики и т. д.).
Для работы данной программы необходим драйвер, входящий в состав референс-дизайна ядра PCI (дизайн доступен для зарегистрированных пользователей на сайте компании Achronix).
С помощью описанного приложения тестовый дизайн сначала отлажен, а затем проверен в режиме передачи и последующего приема данных в режиме loopback.
Результаты
В результате вышеописанных усилий появился проект, который может стать основой реальных разработок — Ethernet-карт, коммутаторов, маршрутизаторов и т. д. Как обычно, все исходники проекта доступны не только нашим клиентам, но и просто заинтересованным специалистам [5].
Особенности, которые необходимо учитывать при проектировании:
- Инициализация ядра. Поскольку ядро сложное, состоящее из различных подсистем (MAC, PCS, PMA), ему требуется определенная инициализационная последовательность. Она включает очередность снятия сигналов сброса, выдерживание интервалов между этими сигналами, а также инициализацию ядра через регистры. Впрочем, хост-компьютер легко справляется с этой задачей через программу-монитор.
- Для достижения высокой производительности системы требуется работа с шиной PCIe в режиме DMA. В описываемом тестовом проекте данный режим пока не используется, что ограничивает функциональность проекта только тестовыми функциями. Однако добавить режим DMA со стороны аппаратуры несложно. Основная работа при этом ложится на плечи программистов.
- Подключение оптических модулей. Оптические модули на 10G напрямую электрически подключаются к ПЛИС. Но из-за примененного на отладочной плате разъема CFP напрямую подключить модули формата SFP+ невозможно. Данная задача сейчас находится в процессе решения. Модули стандарта CFP, разумеется, подключаются напрямую, но у нас, к сожалению, их не оказалось.
- Несмотря на то, что реализованные в пользовательской логике модули выполняют достаточно сложные функции, они занимают очень немного ресурсов ПЛИС (отчет по утилизации приведен на рис. 7). Вообще, ПЛИС Speedster22i HD1000 оказалась чрезвычайно емкой, что позволяет реализовывать самые сложные проекты, не беспокоясь о нехватке ресурсов.
Заключение
На основе аппаратных ядер Ethernet и PCI создан тестовый проект, который может быть взят за основу для проектирования реальных телекоммуникационных устройств.
Тестовый проект проверен на отладочной плате в режиме loopback.
Даже такой относительно сложный проект занял удивительно мало ресурсов ПЛИС Speedster 22i HD1000.
- Руководство по использованию контроллеров 10G/40G/100G Ethernet на Speedster22i (англ.). achronix.com/wp-content/uploads/docs/Speedster22i_100GEthernet_User_Guide_UG029.pdf/ссылка утрачена/
- Плис Achronix — опыт освоения.
- Ядро PCI-express в ПЛИС Achronix — быстрый старт,
- Викулин В. Аппаратное ядро DDR3 ПЛИС Achronix и его применение // Современная электроника. 2015. № 3.
- Ссылка на архив описанного проекта.
- Сайт представительства компании Achronix.