Российские IP-ядра стандарта SpaceWire
Идеи вообще ничего не могут осуществить.
Для осуществления идей требуются люди,
которые должны употребить практическую силу.
К. Маркс и Ф. Энгельс
Выгодная интеграция
Рост убытков в высокотехнологичной отрасли производства интегральных микросхем с начала 1980-х годов привел к значительному распространению fabless-модели вывода на рынок новых продуктов [1]. Собственные фабрики остались только у крупнейших корпораций, и некоторые из них сейчас активно сотрудничают с fabless-разработчиками, предоставляя им свои избыточные производственные мощности. Распространение и жизнеспособность такой модели развития стали толчком для появления множества новых компаний, основной специализацией которых была именно разработка, а не требующее значительных капиталовложений высокотехнологичное производство.
С развитием технологий и увеличением количества логических элементов на кристалле также имеет место тенденция использования компаниями-разработчиками уже готовых сложно-функциональных логических IP-блоков (ntellectual property — интеллектуальная собственность), разработанных в сторонних организациях. Такое разделение позволило дополнительно снизить затраты на разработку новых продуктов за счет многократного использования отлаженных модулей в проектах разных производителей, которые при таком сотрудничестве освобождаются от необходимости обучать или привлекать специалистов узкого профиля. Таким образом, помимо функций разработчиков, компании, выводящие на рынок готовые продукты, начали одновременно выполнять и функции интеграторов, объединяя и отлаживая совместную работу IP-ядер различных производителей на одном кристалле. Использование в своих разработках IP-ядер особенно выгодно интегратору, когда IP-ядро представляет собой некий стандартный модуль или модуль, в котором есть стандартные интерфейсы для общения с внешним миром. Именно такие IP-ядра требуют наибольших временных и материальных затрат на разработку, а главное — отладку и тестирование совместимости.
В нише программируемых логических интегральных схем (ПЛИС) использование IP-ядер играет важную роль, так как зачастую именно наличие тех или иных готовых модулей является одним из основных критериев выбора аппаратной платформы. В качестве IP-ядер для ПЛИС подразумевают Soft-ядра, которые предоставляются пользователям как в форматах исходного RTL-кода, так и в виде оптимизированного под конкретное семейство списка соединений (Netlist). В большинстве случаев это микропроцессорные ядра, микроконтроллеры и различные интерфейсные модули, разработка которых с самого начала является крайне ресурсоемкой и длительной задачей.
IP-ядра SpaceWire
Для поддержки пользователей микросхем ПЛИС корпорации Microsemi (ранее Actel Corp.), среди которых — большое количество ведущих предприятий российской аэрокосмической отрасли, дизайн-центр ЗАО «Актел.ру», в числе прочих, разработал IP-ядра протокола связи стандарта SpaceWire ECSS—E—ST-50-12C. Эти IP-ядра предназначены для многократного использования в пользовательских проектах и обеспечивают разработчикам надежный и уже отлаженный интерфейс связи, способный стать основополагающим внутри пользовательской системы; он также позволяет состыковать ее с внешними устройствами. При интеграции готовых IP-ядер от разработчика требуется лишь подключить его к своему проекту и убедиться, что получившаяся трассировка итогового проекта ПЛИС удовлетворяет требования по скорости работы.
Концепция протокола позволяет использовать общие линии связи для передачи команд управления, данных, а также телеметрической информации. С целью повышения надежности, а также увеличения пропускной способности между узлами сети могут быть организованы дублированные линии связи. Пользователю доступны три основных IP-ядра, с помощью которых можно организовать сеть SpaceWire любой сложности:
- кодек ECSS-E-ST-50-12C;
- маршрутизатор ECSS—E—ST-50-12C;
- контроллер удаленного доступа к памяти (УДП) RMAP (Remote Memory Access Protocol ECSS—E—ST-50-52C).
Кодек SpaceWire
Кодек SpaceWire представляет собой модуль, полностью готовый к интеграции в FPGA-проект. Кодек выполнен в соответствии со спецификацией стандарта SpaceWire ECSS-E-ST-50-12C и фактически является стандартным приемопередатчиком, способным устанавливать и поддерживать соединение, а также обмениваться данными с другими стандартными устройствами, поддерживающими этот протокол.
В соответствии со спецификацией для обмена информацией через физический уровень приемник и передатчик кодека используют DS-кодирование (рис. 1), что позволяет приемнику самосинхронизироваться с передатчиком путем восстановления частоты передачи из передаваемого кода. Из такого способа синхронизации вытекает одна из принципиальных особенностей стандарта — наличие постоянных информационных посылок между соединенными кодеками. При отсутствии пользовательских данных на шине SpaceWire передается специальная низкоуровневая команда NULL, которая информирует удаленную сторону о наличии соединения.
Кодек обеспечивает полностью дуплексный режим связи между узлами, то есть данные в обе стороны проходят по отдельным информационным линиям D и S. Физический уровень представляет собой соединение узлов с кодеками типа точка-точка двумя дифференциальными линиями LVDS в каждую сторону (рис. 2). Тип кабеля, разъемы и уровни сигналов подробно описаны в стандарте SpaceWire ECSS-E-ST-50-12C.
Структурно кодек состоит из приемника, передатчика и управляющего автомата. Автомат обеспечивает согласованную работу приемника и передатчика согласно стандарту, а именно:
- управляет включением и выключением приемника и передатчика;
- инициализирует периодический поиск кодека на удаленной стороне;
- обеспечивает установление поэтапного логического соединения с удаленным кодеком;
- отслеживает ошибки в последовательности данных и команд, обнаруженные приемником и, исходя из них, выдает информацию об ошибке управляющему, принимает решение о переустановке соединения.
В кодеке в соответствии со стандартом предусмотрен механизм контроля места в буфере удаленного узла. Этот механизм позволяет гарантированно доставлять данные к узлу назначения, исключая опасность потерять их часть вследствие переполнения промежуточных буферов. Пользовательскому уровню при этом требуется только предоставить кодеку данные для отправки, которые он будет передавать в сеть по мере готовности удаленной стороны. На приемной стороне пользовательскому проекту достаточно лишь вычитывать готовые данные из приемного буфера кодека. Такой достоверный способ доставки обеспечивается постоянным подсчетом количества отправленных передатчиком слов данных и информацией о количестве свободного места, постоянно обновляемой удаленным кодеком путем отправки специальных низкоуровневых команд.
Помимо механизма отслеживания свободного места, кодек поддерживает обмен метками времени. Такая метка имеет наивысший приоритет и передается сразу же после завершения отправки текущей команды или слова данных, передаваемого кодеком, не дожидаясь конца пакета. Это обеспечивается посредством специальных низкоуровневых команд протокола, которые вклиниваются в текущую передачу и не нарушают ее порядок. Для поддержки этой опции стандарта в каждом узле необходим специальный 6-разрядный регистр времени, который обновляется каждый раз по приходу новой метки.
Маршрутизатор
Сеть SpaceWire представляет собой совокупность узлов, соединенных по принципу точка-точка. При таком способе соединения узлы сети могут обмениваться информацией между собой посредством маршрутизаторов (рис. 3), которые направляют пришедшие пакеты данных к целевым узлам.
Для предоставления пользователям сетевых преимуществ протокола SpaceWire имеется готовое к интегрированию в проект IP-ядро маршрутизатора. Это устройство разрабатывалось согласно рекомендациям стандарта ECSS-E-ST-50-12C и обеспечивает путевую маршрутизацию пакетов. Маршрут пакета при таком принципе определяется заголовком пакета, который распознается маршрутизатором.
IP-ядро маршрутизатора имеет структуру, позволяющую помимо кодеков SpaceWireподключать к нему любые приемопередатчики (рис. 4), в том числе MIL-STD-1553B. Максимальное количество каналов маршрутизатора в соответствии со стандартом может составлять 31, на практике оно ограничивается необходимостью и количеством ресурсов ПЛИС. Маршрутизатор функционирует по неблокирующему принципу, то есть передача информации между разными каналами происходит независимо и одновременно. Для исключения потери данных, согласования интерфейсов и скоростей между маршрутизатором и кодеками всех каналов настоятельно рекомендуется использовать буферы FIFO для хранения как отправляемых, так и принимаемых данных. Использование буферов FIFO значительно упростит проект, при этом можно безопасно согласовать все использующиеся в проекте интерфейсы и тактовые домены.
Непосредственно маршрутизация информации между каналами и, соответственно, между узлами сети осуществляется на пакетном уровне. Структура пакета в сети SpaceWire достаточно проста (рис. 5) и не имеет каких-либо ограничений по длине. Длину пакета следует выбирать, исходя из выбранного протокола обмена, объемов и направлений перемещаемых данных, а также максимального допустимого времени занятости канала.
В разработанной версии маршрутизатора реализована путевая адресация пакетов, то есть первый байт, пришедший на маршрутизатор после команды конца пакета, содержит информацию об адресе выходного порта, куда следует направлять весь пакет до прихода команды конца пакета EOP(End Of Packet) или ошибочного конца пакета EEP (Error End Packet). Если для достижения адресата пакету необходимо пройти через несколько маршрутизаторов, то количество заголовков адреса увеличивается соответственно.
Приведем пример. Структурная схема сети представлена на рис. 6. Необходимо из узла 1 отправить сообщение из двух байтов в узел 3. Два байта сообщения — 8’h35, 8’h36. Для этого из узла 1 нужно отправить следующий пакет:
- 8’h03 — адрес выходного канала маршрутизатора 1;
- 8’h01 — адрес выходного канала маршрутизатора 2;
- 8’h35 — байт 1;
- 8’h36 — байт 2;
- конец пакета — EOP.
При этом байты 8’h03 и 8’h01 обрежутся в первом и втором маршрутизаторах соответственно. А в узел 3 придут только полезные данные 8’h35, 8’h36 и команда конца пакета.
Маршрутизатор поддерживает широковещательные пакеты, которые имеют наивысший приоритет перед всеми остальными. Широковещательные пакеты могут быть использованы, например, для решения задач синхронизации в сети или группового опроса подчиненных узлов.
Контроллер удаленного доступа к памяти
Для предоставления удаленного доступа к различным ресурсам узлов сети по стандартному протоколу пользователям доступен контроллер удаленного доступа к памяти (УДП) SpaceWire ECSS-E-ST-50-52C Remote memory access protocol (RMAP). SpaceWire ECSS-E-ST-50-52C является протоколом более высокого уровня по отношению к протоколу SpaceWire ECSS-E-ST-50-12C, так как оперирует на уровне пакетов данных. Реализация УДП является контроллером, обеспечивающим транспортный уровень стека сетевых протоколов, и позволяет удаленному узлу гарантированно выполнить операции с локальными ресурсами без участия процессора.
Контроллер УДП подключается к кодеку SpaceWire и получает доступ к пришедшим в буфер кодека данным (рис. 7). Такое подключение дает возможность контроллеру по первым байтам пришедшего к узлу пакета распознать посылки УДП и принимать решения об обработке приходящих пакетов:
- Первый байт заголовка — логический адрес получателя. При использовании контроллера УДП первый байт всегда должен совпадать с задаваемым в настройках контроллера значением логического адреса. В противном случае пакеты, адресованные другим получателям и случайно пришедшие к текущему узлу, уничтожаются и далее не обрабатываются.
- Второй байт заголовка — идентификатор принадлежности к протоколу верхнего уровня. Значение 8’h1 определяет пакет как обращение УДП ECSS-E-ST-50-52C. Пакеты с другими идентификаторами передаются контроллером УДП на обработку на пользовательском уровне или контроллерам, реализующим другие протоколы высоких уровней.
После первых двух байтов следуют другие поля заголовка пакета, которые определяют требуемую команду, необходимость ответа на нее и путевой адрес инициатора. Каждый заголовок пакета снабжен байтом контрольной суммы, защищающей от выполнения недостоверных команд.
С функциональной точки зрения контроллер позволяет производить транзакции с пользовательской подсистемой, в качестве которой может выступать произвольная память или регистры:
- Запись, в том числе с выдачей подтверждения об удачной транзакции узлу-инициатору. В зависимости от важности тех или иных посылок данных инициатор обращения может указать необходимость проверки целостности пакета перед записью в память. Для этого в пакете записи присутствует поле контрольной суммы. Для достоверной записи контролеру УДП потребуется доступ к промежуточному буферу FIFO, размер которого будет определять максимальную длину достоверного пакета.
- Чтение. Пакеты считанных из пользовательской подсистемы данных обязательно снабжаются полем контрольной суммы, которая может быть проверена при приеме данных инициатором.
- Чтение-изменение. Эта операция позволяет инициатору записать определенное количество байтов в пользовательскую подсистему через байты маски, которые также присутствуют в полях пакета. Для этого контроллер УДП сначала производит чтение пользовательской подсистемы, а затем последовательно записывает байты данных и маски, полученные от инициатора. В ответном пакете инициатору отправляются считанные из пользовательской подсистемы исходные данные.
Адаптер USB-SpaceWire
Для предоставления возможности пользователям протестировать разработанные дизайн-центром «Актел.ру» IP-ядра можно использовать специализированный адаптер USB-SpaceWire(рис. 8). Он представляет собой программно-аппаратный комплекс, состоящий из портативного USB2.0 совместимого устройства и программного обеспечения верхнего уровня для ПК, предназначенный для информационной связи между пользователем ПК и сетью SpaceWire.
Адаптер может быть эффективно использован на этапах отладки и тестирования сети SpaceWireи ее отдельных узлов, так как позволяет наблюдать все приходящие по сети пакеты данных, а также отправлять в сеть необходимые для тестирования пакеты. Устройство поддерживает протокол УДП ECSS-E-ST-50-52C и способно выдавать удаленному узлу команды записи и команды чтения. Интерфейс программы позволяет работать с бинарными файлами в режиме УДП, что может быть полезно, например, при загрузке «прошивки» в память удаленного узла.
Заключение
При огромных современных логических объемах микросхем применение готовых IP-ядер в проектах является практически единственным вариантом при разработке серьезных систем. Это относится в равной степени как к разработчикам устройств на базе ПЛИС, так и к разработчикам заказных микросхем. Использование IP-ядер позволяет специалистам сосредоточиться на проектировании конечного продукта, не отвлекаясь на разработку и отладку стандартных модулей, для которых существуют готовые решения.
В следующих статьях этой серии будут подробно рассмотрены другие функциональные IP-ядра, разработанные дизайн-центром компании «Актел.ру».
- Hurtarte J. S., Wolsheimer E. A., Tafoya L. M. Understanding Fabless IC Technology // 2007.
- NenniD. A Brief History of the Fabless Semiconductor Ecosystem — http://www.semiwiki.com/forum/content/2566-intel-versus-fabless-semiconductor-ecosystem.html
- Информационный портал SpaceWire Европейского космического агентства (European Space Agency, ESA) — www.spacewire.esa.int
- IP-модули контроллеров приема/передачи (кодека) SpaceWire ECSS-E-ST-50-12C, протокола удаленного доступа к памяти (RMAP) SpaceWire ECSS-E-ST-50-52C и универсального маршрутизатора. Общее описание—www.actel.ru