Запуск Ada на Zynq с помощью платы разработки Digilent Zybo

Я успешно использовал Vivado и SDK для разработки VHDL и C для Zynq XC7Z010 на плате Digilent Zybo. Я также использовал GNAT GPS IDE для изучения Ады, ориентированной на процессор STM32F4 (используя одну из поддерживаемых плат разработки).

GPS также поставляется с набором zynq7000 сред выполнения, предназначенных для XC7Z020 (насколько я могу судить). Просмотрев BSP для этих целей, я пришел к выводу, что сгенерированный код также должен работать на XC7Z010, поскольку ядра ARM кажутся одинаковыми. Может оказаться, что есть различия, и в этом случае я попытаюсь построить конкретную среду выполнения на основе существующего zynq7000 BSP (Adacore задокументировал этот процесс и привел пример для создания нового STM32F4 BSP).

Моя основная проблема заключается в том, что я не знаю, как загрузить и запустить сгенерированный файл Ada elf на моем Zybo. Я попытался сгенерировать файл BOOT.ini, содержащий FSBL (созданный с помощью SDK и с использованием моего оборудования, экспортированного из Vivado), битовый поток и файл Ada elf (у Zybo есть интерфейс MicroSD, который можно настроить как загрузочное устройство). , это прекрасно работает с битовым потоком и C elf, созданным через Vivado/SDK).

Во всяком случае, это не сработало ... Я предполагаю, что это может быть проблема с компоновкой, или проблема с загрузчиком, или что-то подобное. С моим нынешним уровнем знаний я просто не уверен на данном этапе.

Любые советы или указатели будут с благодарностью!


person Max van Daalen    schedule 19.03.2018    source источник


Ответы (1)


Оказывается, мой BOOT.ini был в порядке, проблема была связана с доступом к пользовательским регистрам AXI, определенным в моем битовом потоке. Если я удалю эти ссылки из Ады, сгенерированный файл ELF будет работать отлично. Например, печать через VCP Zybo с использованием Text_IO.Put_Line(), с использованием операций времени выполнения Ada delay и Clock и т. д.

По какой-то причине интерфейс AXI не работает, когда я загружаю файл Ады ELF. Если я заменю это эквивалентным C, тогда все будет хорошо.

Эта конкретная проблема в настоящее время не решена, но не связана с моим первоначальным вопросом!

(Возможно, время выполнения Ады полагается на FSBL или u-Boot для инициализации этого, не уверен. Не стесняйтесь комментировать, если знаете, я также добавлю комментарий, когда решу эту проблему)

**** Обновлять ****

Вот некоторая дополнительная информация и описание того, что мне пришлось сделать, чтобы мои пользовательские IP-адреса AXI заработали.

Предоставленный AdaCore BSP (пакет поддержки плат, используемый для сборки среды выполнения) предназначен для платы разработки Xilinx XC702. Я использую Digilent Zybo (более старая версия). Две платы используют разные части Zynq, XC702 основана на XC7Z020, а Zybo использует XC7Z010 (есть новая версия с опцией XC7Z020).

Я следовал инструкциям AdaCore (доступным на их веб-сайте) и построил BSP специально для Zybo. Сначала я просто обновил сведения о часах, так как Zybo работает с другой скоростью, а затем проверил правильность работы функции Ada delay (предоставленной как часть среды выполнения Ravenscar, построенной из обновленной BSP). Однако мои пользовательские AXI IP-адреса по-прежнему не работали...

Короче говоря, среда выполнения Ады содержит ассемблерный файл с именем start-ram.S, который, среди прочего, устанавливает MMU. Существует включаемый файл с именем memmap.inc, который содержит фактические определения MMU страниц в виде набора .long директив. Мне пришлось обновить запись адреса AXI_GP0, отредактировав конкретную директиву,

.long 0x43c10c16  @ for 0x43c00000, axi_gp0

Ранее было установлено значение 0x00000000 @ for 0x43c00000, *none*. Эти записи декодируются в start-ram.S и затем используются для настройки MMU (верхние 12 бит задают страницу, а оставшиеся биты нарезаются и используются в качестве конфигурации страницы).

Итак, как только я отредактировал этот файл в своем Zybo BSP и перестроил среду выполнения, IP-адреса стали доступны из PS и работали, как и ожидалось. Все это заняло некоторое время, чтобы понять, но оно того стоило, поскольку я многому научился, исследуя тупики!

Я надеюсь, что это поможет кому-то в будущем, я также настоятельно рекомендую Ada для разработки Zynq, особенно если вам в конечном итоге нужна сертификация DO-178 или аналогичная.

person Max van Daalen    schedule 21.03.2018