Здравствуйте.
Цитата
Почему boot из FPGA? Надо же что-то в FPGA городить чтобы залить файл в HPS? Хочу использовать boot из QSPI (FPGA и HPS), может чего-то не учел?
Потому что на нашей плате есть только Cyclone V и NAND flash. По задумке preloader грузится из FPGA OCRAM, а приложение - из NAND. Тип приложения - baremetal. При это ПЛИС умеет грузить себя сама.
Цитата
В DS5 как создается проект? Просто new project c++ и все, пишем сорс, компилируем и готово? Привык что в ниосе еще огромная BSP. Неужели тут ничего, кроме сорсов приложения ?
Советую для начала брать за основу проекты
вот отсюда. Мне помогает. Там не все так просто, нужно правильно настроить makefile, я вот например раньше его открывал, только что бы настройки bsp подкорректировать, с SoC нужно будет чаще туда лазить.. Использую gcc для сборки. Вот пару советов:
- запускайте Eclipse через EDS консоль, тогда он правильно подхватывает все зависимости, иначе могут быть ошибки на этапе сборки проектов
- в папке ALTERA_PATH\VERSION\embedded\ip\altera\hps\altera_hps\hwlib\include лежат h-шники альтеры, которые понадобяться для работы с периферией проца
- для подключения новой периферии его нужно добавить 1) в инклуде исходника, 2) в makefile, пример:
В С файле код, который останавливает Watchdog:
Код
#include <stdio.h>
#include "alt_clock_manager.h"
#include "alt_watchdog.h"
int main(int argc, char** argv) {
ALT_STATUS_CODE status = ALT_E_SUCCESS;
if (status == ALT_E_SUCCESS)
{
printf("INFO: Stopping Watchdog 0 Timer.\n");
status = alt_wdog_stop(ALT_WDOG0);
}
// Check if Watchdog0 is running
if (status == ALT_E_SUCCESS)
{
if (alt_wdog_tmr_is_enabled(ALT_WDOG0) == true)
{
printf("INFO: Watchdog 0 Timer is running.\n");
}
else
{
printf("INFO: Watchdog 0 Timer is not running.\n");
}
}
printf("Hello!\n");
return 0;
}
В Makefile строки, которые отвечают за подключение либ:
Код
HWLIBS_SRC := alt_watchdog.c alt_clock_manager.c
EXAMPLE_SRC := hello.c io.c
C_SRC := $(EXAMPLE_SRC) $(HWLIBS_SRC)
За недостатком документации по программированию этого чуда, комментарии в h-шниках весьма полезны для изучения программной модели, там например иногда английским по белому пишут, какие функции нужно вызывать вначале, что бы данная периферия заработала или как что включать/выключать...
- приложение можно собрать либо как hosted либо как unhosted с помощью (как я понял следующих строк Makefile):
Для unhosted:
Код
LINKER_SCRIPT := cycloneV-dk-ram-modified.ld
Для hosted:
Код
LINKER_SCRIPT := cycloneV-dk-ram-hosted.ld
В примерах Altera делается инициализация системы, на нее стоит обратить внимание, особенно на прерывания и MMU. Есть такие чудо файлы - alt_pt.h и alt_pt.c, в альтеровской папке я их не нашел, забрал из примеров, они нужны для инициализации кэша (по-умолчанию он выключен из-за чего проц работает ужасно медленно, разумеется).
Все вышесказанное имеет значение, если вы хотите делать baremetal app. Если у вас линух предполагается, то он всю эту низкоуровневую мишуру сам сделает.. Но нам пока линух неинтересен, поэтому я вожусь с baremetal.
Цитата
При boot-е из QSPI я так понял сначала грузим HPS, а как грузится FPGA? Видел что надо rbf файл сделать, а куда его втолкнуть потом?
Посмотрите
вот отсюда например. Сам не делал, поэтому тут не скажу. Знаю, что rbf размещают в некоторой области флехи, откуда загрузчик его потом заберет. Если хотите порыть вглубь, то вот направление:
в папке, которая создается после генерации preloader'a из которой он потом собирается spl_bps\uboot-socfpga\arch\arm\cpu\armv7\socfpga есть файл spl.c, собственно исходники preloader'a (часть), в конце файла есть секция CONFIG_SPL_FPGA_LOAD, там описана загрузка ПЛИС процом. В preloader'e соответственно нужно эту опцию разрешить.
Удачи.