Если предыдущая статья про гибридное прототипирование описывала новаторское использование платформы HAPS, то сегодня мы расскажем в общем - что такое прототип, и какие традиционные подходы к прототипированию используют инженеры Baikal Electronics.
В маршруте проектирование сложных System-on-the-Crystal (SoC) прототипирование на FPGA занимает промежуточное место между моделирование на симуляторах (VCS, ModelSim и др.) и эмуляцией.
FPGA-прототипирование позволяет реализовать такие сложные сценарии системной валидации микросхемы как загрузка операционной системы (ОС). На прототипе операционная система может загрузиться за несколько часов, на симуляторе ОС грузилась бы в течении месяцев. При этом на FPGA с помощью встроенного логического анализатора мы можем увидеть поведение любого сигнала нашего дизайна в любой момент времени. А также, в отличие от кремния, можем переконфигурировать наш прототип произвольное количество раз.
В Baikal Electronics мы используем платформы Synopsys HAPS-70, представляющие из себя сборки из четырёх FPGA Xilinx Virtex-7-2000, каждая из которых вмещает до 12 миллионов логических гейтов. Таким образов вместимость одной платформы HAPS-70 – до 48 миллионов логических вентилей. Мы можем соединить два HAPS в стек и получить систему, в которую можем загрузить дизайн объёмом до 96 миллионов логических гейтов. Между собой внутри HAPS-70 ПЛИС соединяются через кабели со стандартными разъёмами HapsTrak 3 (HT3).
Так же с помощью этих же разъёмов можно подключать к платформе дочерние платы (например, интерфейсные) , которые можно купить у Synopsys или разработать самостоятельно. Мы используем платы от Synopsys с DDR3 и SATA.
Интерфейсная плата для HAPS от Байкал
Для работы с низкоскоростными интерфейсами наши инженеры разработали интерфейсную плату, на которой выведены:
JTAG
Spi flash
Ethernet
UART
USB
Блок переключателей
Блок светодиодов
GPIO
Для работы со скоростными интерфейсами у HAPS имеются нативные разъемы MGB, выведенные из мультигигабитных трансиверов Xilinx внутри каждого FPGA.
Этапы тулчейна от RTL до FPGA bitstream
Маршрут компиляции проекта под HAPS, в результате прохождения которого мы должны получить bitstream (микрокод, «прошивки») для FPGA, включает следующие стадии:
1. Partitioning
В приложении Synopsys Protocompiler компилируются RTL-исходники проекта.
В результате мы получаем разбитый, например, на 4 FPGA дизайн в виде списков исходников для каждой FPGA.
2. Компиляция отдельных чипов в Protocompiler
На второй стадии в Protocompiler собирается проект для каждой FPGA.
В результате получается netlist и tcl-скрипт для запуска маршрута Place&Route в Xilinx Vivado.
3. Vivado
На третьей стадии мы запускаем в Vivado уже готовый tcl-скрипт маршрута Place&Route, который берет нетлист. В итоге получаем прошивки для FPGA.
Этапы 2 и 3 хорошо знакомы разработчикам на FPGA, использующим, например, тулчейн Synplify+Vivado, поэтому остановимся подробнее на особенностях и вызовах первого этапа.
Design Partitioning для платформы HAPS посредством тула Synopsys Protocompiler
Разбиение дизайна на чипы FPGA (партишенинг) или распил (все же знают – мы в Baikal Electronics занимаемся как раз этим J) – это итеративный полуавтоматический процесс, в результате которого достигается баланс между заданной пользователем аппаратной конфигурацией (топология межчиповых кабелей, назначение портов и дочерних плат, начальное закрепление частей дизайна за конкретными FPGA) и характеристиками дизайна (эффективная растрассировка сигналов между FPGA, обеспечение приемлемого заполнения FPGA и выдержка требуемых характеристик быстродействия).
Если требуемые характеристики не достигаются, то мы меняем конфигурацию: перетягиваем кабели, переназначаем порты и исходное закрепление некоторых структур за конкретными FPGA. Последнее можно не делать совсем, а отдать начальное размещение полностью на откуп тулу.
Технологии тулы Protocompiler - Multi-Hop оптимизация, Feedthrough оптимизация, Time-Domain-Multiplexing – активно способствуют автоматической части партишенинга.
Multi-Hop оптимизация
Если логика пути сигнала разбивается между двумя FPGA, то путь между этими чипами называется hop («скачок»). Multi-Hop путь может простираться между несколькими FPGA и существенно ухудшать тайминг, при этом степень ухудшения тайминга зависит от доступных межчиповых связей и степени HSTDM-сжатия. (см. ниже).
Пользователю Protocompiler доступны опции, позволяющие автоматически минимизировать количество Multi-Hop путей.
Feedthrough оптимизация
Feedthrough-пути используют промежуточные чипы FPGA для трассировки сигнала от чипа источника до чипа назначения, если межчиповые трассы для point-to-point соединения недоступны.
На Рис. 6 показано, что в сигналe из верхнего левого чипа источника не хватает прямых связей с верхним правым чипом назначения. Тогда автоматический роутер в туле буферизирует сигнал и размещает буфер в нижнем левом чипе, что неизбежно приводит к деградации тайминга. Пользователь может установить разрешение или запрет туле на автоматическое создание feedthrough-путей.
Эта технология используется на этапе System routing, сразу после этапа Partitioning. Обычно она используется в комбинации с технологией Time-Domain-Multiplexing.
Time-Domain-Multiplexing
Партишенинг дизайна на чипы FPGA приводит к дефициту бюджета I/O пинов FPGA для трассировки межсоединений. Партишенинг современной SoC гарантированно приводит к многократному превышению требуемого количества трасс над имеющимися I/O. Выход один – мультиплексирование.
Пользователь может задать тулу максимально допустимую степень сжатия HSTMD (High Speed Time Domain Multiplexing). При этом автоматически вставляемые сериализаторы/десериализаторы работают на частоте свыше 1 ГГц, обеспечивая эффективное сжатие мультиплексируемых сигналов до степени 128:1 и выше.
Отладочные интерфейсы
Управление платформой HAPS осуществляется с помощью утилиты Confpro, через которую мы можем:
Прошивать FPGA
Назначать чаcтоты входных синхросигналов
Управлять сбросами
Устанавливать номиналы питания банков питания FPGA
На прототипе можно разрабатывать и заниматься отладкой программного обеспечения так же, как и на настоящем процессоре в кремнии. Мы подключаемся к отладочному интерфейсу JTAG с помощью Olimex usb-jtag эмулятора, запускаем отладчик Openocd, при необходимости загружаем программы в spi flash память, в ROM, в ОЗУ. Можем подключить UART-интерфейс через usb адаптер к инструментальному компьютеру и осуществить символьный ввод/вывод для программ. Дочерняя плата на разъемах HT3 позволяет подключить SATA диск и Ethernet патчкорд.
Для прототипов процессорных Arm-ядер можно заниматься отладкой ПО через встроенную в ядра отладочную систему Coresight при помощи программного пакета Arm DS через физический интерфейс Arm D-Stream или более простые jtag-эмуляторы.
Встроенный в FPGA синтезируемый логический анализатор доступен через UMR Bus - нативный интерфейс от Synopsys для управления HAPS. Доступен огромный банк хранения выборок сигналов для построения вейвформ.
Прототипирование у нас используется прежде всего для системной валидации и ранней разработки ПО, такого как программы загрузчиков сервисного процессора, загрузчиков Arm TF, UEFI, ОС Linux.
Благодаря месяцам pre-silicon отладки на прототипе, наша команда «подняла» Linux на инженерном образце процессора Baikal-М в первые дни получения инженерного образца в руки!