Блоки SERDES в новых ПЛИС корпорации Microsemi. Часть 1
Введение
Уже много лет назад человечество пришло к выводу, что на сколько-нибудь значительные расстояния, например между двумя устройствами, данные лучше передавать последовательно, а не параллельно. В то же время внутри устройства данные неизбежно представлены в параллельном виде. Таким образом, перед отправкой из устройства во внешний мир их необходимо преобразовать из параллельного представления в последовательное, а на принимающей стороне выполнить обратное преобразование: из последовательного в параллельное.
Для выполнения этих задач сложился и развивается целый класс устройств. По-английски такие устройства называются serializer/deserializer, или сокращенно SERDES. Они выпускаются в виде отдельных наборов микросхем, например Channel Link фирмы National Semiconductor. Кроме того, уже давно блоки SERDES встраиваются как периферийные устройства во многие ПЛИС и системы на кристалле (СНК, они же System On Chip — SoC). Пользователю не надо заботиться о кодировании данных и прочих задачах, которые необходимо решать при передаче на большие расстояния. Ему достаточно подключить готовый модуль при помощи системы проектирования, сопровождающей выбранную ПЛИС или СНК.
Блоки SERDES, встроенные в ПЛИС семейств IGLOO2 и SmartFusion2 корпорации Microsemi (в микросхемах обоих семейств они одинаковые), предназначены для реализации последовательных интерфейсов передачи данных, работающих на скорости от 1 до 5 Гбит/с. Они поддерживают протоколы PCI Express и XAUI. Кроме того, существует механизм, который позволяет использовать приемники и передатчики SERDES с любым пользовательским протоколом, реализованным в ПЛИС. Этот механизм называется external physical coding sublayer (EPCS). Благодаря своей гибкости он способен реализовать такие протоколы, как JESD204 В, Gigabit Ethernet и SGMII.
При работе с EPCS каналы SERDES подключаются непосредственно к структуре ПЛИС (структура ПЛИС («FPGA fabric» в документации корпорации Microsemi) — в сложных микросхемах ПЛИС так называется собственно массив программируемой логики, в отличие от различных аппаратных блоков с заданной функциональностью)), при этом блоки SERDES конфигурируются в режиме соединения с физическим носителем (physical media attachment, PMA). Подключение выполняется в обход логики PCS (про PCS и другие сетевые интерфейсы нижних уровней можно прочитать, например, в статье «Взгляд на 10G Ethernet со стороны FPGA-разработчика» по адресу http://habrahabr.ru/post/234369/) интерфейсов PCI Express и XAUI, а пользовательская логика PCS реализуется в структуре ПЛИС, и сигналы интерфейса EPCS подключаются к блокам SERDES. Такой подход позволяет реализовать в ПЛИС семейств IGLOO2 и SmartFusion2 любой пользовательский высокоскоростной последовательный интерфейс.
IP-модуль CorePCS поддерживает программируемое кодирование и декодирование 8 b/10 b. Такой метод кодирования широко используется в некоторых протоколах, отсутствующих в готовых блоках интерфейсов SERDES для Microsemi SoC, поэтому CorePCS идеален для работы с этими протоколами. Он может быть сконфигурирован как передатчик, как приемник или же для двунаправленной передачи. Подробное описание IP-ядра CorePCS можно найти в [5].
Сегодня мы познакомимся с практическим руководством по использованию EPCS [1], которое предлагает корпорация Microsemi. В нем даются пошаговые инструкции по созданию проекта с EPCS при помощи инструмента Libero SoC System Builder. Это руководство продемонстрирует нам интерфейс EPCS и покажет, как работать с ним в пользовательских приложениях. Кроме того, для отладочного набора IGLOO2 Evaluation Kit мы найдем в нем полное описание маршрута проектирования начиная с создания нового проекта.
В результате выполнения последовательности заданий, предлагаемых в руководстве, мы узнаем, как:
- формировать в Libero SoC проект с использованием интерфейса EPCS;
- создавать тестовые воздействия для моделирования;
- моделировать проект;
- генерировать файлы для программатора;
- запускать демонстрационный проект с EPCS.
Для работы нам понадобятся:
- отладочный набор IGLOO2 Evaluation Kit версии C или более поздней;
- JTAG-программатор FlashPro4;
- два кабеля с вилками SMA на концах;
- кабель USB 2.0 с разъемами A и mini-B на концах для подключения UART;
- сетевой адаптер на напряжение 12 В с током нагрузки до 2 А;
- САПР Libero SoC v11.4 SP1.
На компьютере должен быть установлен клиент Microsoft.NET Framework 4 для запуска демонстрационной программы с графическим интерфейсом.
Перед началом работы надо скачать с сайта корпорации Microsemi архив с необходимыми файлами. В нем мы найдем файлы проекта, тестбенчи, скрипты и инсталлятор упомянутой демонстрационной программы.
Наше обучение пройдет в два этапа. Сначала мы загрузим в ПЛИС готовую прошивку, созданную службой поддержки корпорации Microsemi, и убедимся, что вся наша аппаратура и программное обеспечение исправны и работают нормально. Затем научимся создавать свой проект, пройдя по всем этапам его разработки.
Описание проекта
Этот учебный проект (рис. 1) демонстрирует передачу псевдослучайной двоичной последовательности (ПСДП, англ. — pseudorandom binary sequence, PRBS) или кодов счетчика через высокоскоростной интерфейс SERDES ПЛИС IGLOO2/SmartFusion2. Блок SERDES конфигурируется для работы со скоростью 2,5 Гбит/с. Коды ПСДП отправляются через канал 2 блока SERDES, а отсчеты с кодированием 8 b/10 b — через канал 1. В проекте представлены две демонстрационные задачи.
В задаче 1 трафик канала 2 непосредственно отправляется из генератора ПСДП, реализованного в структуре ПЛИС, в блок SERDES, а затем выводится из микросхемы для проверки соединения SMA. Входные разъемы SMA соединены с выводами приемников SERDES, через которые данные поступают обратно в устройство, в реализованную на структуре ПЛИС схему контроля.
В задаче 2 на пути следования данных установлен IP-модуль CorePCS. Он обеспечивает простое кодирование и декодирование 8 b/10 b. В этой задаче сигнал SERDES замыкается по трассе на печатной плате, а не через соединение SMA.
Генератор PRBS7 реализует полиномиальную ПСДП седьмого порядка (x7+x6+1) и генерирует непрерывную последовательность 10-разрядных псевдослучайных кодов. 10-разрядные посылки генератора передаются на частоте 39,3 МГц. Модуль генератора ПСДП работает на частоте 125 МГц.
Счетчик генерирует последовательные отсчеты, которые поступают на кодер 8 b/10 b в модуле CorePCS.
Контрольная схема ПСДП проверяет правильность приходящей ПСДП. При несовпадении принятой последовательности с отправленной контрольная схема сообщает об ошибке. Кроме того, контрольная схема содержит счетчик ошибок.
Аналогично контрольная схема счетчика проверяет правильность отсчетов, прошедших через декодер 8 b/10 b в модуле CorePCS.
Линия задержки используется для того, чтобы сбалансировать задержку данных в первом регистре структуры ПЛИС с приходом сигнала EPCS_RX_CLK. Эта линия имеет постоянное время задержки, которое может быть использовано в любом канале SERDES семейств IGLOO2/SmartFusion2.
Интерфейсы передатчиков и приемников (рис. 2) управляют временными соотношениями тактовой частоты и данных при обмене между интерфейсом EPCS и структурой ПЛИС.
Модуль CoreUART служит для связи с интерфейсом UART на плате IGLOO2 Evaluation Kit. Модули FabUART и Output Select представляют собой «склеивающую логику» для подключения генераторов, схем контроля и сигналов сообщения об ошибках к интерфейсу, который отправляет данные через UART для отображения в демонстрационной программе.
Работа с готовой прошивкой
Прежде чем создавать свой проект, посмотрим, как работает готовый демонстрационный проект от корпорации Microsemi.
Сначала подготовим к работе отладочную плату (рис. 3). Заметим, что отладочные платы IGLOO2 Evaluation Kit и SmartFusion2 Evaluation Kit совершенно одинаковы и различаются только типом установленной ПЛИС.
- Подключим программатор FlashPro4 к разъему для программирования J5.
- Подключим один конец кабеля USB 2.0 с разъемом mini-B к разъему J18 на плате.
- Подключим другой конец этого кабеля с разъемом A к порту USB компьютера.
- Подключим питание платы к разъему 12 В 2 А переключателем J6.
- Установим на компьютере драйвер преобразователя USB-UART, если это еще не сделано. Дистрибутив драйвера можно найти по адресу www.microsemi.com/soc/documents/CDM_2.08.24_WHQL_Certified.zip.
- Установим джамперы на плате так, как указано в таблице 1. Во время переключений джамперов питание платы должно быть выключено.
- Соединим двумя кабелями SMA разъемы SMA на правом краю платы (рис. 3): SERDES_0_TX02_P с SERDES_0_RX02_P, а SERDES_0_TX02_N — с SERDES_0_RX02_N.
№ джампера | Замкнуть | Примечания |
J22 | 1 и 2 | Разрешение подключения выходов к разъемам |
J23 | 2 и 3 | Для подключения SMA-разъемов требуется внешнее тактирование |
J3 | 1 и 2 | Питание включается вручную выключателем SW7 |
J8 | 1 и 2 | Работа FlashPro4 с SoftConsole/FlashPro |
Теперь запрограммируем ПЛИС. Для этого, прежде всего, надо загрузить c сайта корпорации Microsemi архив с файлами учебного проекта. Для IGLOO2 он находится по адресу http://soc.microsemi.com/download/rsc/?f=IGLOO2_EPCS_Demo_11p4_sp1_DF. После распаковки архива мы получим несколько папок. Файл для программатора (STAPL/PDB) находится в папке Programming File.
Запустим программу-оболочку для работы с программатором. Она называется FlashPro v11.4 и находится в группе программ Microsemi Libero SoC v11.4. В появившемся окне (рис. 4) щелкнем по кнопке New Project в окне программы. Откроется одноименное диалоговое окно (рис. 5). В его поле Project Name введем EPCS_Demo, в поле Project Location укажем папку с распакованным проектом и выберем режим программирования одного устройства — пункт Single Device в группе Programming Mode. Затем нажмем кнопку OK.
После этого окно оболочки программатора заметно изменится (рис. 6). Система просканирует нашу аппаратуру, обнаружит подключенный программатор FlashPro и занесет его в список программаторов Programmer List Window, который появится ниже поля с кнопками. Теперь активны все кнопки.
Теперь можно загружать прошивку в ПЛИС. Щелкнем по кнопке Configure Device, вместо списка программаторов появится поле с приглашением «To continue, load existing programming file…». Нажмем на кнопку Browse рядом с этим сообщением и найдем файл EPCS_Demo_top.stp, который находится в папке Programming File нашего распакованного архива. После загрузки файла в поле Programming File появится информация об этом файле. Выберем в поле справа от нее режим Advanced, появится выпадающий список Action (рис. 7).
Выберем из выпадающего списка Action пункт PROGRAM, если там выбрано что-то другое (по умолчанию должно быть именно PROGRAM), и щелкнем по кнопке Procedures. Появится окно Select Action And Procedures, в котором можно задать перечень действий, выполняемых во время программирования. Авторы учебного материала [1] рекомендуют оставить в нем значения по умолчанию. Щелкнем по кнопке Restore Default Procedures и закроем это окно кнопкой OK.
Теперь щелкнем по кнопке с надписью Program в окне оболочки программатора (рис. 7). (Заметим: если бы мы выбрали не программирование, а другое действие, то на этой кнопке было бы другое название.) Начнется загрузка прошивки в ПЛИС, при этом в нижней части окна оболочки программатора в поле протокола будут появляться строки отчета о выполняемых действиях. В графе Programmer Status напротив имени нашего программатора в списке программаторов будет продвигаться синяя полоса. После успешного завершения программирования в поле протокола должно появиться сообщение «Executing action PROGRAM PASSED», а в графе Programmer Status зеленая надпись: «RUN PASSED». В линейке индикаторных све-тодиодов на отладочной плате должны загореться два синих светодиода H5 и H6.
Закроем оболочку программатора и запустим среду Libero SoC. Еще раз вспомним о том, что ее версия должна быть 11.4 SP1 или более новой, в противном случае нам не удастся открыть проект, подготовленный корпорацией Microsemi.
В нашем распакованном архиве есть папка TCL Scripts. В ней лежат TCL-скрипты, с помощью которых можно читать и перезаписывать регистры блоков SERDES. Подробно об этой методике отладки можно прочитать в [6]. Мы сейчас выполним несколько этих скриптов и убедимся, что при их выполнении не возникают сообщения об ошибках.
Найдем в нижней части области Design Flow раздел Debug Design, а в нем — строчку SmartDebug Design и дважды щелкнем по ней левой кнопкой мыши. Появится окно SmartDebug (рис. 9).
Щелкнем по кнопке Debug SERDES в этом окне. Появится одноименное окно.
Выберем в поле Debug SERDES в левой части этого окна строчку Configuration. Вид окна изменится (рис. 10).
Щелкнем по кнопке выбора файла (на рисунке она обведена красным эллипсом) и загрузим какой-либо TCL-скрипт, а затем щелкнем по кнопке Execute. В поле протокола в нижней части окна Libero SoC появятся несколько строк сообщения о работе скрипта, которые должны заканчиваться фразой: «The Execute Script command succeeded». Это нам и нужно.
Закроем окна Debug SERDES и SmartDebug Design.
Теперь попробуем связаться с отладочной платой при помощи специальной демонстрационной программы с графическим интерфейсом. Если до сих пор мы с ней не работали, то ее надо установить. Инсталлятор находится в папке GUI Installer/Volume нашего распакованного архива, он называется традиционно: setup.exe. Запустим ее. Обратим внимание на одно из сообщений инсталлятора, которое может появиться, если на вашем компьютере установлено программное обеспечение фирмы National Instruments, например пакет программ, сопровождающий цифровой осциллограф с компьютерным интерфейсом. Инсталлятор сообщит, что он переименует некоторые файлы этого ПО. Необходимо где-то сохранить список переименованных файлов и восстановить их после работы с демонстрационной программой. Заметим еще, что после установки этой программы потребуется перезагрузка компьютера.
Запустим демонстрационную программу. Она находится в группе SmartFusion2_EPCS меню программ ОС. В этой группе единственный ярлык — SERDES EPCS Demo. Щелкнем по нему, появится окно демонстрационной программы (рис. 11).
В выпадающем списке перечислены все последовательные порты, присутствующие на компьютере. Порты, недоступные для работы, отображаются светло-серым шрифтом, доступные — черным. Настройки порта по умолчанию: скорость 9600 бод, нет управления потоком, один стоповый бит, нет контроля четности.
Щелкнем по кнопке Connect, чтобы соединить компьютер с платой через выбранный порт. Сигналы состояния будут отображать выполнение текущей операции.
Теперь щелкнем по кнопке Start. Начнется генерация кодов ПСДП и отправка их в последовательный передающий канал. Приемник будет получать эти коды и проверять на наличие ошибок. Сигналы состояния (табл. 2) будут отображать ход процесса.
Сигнал состояния | Описание |
Host Connection | Соединение с компьютером. Зеленый: COM-порт подключен. Красный: COM-порт не подключен. |
Serial Link | Последовательная передача. Зеленый: канал включен и работает. Красный: канал не работает. |
RX Lock | Фиксация приема. Зеленый: приемник получает правильные данные без ошибок. Это означает, что отправленная последовательность кодов ПСДП успешно принимается. Красный: приемник получает неправильные данные. |
Rx Error | Состояние принятых пакетов. Зеленый: в принятых пакетах нет ошибок. Красный: поврежденный пакет или любая ошибка в принятой последовательности кодов ПСДП. |
Error Count | Количество ошибок в принятой ПСДП. |
Generate Error | Используется для искусственного внесения ошибок при отладке. Вносит ошибку в передаваемую ПСДП. В результате должен инкрементироваться счетчик ошибок. |
Clear Error | Обнуляет счетчик ошибок. |
На этом первый этап работы — проверка готовности аппаратуры и программного обеспечения — можно считать законченным.
В следующей части этой статьи мы рассмотрим создание проекта для Libero SoC с использованием EPCS.
- Implementing a SmartFusion2/IGLOO2 SERDES EPCS Protocol Design — Libero SoC v11.4 Tutorial.
- Иоффе Д., Казаков А. SmartFusion2 и IGLOO2 — надежные, экономичные, компактные. Обзор новых семейств ПЛИС корпорации Microsemi // Компоненты и технологии. 2014. № 8.
- Иоффе Д., Казаков А. SmartFusion2 и IGLOO2 — в помощь разработчику. Обзор отладочных плат для новых семейств ПЛИС корпорации Microsemi // Компоненты и технологии. 2014. № 10.
- Иоффе Д., Казаков А. ПЛИС IGLOO2 корпорации Microsemi: практикум по сверхнизкому энергопотреблению // Компоненты и технологии. 2014. №10.
- CorePCS Handbook. www.microsemi.com
- SmartFusion2 and IGLOO2 SmartDebug — Hardware Design Debug Tools Tutorial. www.microsemi.com