|
|
  |
Altera SoC независимый бут HPS и FPGA, Если HPS и FPGA грузятся независимо, проц "не видит" FPGA |
|
|
|
Jul 27 2015, 09:49
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата Глупый вопрос конечно, но вы точно следовали руководству по работе с enable-disable портов на FPGA ? + кажется где то в полотне регистров я видел там какие то статусные для портов, может вам попробовать посмотреть что в них.. ? В каком документе можно подробнее об этом почитать? Я пробовал использовать функцию alt_bridge_init из библиотеки hwlib/alt_bridge_manager - функция выполняется, но ничего не изменяется, таже проблема. Обнаружил, что у меня в настройках конфигурации FPGA стоял самый низкоскоростной режим - x1 12.5 MHz, хотя у меня флеш EPCQ128. Поменял на x4 100 MHz - на отладке SoCkit обмен заработал после включения питания, а на нашей плате - всё по прежнему. Сделал вывод, что при работе прелоадера происходит инициализация бриджей и в случае большой разницы в скорости обмена для флешек FPGA и HPS возможна такая ситуация, что FPGA сильно "тормозит" и бридж не поднимается (что-то вроде таймаута ожидания вхождения FPGA в USER MODE). Но тогда почему на одной плате работает, а на другой нет? И почему я не могу проинициализировать бридж своим софтом с помощью той же alt_bridge_init?
|
|
|
|
|
Jul 27 2015, 14:01
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата На счёт "brgmodrst " - покажите как вы этот самый "банальный сброс этого регистра" делаете Код volatile unsigned int *p_brgmodrst = (unsigned int *) 0xFFD0501C; ... if (*p_brgmodrst) *p_brgmodrst = 0x0; вот так, например.. Специальной функции в alt_bridge_manager или alt_reset_manager я что-то не усмотрел, а preloader так вообще какие-то свои либины использует. Полагаю я работаю с регистром неправильно. Хотя из документации следует, что достаточно записать 0/1 в нужную позицию данного регистра для снятия сброса/сброса модуля, с которым он асоциируется. В карте регистров самого модуля (h2f в данном случае) каких-то принципиальных настроек не обнаружил. Да и вообще настройку можно провести так: Код alt_bridge_init(ALT_BRIDGE_H2F, NULL, NULL); но после снятия резета и вызова функции интерфейс все равно лежит. Не могли бы вы привести пример, как правильно сбрасывать и поднимать контроллер bridge'а в bare metal приложении (через hwlib или же напрямую через регистры)? С L3 (NIC-301) GPV / l3regs не очень понял. Если там нули - то это нормальный режим, когда bridge функционирует или в случае, если что-то пошло не так?
Сообщение отредактировал serjj - Jul 27 2015, 14:09
|
|
|
|
|
Jul 27 2015, 15:46
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 serjj Если в 2х словах, вас интересуют 2 регистра: brgmodrstSoftware writes a bit to 1 to assert the module reset signal and to 0 to de-assert the module reset signal.и remap0x1 - The LWHPS2FPGA AXI Bridge is visible to L3 masters.Грубо говоря последовательность включения мостов hps такая - вам надо сначала убрать сброс (brgmodrst - нули), а потом сделать их видимыми для L3 master-ов (remap - единицы). Там кажись если по чесноку, то сначала сбросы-клоки ставятся и проверяются, потом FPGAMGR проверяться должен в вашем случае, потом кажись сброс для SDRAM порта, потом убирание сбросов с мостов, потом мап мостов для L3. Как то так, но думаю вам brgmodrst+remap будет достаточно. По записи - так и писал, если склероз не изменяет.. На счёт кода - если до завтра не получится запустить так как описал выше, маякните, поковыряюсь в коде, где то валяется (давно с bare-metal не работал).
|
|
|
|
|
Jul 28 2015, 09:00
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
hwlib это песня... nand запустил на ней только после того, как туда залез. А функция alt_nand_flash_page_read оказалось некорректно работает с массивами произвольной длины и нужно их выравнивать к page size. Например, если page size = 512 слов, а буфер чтения - 16 слов, то вычитать то он вычитает, но всю страницу. Т.е. первые 16 слов поместит в указанный буфер, а остальные 496 - запишет по соседству, поверх всех переменных расположенных в памяти за буфером на чтение... С чуваком пол дня эту "фичу" отлавливали, пока не стало понятно, что происходит, весьма небезопасная и кривая реализация ИМХО. Тоже hwlib исходники иногда почитываю, там в хедерах по сути недостоющая документация находится, которую они не удосужились в pdf собрать А на пингвине вообще как? поприятнее работа идёт или тоже глюк на глюке?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|