Прототипирование процессоров Baikal на платформе Synopsys HAPS

Если предыдущая статья про гибридное прототипирование https://habr.com/ru/company/baikalelectron/blog/582782/ описывала новаторское использование платформы HAPS, то сегодня мы расскажем в общем — что такое прототип, и какие традиционные подходы к прототипированию используют инженеры Baikal Electronics.

В маршруте проектирование сложных System-on-the-Crystal (SoC) прототипирование на FPGA занимает промежуточное место между моделирование на симуляторах (VCS, ModelSim и др.) и эмуляцией.

 FPGA-прототипирование позволяет реализовать такие сложные сценарии системной валидации микросхемы как загрузка операционной системы (ОС). На прототипе операционная система может загрузиться за несколько часов, на симуляторе ОС грузилась бы в течении месяцев. При этом на FPGA с помощью встроенного логического анализатора мы можем увидеть поведение любого сигнала нашего дизайна в любой момент времени. А также, в отличие от кремния, можем переконфигурировать наш прототип произвольное количество раз.

Рисунок 1  Две платформы HAPS-70_S48 в стеке. Фото Baikal ElectronicsРисунок 1  Две платформы HAPS-70_S48 в стеке. Фото Baikal Electronics

В Baikal Electronics мы используем платформы Synopsys HAPS-70, представляющие из себя сборки из четырёх FPGA Xilinx Virtex-7–2000, каждая из которых вмещает до 12 миллионов логических гейтов. Таким образов вместимость одной платформы HAPS-70 — до 48 миллионов логических вентилей. Мы можем соединить два HAPS в стек и получить систему, в которую можем загрузить дизайн объёмом до 96 миллионов логических гейтов. Между собой внутри HAPS-70 ПЛИС соединяются через кабели со стандартными разъёмами HapsTrak 3 (HT3).

Рисунок 2. Кабель с разъёмами HT3. Фото Яндекс.КартинкиРисунок 2. Кабель с разъёмами HT3. Фото Яндекс.Картинки

Так же с помощью этих же разъёмов можно подключать к платформе дочерние платы (например, интерфейсные) , которые можно купить у Synopsys или разработать самостоятельно. Мы используем платы от Synopsys с DDR3 и SATA.

Интерфейсная плата для HAPS от Байкал

 Для работы с низкоскоростными интерфейсами наши инженеры разработали интерфейсную плату, на которой выведены:

·        JTAG

·        Spi flash

·        Ethernet

·        UART

·        USB

·        Блок переключателей

·        Блок светодиодов

·        GPIO

               Для работы со скоростными интерфейсами у HAPS имеются нативные разъемы MGB, выведенные из мультигигабитных трансиверов Xilinx внутри каждого FPGA.

Рисунок 3. Интерфейсная плата соединяется с платформой HAPS с помощью трёх разъёмов HT3. Фото Baikal ElectronicsРисунок 3. Интерфейсная плата соединяется с платформой HAPS с помощью трёх разъёмов HT3. Фото Baikal Electronics

Этапы тулчейна от 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

Рисунок 4. Маршрут Partitioning в Protocompiler. Изображение SynopsysРисунок 4. Маршрут Partitioning в Protocompiler. Изображение Synopsys

Разбиение дизайна на чипы FPGA (партишенинг) или распил (все же знают — мы в Baikal Electronics занимаемся как раз этим J) — это итеративный полуавтоматический процесс, в результате которого достигается баланс между заданной пользователем аппаратной конфигурацией (топология межчиповых кабелей, назначение портов и дочерних плат, начальное закрепление частей дизайна за конкретными FPGA) и характеристиками дизайна (эффективная растрассировка сигналов между FPGA, обеспечение приемлемого заполнения FPGA и выдержка требуемых характеристик быстродействия).

Если требуемые характеристики не достигаются, то мы меняем конфигурацию: перетягиваем кабели, переназначаем порты и исходное закрепление некоторых структур за конкретными FPGA. Последнее можно не делать совсем, а отдать начальное размещение полностью на откуп тулу.

Технологии тулы Protocompiler — Multi-Hop оптимизация, Feedthrough оптимизация, Time-Domain-Multiplexing — активно способствуют автоматической части партишенинга.

Multi-Hop оптимизация

Если логика пути сигнала разбивается между двумя FPGA, то путь между этими чипами называется hop («скачок»). Multi-Hop путь может простираться между несколькими FPGA и существенно ухудшать тайминг, при этом степень ухудшения тайминга зависит от доступных межчиповых связей и степени HSTDM-сжатия. (см. ниже).

Рисунок 5. Деградация тайминга вследствие партишенинга и появления Multi-Hop путей. Изображение из презентации Baikal ElectronicsРисунок 5. Деградация тайминга вследствие партишенинга и появления Multi-Hop путей. Изображение из презентации Baikal Electronics

Пользователю Protocompiler доступны опции, позволяющие автоматически минимизировать количество Multi-Hop путей.

Feedthrough оптимизация

Feedthrough-пути используют промежуточные чипы FPGA для трассировки сигнала от чипа источника до чипа назначения, если межчиповые трассы для point-to-point соединения недоступны.

 На Рис. 6 показано, что в сигналe из верхнего левого чипа источника не хватает прямых связей с верхним правым чипом назначения. Тогда автоматический роутер в туле буферизирует сигнал и размещает буфер в нижнем левом чипе, что неизбежно приводит к деградации тайминга. Пользователь может установить разрешение или запрет туле на автоматическое создание feedthrough-путей.

Эта технология используется на этапе System routing, сразу после этапа Partitioning. Обычно она используется в комбинации с технологией Time-Domain-Multiplexing.
 

Рисунок 6.Деградация тайминга вследствие партишенинга и появления Feedthrough-путей. Изображение из презентации Baikal ElectronicsРисунок 6.Деградация тайминга вследствие партишенинга и появления Feedthrough-путей. Изображение из презентации Baikal Electronics

Time-Domain-Multiplexing

Рисунок 7. Time-Domain-Multiplexing с автоматической вставкой SERDES IOs. Изображение из презентации Baikal Electronics. Изображение из презентации Baikal ElectronicsРисунок 7. Time-Domain-Multiplexing с автоматической вставкой SERDES IOs. Изображение из презентации Baikal Electronics. Изображение из презентации Baikal Electronics

Партишенинг дизайна на чипы 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-М в первые дни получения инженерного образца в руки!

© Habrahabr.ru