реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Cyclone V: загрузука HPS из памяти FPGA (FPGA boot)
serjj
сообщение Jan 26 2015, 07:48
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Здравствуйте.
Цитата
Почему 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 соответственно нужно эту опцию разрешить.

Удачи.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 26 2015, 08:39
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Спасибо, очень полезная информация, копаю дальше...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 28 2016, 14:32
Сообщение #18


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(serjj @ Jan 26 2015, 11:48) *
В примерах Altera делается инициализация системы, на нее стоит обратить внимание, особенно на прерывания и MMU. Есть такие чудо файлы - alt_pt.h и alt_pt.c, в альтеровской папке я их не нашел, забрал из примеров, они нужны для инициализации кэша (по-умолчанию он выключен из-за чего проц работает ужасно медленно, разумеется).

Сейчас уже есть в HWlib файлы alt_cache.h и alt_mmu.h.
В первом есть необходимая настройка кэшей, а во втором - MMU.

Насколько я понимаю, работа с кэшем данных без MMU практически невозможна, ведь как можно без MMU задавать, какие регионы памяти кэшируются, а какие нет?
К примеру, области регистров периферии не должны кэшироваться.

Кто нибудь работал с кэшами и MMU под bare metal?
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 18:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016