1. Cortex M1 и Cortex M3 в открытом доступе.
  2. Zynq-7000 SoC — Xilinx. Z-turn Lite. Bare metal. Часть 1.
  3. Zynq-7000 SoC — Xilinx. Z-turn Lite. Bare metal. Часть 2.

Cortex-M1

Некоторое время назад, мной был сделан обзор о доступности Cortex M1 и M3, по первой ссылке Вы сможете возобновить знания об этих ядрах. В этой статье я хотел бы поделиться знанием о том, как запустить ядро Cortex M1 на отличной платформе, например на zynq.  Вторая и третья ссылка позволит быстро войти в курс проектирования под zynq и даст базовое понимание о работе в Vivado.

Ядро Cortex-M1 –  оптимизировано для использования на FPGA. Cortex-M1 ориентирован на OEM-производителей, которые смогут унифицировать и специализировать архитектуру своих решений. ARM Cortex-M1 представляет собой 32-разрядный RISC-процессор с трехступенчатым конвейером, использующим несколько модифицированный набор инструкций Thumb-2. Процессорное ядро, как утверждается, способно исполнять код Thumb, таким образом, программно совместимо с ARM7TDMI и старше. Cortex-M1 может работать на частотах более 170 МГц, обеспечивая производительность 0,8 DMIPS (млн. инструкций в секунду)/МГц. Основными приложениями для Cortex-M1 являются встроенные средства управления, коммуникации, промышленное оборудование,  сетевое оборудование и устройства авиации.

Xilinx Vivado

1. Создаём новый проект в Xilinx Vivado, называем проект «Cortex M1».

2. Выбираем необходимый камень.


3. Добавляем директорию с IP ARM Cortex M1.

4. Видим, что в добавленной директории находится необходимое нам IP.

5. Добавляем ip Zynq и ip Cortex M1.

6. Добавленное ядро Cortex M1 в блок дизайне.

7. Конфигурируем Cortex M1, в ядре убираем отладку, ставим режим без отладчика, чтобы сэкономить пространство pl части Zynq.

8. Добавляем IP axi uartlite, данное ядро было использовано в предыдущей статье.

9. Устанавливаем скорость в 115200 для IP axi uartlite.

10. Добавляем IP AXI GPIO, для AXI GPIO делаем настройку, как на скриншоте ниже.

11. Добавляем IP констант для Cortex M1. Константа значение 0 для порта прерываний, константа значение 0 для порта NVIC, константа значение 3 для порта CFGITCMEM, далее делаем автоматическое соединение линий и шин в Vivado для нашего проекта, итоговый проект должен иметь вид как на скриншоте.

12. Проверяем адресное пространство, если адресное пространство не назначено для IP, необходимо сделать назначение.

13. Запускаем синтез проекта, после синтеза проекта настраиваем порты io для axi uartlite, в меню портов, красным цветом подсвечены порты которые не определены.

14. Порты axi uartlite назначим на io_b35_ln3 и io_b35_ln2.

15. Данный банк запитан от 3.3В, напряжение для банка выбирается с помощью джампера на основной плате с zynq.

16. Порты io_b35_ln3 и io_b35_ln2 на разъеме J4.

17. Порты io_b35_ln3 и io_b35_ln2 на камне. Далее создаем файл ограничения целостности сигнала, и в него либо руками вводим содержание под скриншотом, либо назначаем порты через меню.

Содержание файла XDC.

18. Выполняем имплементацию проекта. Результат имплементации проекта.

После имплементации проекта необходимо выполнить файл make_mmi_file.tcl, source make_mmi_file.tcl, содержание файла ниже.

Данный файл создаст «m1.mmi» файл, который содержит описание адресного пространства Cortex-M1.

Файл m1.mmi

19. Результат выполнения команды source make_mmi_file.tcl.

20. Генерируем bitstream.

21. Итоговый результат утилизации ресурсов pl части Zynq, информация об утилизации ресурсов в виде графика.

22. Информация об утилизации ресурсов в виде таблицы.

Xilinx SDK

23. Запускаем SDK (предварительно сделав экспорт проекта), в настройках добавляем глобальную директорию, как на скриншоте ниже.

24. Адресное пространство проекта в SDK.

25. Создаем BSP для Cortex M1.

26. Настраиваем bsp, самое главное — это проверить чтобы стандартный поток шел через axi uartlite.

27. Запускаем проект в Keil для генерации elf файла. Путь до проекта software/m1_for_arty_s7/Build_Keil. В sdk_workspace добавляем сгенерируемый bsp, а также файлы Xpsuedo_asm_rvct.c и Xpseudo_asm_rvct.h, путь до файлов vivado/Arm_sw_repository/CortexM/bsp/standalone_v6_7/src/arm/cortexm1/armcc. Все исходники на которые будет ругаться Keil будем удалять.

Исходный код проекта для Keil.

Исходный код bat файла для генерации elf, тут самое главное правильный путь до fromelf, с помощью fromelf генерируется elf файл.

Все итоговые части проекта готовы для запуска на железе, переносим файл design_1_wrapper.bit, bram_s7.elf и m1.mmi в одну директорию и выполняем source make_prog_files.tcl. И получаем файл zynq_m1.bit, который содержит уже все необходимое.

Содержание файла make_prog_files.tcl.

После загрузки bitstream, если все шаги сделаны правильно в консоли мы должны увидеть следующий результат.

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Уведомлять о