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

 
 
> Cyclone V: загрузука HPS из памяти FPGA (FPGA boot)
serjj
сообщение Dec 25 2014, 08:18
Сообщение #1


Знающий
****

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



Доброго дня. Есть отладочная плата Arrow SoCkit от Terasic. Занимаюсь поднятием HPS, в частности зазгрузкой прелоадера (preloader). Приложения Baremetal. Удалось прогрузить кастомный прелоадер по JTAG через DS-5 Debugger. SDRAM успешно инициализируется/калибруется, в нее загружается приложение, выполняется, вроде бы все ок. Пошел дальше: стоит задача реализовать режим загрузки FPGA Boot, описанный в документации. Руководствовался документом AN709 HPS SoC Boot Guide - Cyclone V SoC Development Kit дока и инструкцией инструкция rocketboards. BSEL выставлен в 0х1 (FPGA boot mode). Сигналы разрешения загрузки из FPGA выставлены по мануалу, но HPS не загружается. Попытался подключиться дебагером, посмотреть что же там происходит: пишет, что проц в состоянии running. Попытки его остановить дают следующую ошибку:

Код
ERROR(TAD9-NAL30):
! Unable to stop device Cortex-A9_0
! Cannot stop target.

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

Также проверил при BSEL 0x0, что по адресу 0xC0000000 (адрес On-Chip RAM в FPGA с hex файлом прелоадера) лежит собственно прелоадер. Возможно, HPS не выгружает прелоадер из памяти FPGA в свою встроенную память после снятия резета или он считывается неправильно. Сталкивался ли кто нибудь с загрузкой из ПЛИС раньше? Может быть какие нибудь идеи, куда копать? С примерами такой загрузки довольно тухло (как впрочем с примерами Baremetal вообще). Буду рад любой помощи!

Прикрепленные файлы
Прикрепленный файл  an709.pdf ( 1.41 мегабайт ) Кол-во скачиваний: 35
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
serjj
сообщение Jan 26 2015, 07:48
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 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
sonycman
сообщение Jul 28 2016, 14:32
Сообщение #3


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

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- serjj   Cyclone V: загрузука HPS из памяти FPGA (FPGA boot)   Dec 25 2014, 08:18
- - serjj   Обнаружил интересную особенность: поставил в проек...   Dec 29 2014, 15:34
- - vadimuzzz   а FPGA загрузилась? ЦитатаFor direct execution fro...   Dec 30 2014, 05:05
- - serjj   Да загрузилась, встают PLL, я параллельно смотрел ...   Dec 30 2014, 07:06
- - WitFed   Мне летом какой-то крутой ARM-перец на форуме Альт...   Dec 30 2014, 07:39
- - serjj   Автостарт Signaltap сделал, но вот чтения по h2f A...   Dec 30 2014, 08:01
- - serjj   Новые новости с Boot фронта После подачи питани...   Dec 30 2014, 11:37
|- - vadimuzzz   Цитата(serjj @ Dec 30 2014, 17:37) ые по ...   Dec 30 2014, 11:50
- - serjj   При старте FPGA получается следующая картинка: Ре...   Dec 30 2014, 12:23
|- - alexPec   Автору большая просьба: опишите поподробней правил...   Jan 3 2015, 10:14
- - vadimuzzz   а можно все эти сигналы в кучу собрать (axi полнос...   Jan 2 2015, 02:30
- - serjj   2 vadimuzzz, в OCRAM лежит hex preloader'а, фо...   Jan 9 2015, 09:53
- - Jury093   Цитата(serjj @ Dec 25 2014, 11:18) Сталки...   Jan 9 2015, 11:31
- - serjj   Продолжение "войны" с 5-м Cyclone'ом...   Jan 12 2015, 09:42
|- - alexPec   Добрый день, serjj. Появилось время на знакомство...   Jan 26 2015, 05:50
- - alexPec   Спасибо, очень полезная информация, копаю дальше.....   Jan 26 2015, 08:39


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

 


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


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