Аппаратная реализация приемопередатчика пакетов Ethernet
Статьи по теме

Проект аппаратной реализации приемопередатчика пакетов Ethernet на ПЛИС
Введение
Разработанная реализация приемопередатчика пакетов Ethernet является полностью аппаратной. На сегодняшний день во множестве проектов на DE2 используется встроенный порт Ethernet, но ни один из этих проектов не затрагивает тему создания платформы, которую бы можно было использовать для создания более высокоуровневых протоколов. Во множестве проектов используется процессорное ядро NIOS II для низкоуровневого управления Ethernetом. Главным недостатком таких проектов является отсутствие полностью аппаратной реализации, на основании которой можно было бы с легкостью построить протоколы более высокого уровня.
Одной из преследуемых при разработке данного проекта целей является продемонстрировать другим разработчикам свои наработки, чтобы они могли реализовать Ethernet без необходимости использования NIOSа в своих проектах.
Высокоуровневое проектирование
Основания для разработки
Если тенденции сохранятся, проблемы связи вскоре выйдут на первый план при разработке портативных устройств. Взглянув на разработки прошлых лет можно убедиться, что отсутствует достаточно хорошая аппаратная реализация Ethernet, которая бы позволила иерархически нарастить более высокоуровневые протоколы обмена данными. Другие проекты, использующие Ethernet, были реализованы с помощью NIOS II, что занимало значительную площадь кристалла и усложняло систему в целом. Поэтому было принято решение о необходимости создания данного проекта, что бы дать возможность другим разработчикам использовать уже готовые наработки в своих собственных проектах.
Логическая структура
На высоком уровне проект устройства состоит из одного кристалла FPGA в сочетании с чипом Davidcom Ethernet. В проекте производится инициализация чипа, и затем предоставляются механизмы для отправки и получения пакетов. Код разработан согласно иерархической модели проектирования для того, что бы упростить дальнейшее послойное добавление более высокоуровневых протоколов связи.
На соответствующей схеме в разделе «Аппаратная чать» изображена иерархия модулей проекта.
Был создан модуль верхнего уровня иерархии, который содержит все необходимое для отправки и получения пакетов оборудование. Добавление модуля верхнего уровня иерархии (Ethernet Top) расширяет реализацию, позволяя отправлять кадры по Ethernet. В соответствии со своим слоем абстракции эти модули будут выполнять возложенные на них задачи и затем помещать необходимые данные в пакет (кадр).
Стандарты
Поскольку проект должен быть максимально универсальным, он выполнен в соответствии с требованиями стандарта RFC. Согласно стандарту, пакеты Ethernet имеют структуру, изображенную на рисунке ниже.
Структура пакетов Ethernet
Аппаратная часть
Обзор
Система включает в себя несколько модулей более низкого уровня. Блок-схема физических связей между модулями показана ниже. Все связи между внешним оборудованием и чипом Davidcom Ethernet осуществляются модулем верхнего уровня иерархии (Ethernet Top). Пример программы для связи с чипом согласно описаному ниже алгоритму приложен к проекту.
Внутренние модули управляют потоком данных и доступом к порту чипа Davidcom используя разрешающие сигналы от управляющего модуля (арбитра). После получения разрешения от арбитра, данные передаются в модуль контроллера Ethernet, который содержит конечный автомат для связи с чипом Davidcom.
Блок-схема иерархии проекта
Подробное описание модуля верхнего уровня иерархии (Ethernet Top) и предоставляемого им интерфейса
EthernetTop.v
В данном файле описан модуль (Ethernet Top), который создает экземпляры блоков, необходимых для реализации протокола связи канального уровня, и соединяет их между собой по вышеприведенной блок-схеме. В этом файле создаются экземпляры модулей отправки (Send Ethernet) и получения (Receive Ethernet) пакетов. Также в этом файле описан интерфейс, необходимый для использования всего проекта пользователем. Поскольку модуль также охватывает контроллер DM9000a, в нем описаны все порты для подключения к чипу Davidcom Ethernet. Более подробно это описано в последующих разделах.
Порты интерфейса предоставляют конечному пользователю возможность использовать присутствующий на плате контроллер Ethernet как черный ящик. Интерфейс использует технологию синхронизации для получения и отправки пакетов. Как для получения, так и для отправки используется 4 основных порта и 1 дополнительный:
-
вход запроса приема/передачи;
-
16-битный вход/выход данных;
-
выход для оповещения о готовности данных к получению/отправке;
-
выход для оповещения о завершении приема/передачи;
-
дополнительный выход для сигнала прерывания по завершении получения пакетов.
На верхнем уровне абстракции, что бы связаться с контроллером, внешний модуль начнет передавать сигнал приема/передачи, устанавливая на соответствующей линии запроса (request line) высокий уровень. Внешний модуль должен ждать появления высокого уровня на линии готовности данных (data ready line). Сигнал на линии запроса должен присутствовать до тех пор, пока все данные не будут приняты или отправлены. Подключаемому внешнему модулю будет передан сигнал, сообщающий об окончании приема/передачи. Пример использования дан в файле TXDemo.v
Описание модуля отправки пакета (Send Ethernet Packet)
SendEthernetPacket.v
Этот модуль предоставляет функционал для отправки пакетов Ethernet по MAC-адресу. Данный модуль предназначен для создания пакета Ethernet как это описано в разделе «Стандарты». Первоначальным состоянием конечного автомата является состояние ожидания. Как только внешний модуль запрашивает отправки пакета, начинается процесс чтения MAC-адресса источника из внутренних регистров чипа Davidcom Ethernet. Далее прочитанные данные сохраняются в регистрах модуля для последующего использования при конструировании пакета.
Первыми байтами, отправляемыми в TX буфер являются MAC-адреса. Адрес назначения устанавливается равным 0xFFFF поскольку это широковещательное сообщение (broadcast message), которое будет видно всем подключенным устройствам, это можно изменить в коде примера. MAC-адрес источника затем считывается из регистров и отправляется в TX буфер. Как только MAC-адрес был отправлен, модуль устанавливает тип протокола. Далее данные считываются со входов и помещаются в TX буфер. Модуль детектирует окончание передачи данных отправителем, когда на линии запроса (request line) установился низкий уровень. Как только передача успешно завершена, модуль отправителя сообщает об этом интерфейсному модулю.
Описание модуля получения пакета (Receive Ethernet Packet)
ReceiveEthernetPacket.v
Следующим модулем канального уровня является модуль получения пакета, который служит для построения пакета Ethernet и предоставления интерфейса внешнему устройству. Этот модуль намного проще предыдущего (модуля отправки) поскольку его конечный автомат имеет всего 4 состояния. Первоначальным состоянием является состояние ожидания. После прихода запроса приема (receive request), модуль ждет предоставления ему доступа к данным и как только данные пришли, он переходит к считыванию данных заголовка (header data). Эти данные затем складываются в дамп и далее не используются, поскольку в модуле не реализована проверка CRC-хеша. После прочтения заголовка, часть данных пакета поступает на выход данных (data out port) потактово. Когда все данные прочитаны, на линии окончания передачи (transmission complete line) устанавливается высокий уровень и удерживается в течении одного такта перед возвратом конечного автомата в состояние ожидания.
Модуль управления верхним уровнем иерархии (Top Level Controller)
DM9000aController.v
Модуль управления верхним уровнем иерархии инкапсулирует взаимодействие с чипом Davidcom и необходимые для инициализации, отправки и получения пакетов обращения к нему. В этом модуле создаются экземпляры нескольких других модулей, например, модуля отправки и получения (TX and RX controller modules), модуля доступа к регистрам, модуля инициализации и модуля определения прерываний. Все эти модули связываются с контроллером Ethernet под контролем сигналов от арбитра. Модуль управления Ethernet следит за таймингом битов и связью с чипом Davidcom.
Модуль управления Ethernet (Davidcom DM9000a Ethernet Controller)
Чип Davidcom
DM9000a предоставляет несколько интерфейсных портов для связи: порт chip select, порт выбора команды (command port) для выбора типа адрес/данные, порт разрешения записи (write enable port), порт разрешения чтения (read enable port) и 16-битный порт данных. Поскольку один порт данных используется и для записи, и для чтения, модуль управления определяет читаются данные или записываются.
Чтобы записать данные в один из регистров чипа, необходимо строгое соблюдение таймингов и последовательности обмена данными. Для начала записи в чип Davidcom, необходимо установить режим записи адреса. Таким образом значение на 16-битной линии данных будет означать адрес регистра, в который необходимо произвести запись. Записываемые данные должны присутствовать на линии как минимум в течении одного такта. Минимальное рекомендуемое время перед началом записи данных в регистры составляет 2 такта. Порядок записи для данных такой же, как и для установки адреса с разницей лишь в значении на линии порта выбора команды (command port). Тайминговые (временные) диаграммы более подробно описаны в даташите к чипу Davidcom
DM9000a в разделе 10.3.4.
Аналогичным образом происходит и процесс чтения данных из чипа. Для этого сначала в регистр записывается адрес, установленный на 16-битной линии данных, однако затем вместо того, что бы установить записываемые данные на линии и подать команду записи, подается команда чтения и данные считываются с линии. Чип имеет встроенный механизм автоинкрементирования адреса регистра чтения, что делает возможным последовательное чтение из регистров без необходимости каждый раз устанавливать новый адрес. Тайминги чтения более подробно описаны в даташите к чипу Davidcom
DM9000a в разделе 10.3.3.
Анализ полученных результатов
Скорость
После инициализации, обмен информацией с чипом происходит на скорости в 100Mbps. Можно наблюдать как пакеты непрерывно и без ошибок расспостраняются по простой сети типа точка-точка. Также помимо трафика от устройства, можно наблюдать пакеты от ПК, отправляемые в сеть с целью обнаружения присутствующих в ней устройств.
Качество и точность
После множества проведенных тестов и исправления ошибок, получилось разработать контроллер, который способен передавать Ethernet- пакеты без ошибок. Поскольку обмен пакетами низкоуровневый, используя ПО Wireshark была проведена проверка отправляемых и принимаемых пакетов. Был протестирован обмен пакетами в сети при смешанном режиме работы устройства. Тесты в высокозагруженных сетях, например кластерных, не проводились, так что точность обмена в высокозагруженных сетях требует более подробного исследования. Как вариант, можно реализовать ARP либо другой протокол туннельного уровня и тем самым отказаться от использования смешанного режима.
Применимость в реальных проектах
Разработанная реализация является полностью модульной и легко интегрируемой в будущие проекты. Для упрощения понимания основных принципов работы прилагается пример использования, в котором добавлена поддержка работы на уровне MAC. Дополнительные уровни могут быть реализованы, следуя примеру реализации уровня MAC.
Безопасность
Поскольку весь проект реализован на плате Altera DE2, соответствие большинству требований к безопасности уже заложено в конструкции платы. Однако крайне желательно, что бы во время тестирования на плате DE2, она находилась на антистатической подложке и не была накрыта какими-либо сторонними предметами.
Итоги
Полученную реализацию можно назвать успешной, несмотря на высокую сложность организации взаимодействия с чипом Davidcom
DM9000a.
Благодаря иерархическому подходу построения дизайна возможна аппаратная реализация множества транспортных протоколов вплоть до UDP в дальнейшем, особенно благодаря имеющемуся примеру реализации уровня MAC.
Адаптация материалов: Ходнев Т.А., ДК-11, НТУУ «КПИ», каф. КЭВА.
Источник: Корнелловский институт