|
Cyclone V: загрузука HPS из памяти FPGA (FPGA boot) |
|
|
|
Dec 25 2014, 08:18
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 30 2014, 07:06
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 30 2014, 07:39
|
Местный
  
Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701

|
Мне летом какой-то крутой ARM-перец на форуме Альтеры советовал хитрый метод отладки всего стартапа HPS в DS-5, начиная с 1 команды BootROM, только я забросил всё это болото Альтерное после неисчислимых мучений ёжика в тумане... Сырость неописуемая, и эти ребята во главе с Об. запрещают нам ковыряться пальцем в носу !..  ...Там примерно надо было нажать резетную кнопку на плате и держать, в DS-5 как-то подключиться "на будущее", отпустить кнопку -- и отладчик становится на самое начало по адресу 0, потом можно по дизассемблеру степать и видеть место, где висяк -- это глядя из самого проца. Но исходников С-ных нет в принципе, логику и названия функций надо соображать по asm. Ну и из ПЛИС можно в Тапок вывести чтение того куска ОЗУ, в котором Прелоадер сидит. Хотя бы из окна Memory видна она или висяк моментальный. Только у Альтеры, как повелось издревле, трудно отлаживать стартовые процессы -- прошивка должна уже сидеть и ждать, только тогда можно пускать Тапка вручную, нет автоматизации с его автостартом, как только прошивка загрузится. Но проца можно держать в резете и отпускать, только когда Тапок включится. По идее, увидев BSEL для загрузки из ПЛИС, BootROM должен проинитить мост проц-ПЛИС самостоятельно, у него же незря 60 К кодов заложено на всё про всё в неисчислимых вариантах. И передать управление на содержимое C0000000, которое должно стать видимым. Вообще, зря они намудрили с этими BSEL-ами и BootROM-ами накристалльными... Самое надёжное и удобное нам решение -- отдать загрузку на откуп системному архитектору (обычно никому не нужны несколько src) и 1-стадийное ПО. Проц стартует с 0, и что ему там подставили на шине по этому адресу на чтение, то пусть и запускается, мудрствование обычно всегда бывает лукавым. Плохой носитель -- можно повторять попытки загрузки с адреса 4М, 8М... В 4М флэши можно уже уместить нормальное приложение, которое и полный функционал обеспечит, и при необходимости DDR подымет и скопирует свой кусок туда, но только при нормальном отладчике и надёжности.
|
|
|
|
|
Dec 30 2014, 11:37
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Новые новости с Boot фронта После подачи питания и залифки .sof файла удалось получить в signaltap следующие эпюры:
При этом видно, что данные вычитываются из памяти подряд на каждом такте и никак не привязаны к сигналу RVALID. Если я читаю содержимое сектора 0с0000000 вручную, то картинка получается такая:
Транзакция на шине сопровождается сигналом RVALID, по которому master будет капчурить данные, полученные от slave'a. Я пока не специалист по AXI, но по-моему очевидно, что эпюр на второй картинке соответствует правильной транзакции, а на первой - неправильной. Уже хорошо то, что проц пытается что-то прочитать после загрузки FPGA  , но вопрос почему он считывает данные неправильно?.. 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
|
|
|
|
|
Jan 9 2015, 11:31
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(serjj @ Dec 25 2014, 11:18)  Сталкивался ли кто нибудь с загрузкой из ПЛИС раньше? Может быть какие нибудь идеи, куда копать? С примерами такой загрузки довольно тухло (как впрочем с примерами Baremetal вообще). Буду рад любой помощи! попробуйте пройти по заведомо рабочей траектории: http://habrahabr.ru/post/235707/с учетом специфики своего железа.. а уж потом запилите свое baremetal..
|
|
|
|
|
Jan 12 2015, 09:42
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Продолжение "войны" с 5-м Cyclone'ом Пост на хабре я читал, всё конечно здорово, но вопрос не в 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?  пробная лицензия закончилась...
Сообщение отредактировал serjj - Jan 12 2015, 09:44
|
|
|
|
|
Jan 26 2015, 05:50
|
Профессионал
    
Группа: Свой
Сообщений: 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 файл сделать, а куда его втолкнуть потом?
Пока в голове каша, может вопросы примитивные, пожалуйста подскажите документы в которых искать ответы.
Спасибо.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|