Анализ исходной системы Amber ARM-compatible core.

Итак, я решил портировать ARM-совместимый процессор с opencores.org на нашу плату Марсоход2.

Для скачивания исходников с сайта opencores сперва нужно зарегистрироваться на нем. После этого становится доступно собственно скачивание.

Заходим на страницу проекта: http://opencores.org/project,amber

amber project
The Amber processor core is an ARM-compatible 32-bit RISC processor. The Amber core is fully compatible with the ARM® v2a instruction set architecture (ISA) and is therefore supported by the GNU toolset. This older version of the ARM instruction set is supported because it is still fully supported by the GNU tool chain and is not covered by patents so can be implemented without a license from ARM. The Amber project provides a complete embedded system incorporating the Amber core and a number of peripherals, including UARTs, timers and an Ethernet MAC.


 

Первое впечатление очень хороше. Написано на Verilog, который я изучаю. Проект кажется стабильный, проверенный в FPGA. Говорят есть спецификация. Лицензия LGPL. Последний апдейт проекта – чуть больше месяца назад, значит он живет и совершенствуется. По статистике загрузок видно, что проект очень популярный. Посмотрим что там дальше.

Скачаю его по прямой ссылке (но можно взять и с через SVN).
Получил файл amber_latest.tar.gz размером 3 601 132 байт. Ага, тип файла как бы намекает, что основная операционная система разработчика проекта (автор Santifort Connor) был Linux.

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

  1. Проект Amber – это не чистый процессор, это целая система на кристалле. Топ модуль проекта – это Verilog файл amber/trunk/hw/vlog/system/system.v
  2. Если не ошибаюсь, система содержит собственно процессор Amber, таймер, контроллер прерываний, контроллер памяти DDR, последовательный порт, Ethernet. Все компоненты объединены на шине Wishbone BUS. Как много всего, я и не ожидал..
  3. Система построена для какой-то платы на базе микросхем FPGA компании Xilinx. Нам придется потрудиться, чтобы запустить это на Altera.
  4. Немного странно, что собственно процессор не имеет входа асинхронного сброса. Мне казалось, что в больших системах лучше бы его иметь.
  5. Оказалось, что Amber – это не один, а 2 похожих процессора Amber23 и Amber25. Процессор Amber23 имеет 3-х стадийный конвейер. Amber25 – 5-ти стадийный. Amber23 предполагает 32-двух разрядную шину Wishbone, а Amber25 – 128-ти разрядную. Видимо Amber25 быстрее и требует больше логики в FPGA.
  6. Amber реализует систему комманд ARM v2a. Это довольно старая система команд ARM процессоров. Реализована она исключительно из-за того, что не покрывается патентами компании ARM, следовательно не требует патентных отчислений. С другой стороны – говорят, что компилятор GCC поддерживает эту систему команд, значит у нас будет возможность писать программы на C.
  7. Обнаружил, что процессор имеет встроенную кэш память. Кроме того, в системе есть BOOTROM – память, где хранится та самая первая программа, котороя запускается после старта процессора.

После такого беглого осмотра исходных текстов программ уже можно пытаться составить приблизительный план дальнейших действий. А он видимо будет не маленький. Нам нужно:

  1. Создать проект для Altera Quartus II. Включить в проект все необходимые файлы из исходников проекта Amber. Наверняка что-то не будет компилироваться. Пытаться пофиксить.
  2. Остановимся на Amber23, как на более простом процессоре. Уверен, что нам его хватит.
  3. На первом этапе выкусить из проекта все лишнее, то что либо не пригодится никогда, либо не пригодится на начальном этапе. Например, наша плата Марсоход2 не имеет DDR памяти, но имеет SDRAM. Значит убирем DDR. Временно можно убрать Ethernet, потом видно будет. Желательно оставить только самое необходимое, по возможности только процессор и BOOTROM для простоты начальных экспериментов. Ну может еще последовательный порт оставить? Посмотрим.. Применим условную компиляцию для «выключения» не нужных модулей.
  4. Наверняка придется делать свой модуль генерации тактовых частот. Они как правило делаются во встроенных в чип FPGA компонентах PLL. Естественно, что они у Xilinx и Altera разные. Из-за этого и предвижу не совместимость проектов.
  5. Аналогично пункту 4 предвижу проблему со статической памятью. Она используется для кэш памяти и BOOTROM. Компоненты для статической памяти в FPGA для Xilinx и Altera конечно будут разные. Нужно посмотреть, что там потребуется.
  6. Вот еще задача. В BOOTROM нужно поместить начальную программу, которая стартует при включении процессора. Во-первых, нужно где-то взять компилятор для ARM. Научиться им пользоваться. Потом то, что он сгенерирует нужно каким-то образом разместить в BOOTROM, то есть в статической памяти FPGA. Альтера для инициализации памяти использует специальные файлы типа MIF – Memory Initialization File. Как бы не пришлось конвертировать файлы из одного формата в другой.
  7. Сделать назначения входных и выходных сигналов для проекта согласно схеме платы Марсоход2. Поскольку на начальном этапе хочу выкинуть все лишнее и оставить только самое необходимое, то думаю у нас будет пока только несколько входов и выходов: тактовая частота clk, асинхронный сброс reset, два сигнала последовательного порта Rx и Tx. Возможно еще led?
  8. Кстати да, что делать со сбросом? На самом процессоре нет такого входа! Может его добавить в исходники проекта Amber? Или я чего-то не понимаю. Я бы хотел завести вход сброса на плате Марсоход2 к кнопочке. Нажимаю кнопочку на плате – процессор сбрасывается и начинает работать с самого начала.

Ну и конечно, кто верит, что это все вот так сразу заведется и заработает на плате Марсоход2? Неужели обойдемся без симуляции проекта? Мне кажется, что это врядли. Наверняка есть миллион ньюансов, которые без симуляции понять будет трудно. Еще не решил, чем симулировать: может Icarus Verilog, а может ModelSim. В любом случае симуляция конечно нам будет нужна. Мы ведь обязательно захотим посмотреть внутрь процессора, как же работает? Значит будем писать тестбенчи.

Как видите работы много. Но, мы не привыкли отступать! Будем работать!

PS: создал на GitHub новый репозиторий, чтобы в нем отражать все изменения в проекте. Конечно, там сейчас только файлы, которые я только что выкачал с OpenCores. Вот адрес https://github.com/marsohod4you/Amber-Marsohod2

 


Добавить комментарий