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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
serjj
сообщение Dec 29 2014, 15:34
Сообщение #2


Знающий
****

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



Обнаружил интересную особенность: поставил в проекте power up trigger в signaltap на сигнал RVALID AXI шины h2f. При чтении по шине, сигнал должен выставляться в 1. Однако при старте этого не происходит, следовательно процессор не считывает код preloader'a во внутреннюю память. При этом, как было отмечено BSEL = 0x1 и сигныл разрешения загрузки из FPGA выставлен в 1. Вопрос знатокам HPS, почему стартовый код проца не инициализирует обмен по шине?
Крайне нужен совет! rolleyes.gif

Сообщение отредактировал serjj - Dec 29 2014, 15:35
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 30 2014, 05:05
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



а FPGA загрузилась?
Цитата
For direct execution from the FPGA fabric boot source, the boot ROM code waits until the FPGA portion of the
device is in user mode, and is ready to execute code and then passes software control to the preloader in the
FPGA RAM.
Go to the top of the page
 
+Quote Post
serjj
сообщение Dec 30 2014, 07:06
Сообщение #4


Знающий
****

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



Да загрузилась, встают PLL, я параллельно смотрел сигнал reset, который у меня вырабатывается по сигналу pll_locked. Он честно падает после загрузки FPGA. Если я убираю джампер, выставляя BSEL = 0x0, то я могу подключиться к процессору через дебагер и залить туда preloader вручную, так же в этом режиме проверил чтение из памяти FPGA и сигнал RVALID, все нормально читается, так что шина подключена правильно.

ЗЫ:
Еще на одну вещь обратил внимание. При BSEL != 0x0, если в дебаггере подгрузить вручную preloader и посмотреть в Memory viewer содержимое сектора 0c0000000, то все ок, там лежит preloader, который должен загружаться из FPGA, но если запустить в дебаггере проект без preloader'a, то при попытке почитать по адресу 0c0000000 мы увидем, что память недоступна. Разве preloader как то управляет шиной h2f AXI? Получается как будто проц не видит сектор по 0c0000000 изначально и его нужно проинициализировать, но как тогда с загрузкой из FPGA...

Сообщение отредактировал serjj - Dec 30 2014, 07:35
Go to the top of the page
 
+Quote Post
WitFed
сообщение Dec 30 2014, 07:39
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701



Мне летом какой-то крутой ARM-перец на форуме Альтеры советовал хитрый метод отладки всего стартапа HPS в DS-5, начиная с 1 команды BootROM, только я забросил всё это болото Альтерное после неисчислимых мучений ёжика в тумане... Сырость неописуемая, и эти ребята во главе с Об. запрещают нам ковыряться пальцем в носу !.. wink.gif

...Там примерно надо было нажать резетную кнопку на плате и держать, в DS-5 как-то подключиться "на будущее", отпустить кнопку -- и отладчик становится на самое начало по адресу 0, потом можно по дизассемблеру степать и видеть место, где висяк -- это глядя из самого проца. Но исходников С-ных нет в принципе, логику и названия функций надо соображать по asm.

Ну и из ПЛИС можно в Тапок вывести чтение того куска ОЗУ, в котором Прелоадер сидит. Хотя бы из окна Memory видна она или висяк моментальный.
Только у Альтеры, как повелось издревле, трудно отлаживать стартовые процессы -- прошивка должна уже сидеть и ждать, только тогда можно пускать Тапка вручную, нет автоматизации с его автостартом, как только прошивка загрузится.
Но проца можно держать в резете и отпускать, только когда Тапок включится.

По идее, увидев BSEL для загрузки из ПЛИС, BootROM должен проинитить мост проц-ПЛИС самостоятельно, у него же незря 60 К кодов заложено на всё про всё в неисчислимых вариантах. И передать управление на содержимое C0000000, которое должно стать видимым.
Вообще, зря они намудрили с этими BSEL-ами и BootROM-ами накристалльными... Самое надёжное и удобное нам решение -- отдать загрузку на откуп системному архитектору (обычно никому не нужны несколько src) и 1-стадийное ПО. Проц стартует с 0, и что ему там подставили на шине по этому адресу на чтение, то пусть и запускается, мудрствование обычно всегда бывает лукавым. Плохой носитель -- можно повторять попытки загрузки с адреса 4М, 8М...
В 4М флэши можно уже уместить нормальное приложение, которое и полный функционал обеспечит, и при необходимости DDR подымет и скопирует свой кусок туда, но только при нормальном отладчике и надёжности.
Go to the top of the page
 
+Quote Post
serjj
сообщение Dec 30 2014, 08:01
Сообщение #6


Знающий
****

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



Автостарт Signaltap сделал, но вот чтения по h2f AXI не происходит после перехода FPGA в User Mode. У меня сигналы boot_from_fpga_ready = 1 и boot_from_fpga_on_failure = 0 заданы жестко константами, может их нужно привязать к резетам? При этом резет на память OCRAM FPGA и на HPS генерируется по pll_locked. Как вариант попробовать задержать сигнал резета для HPS... CLKSEL = 0x0, может это как то влияет?
Go to the top of the page
 
+Quote Post
serjj
сообщение Dec 30 2014, 11:37
Сообщение #7


Знающий
****

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



Новые новости с Boot фронта help.gif
После подачи питания и залифки .sof файла удалось получить в signaltap следующие эпюры:

Прикрепленное изображение


При этом видно, что данные вычитываются из памяти подряд на каждом такте и никак не привязаны к сигналу RVALID. Если я читаю содержимое сектора 0с0000000 вручную, то картинка получается такая:

Прикрепленное изображение


Транзакция на шине сопровождается сигналом RVALID, по которому master будет капчурить данные, полученные от slave'a. Я пока не специалист по AXI, но по-моему очевидно, что эпюр на второй картинке соответствует правильной транзакции, а на первой - неправильной. Уже хорошо то, что проц пытается что-то прочитать после загрузки FPGA rolleyes.gif , но вопрос почему он считывает данные неправильно?..

PS. Сейчас все резеты сняты по умолчанию при загрузке FPGA:
Код
        .reset_reset_n                                ( 1'b1 ),
        .hps_boot_fpga_boot_from_fpga_ready            ( 1'b1 ),
        .hps_boot_fpga_boot_from_fpga_on_failure    ( 1'b0 ),
        .hps_cold_rst_reset_n                        ( 1'b1 ),
        .hps_debug_rst_reset_n                        ( 1'b1 ),
        .hps_warm_rst_reset_n                        ( 1'b1 ),

Если подавать резеты, сформированные по pll_locked, то проц не пытается загружаться с FPGA
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 30 2014, 11:50
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(serjj @ Dec 30 2014, 17:37) *
ые по pll_locked, то проц не пытается загружаться с FPGA

заведите все эти ресеты и прочую шелуху в сигналтап. хочется посмотреть именно на момент перехода fpga в user mode
Go to the top of the page
 
+Quote Post
serjj
сообщение Dec 30 2014, 12:23
Сообщение #9


Знающий
****

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



При старте FPGA получается следующая картинка:
Прикрепленное изображение

Резет для процессора я специально задержал, что бы он начал грузиться чуть позже. На эпюре фактические резеты с процессора и памяти сняты, как я писал выше. Пробовал вместо этого заводить сигналы reset и reset_hps_n, с ними проц не начинал вычитывать preloader.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 2 2015, 02:30
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



а можно все эти сигналы в кучу собрать (axi полностью и ресеты)? у меня есть подозрение, что обе эпюры транзакций по axi правильные, только типы burst разные. кстати, а что лежит в ocram со стороны fpga?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 3 2015, 10:14
Сообщение #11


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

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



Автору большая просьба: опишите поподробней правильную последовательность действий, чтобы все это заработало и в чем были проблемы. Скоро собираюсь тоже заняться циклоном 5 и его HPS. Думаю на эти грабли многие наступают и было бы полезно выложить максимум информации по проблеме.
Go to the top of the page
 
+Quote Post
serjj
сообщение Jan 9 2015, 09:53
Сообщение #12


Знающий
****

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



2 vadimuzzz, в OCRAM лежит hex preloader'а, формат слова - 8 бит, как указано в рекомендации Altera для FPGA boot. Как до работы доберусь, еще раз все посмотрю и сделаю эпюры полностью по шине AXI.

2 alexPec, рекомендации по FPGA boot mode я привел в начале темы, там линк на сайт рокетбордов и доку Altera. Для загрузки по JTAG могу привести пример как у меня заработала SDRAM и собственно стартовала программа из нее, если нужно. Мысли только в кучу собиру, что бы по существу написать )
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jan 9 2015, 11:31
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(serjj @ Dec 25 2014, 11:18) *
Сталкивался ли кто нибудь с загрузкой из ПЛИС раньше? Может быть какие нибудь идеи, куда копать? С примерами такой загрузки довольно тухло (как впрочем с примерами Baremetal вообще). Буду рад любой помощи!

попробуйте пройти по заведомо рабочей траектории:
http://habrahabr.ru/post/235707/
с учетом специфики своего железа..
а уж потом запилите свое baremetal..
Go to the top of the page
 
+Quote Post
serjj
сообщение Jan 12 2015, 09:42
Сообщение #14


Знающий
****

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



Продолжение "войны" с 5-м Cyclone'ом smile3046.gif
Пост на хабре я читал, всё конечно здорово, но вопрос не в Baremetal или Linux, а в загрузке HPS из FPGA. Сделал снимок каналов AXI Address Read и Data Read в Signaltap. И вот что получилось:

Прикрепленное изображение


Поставил триггер на ARVALID. Он ставит начальный адрес бёрста, адрес текущий до памяти доходит, данные вычитываются, но сигналы RVALID и RREADY на канале Data Read не выставляются, следовательно мастер (HPS) не получает данные. За согласование интерефейсов памяти и проца отвечает компонент mm_interconnect, который qsys поставил сам. Это первый момент, который меня смутил. Второй: адрес выставляется не по порядку, но тут я не уверен - может так и надо, порядок вычитывания определяет программа Boot loader'a, которая зашита в ROM HPS и недоступна... А вот таже картинка, только в другом масштабе, сигналы RVALID & RREADY так и не появляются.

Прикрепленное изображение


Документ по AXI, по которому смотрю как и что должно быть, может кому будет полезно
Прикрепленный файл  AXI4_specification.pdf ( 1.82 мегабайт ) Кол-во скачиваний: 557


ЗЫ: может кто поделиться лекарством для DS-5? rolleyes.gif пробная лицензия закончилась...

Сообщение отредактировал serjj - Jan 12 2015, 09:44
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 26 2015, 05:50
Сообщение #15


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

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



Добрый день, serjj.

Появилось время на знакомство с HPS, появились вопросы, которые Вы видимо прошли. Если не трудно помогите советом.

1. Почему boot из FPGA? Надо же что-то в FPGA городить чтобы залить файл в HPS? Хочу использовать boot из QSPI (FPGA и HPS), может чего-то не учел?
2. В DS5 как создается проект? Просто new project c++ и все, пишем сорс, компилируем и готово? Привык что в ниосе еще огромная BSP. Неужели тут ничего, кроме сорсов приложения ?
3. При boot-е из QSPI я так понял сначала грузим HPS, а как грузится FPGA? Видел что надо rbf файл сделать, а куда его втолкнуть потом?

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


Спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:30
Рейтинг@Mail.ru


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