Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: размещение data и code microblaze
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Alexey_Rostov
Здравствуйте! Столкнулся с одной проблемой в Vivado 2014.3
Собрал систему с микроблейзом.

Добавил собственное ядро (созданное Визардом). В ядро записываю данные процессором, при записи в ядре прибавляется константа, и при считывании процессором данных из ядра наблюдаю сумму константы и исходных данных. Код в процессоре бесконечного цикла не содержит. Запись, чтение и вывод в консоль eclipse

Не понятно следующее:
При размещении секций памяти микроблейза в lmb_microbl_bram все работает отлично. При размещении в другой памяти (bram, ddr) появляется ошибка
Нажмите для просмотра прикрепленного файла

и ссылка на адрес в памяти

Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла

При этом если не использую собственное ядро, то без проблем размещаю Code, Data, Stack&Heap во внутренней bram (не lmb_mblz). Наиболее емким является text микроблейза.
Пробовал в linker script менять расположение секций памяти. Data секцию вывожу из lmb_bram работает без проблем, вывожу text -- опять ошибка.

Повторюсь: вся проблема только при использовании собственного IP AXI4 слейва без каких либо модификации (за исключением прибавления константы).
Golikov A.
По умолчанию микроблайз может проинитить только БРАМ память.
Если хотите программу запускать из другой памяти, то надо писать загрузчик который из конфигурационной флеши переложит данные в эту память...

Это про старт после выключения питания.

При старте через среду, перед "заливкой" программы надо заливать bootloop прошивку (в sdk генерится автоматом), а только потом стартовать основную программу... бутлуп тормозить работу проца до загрузки программы во внешнюю память, а без него будет то что вы видите, потому что выполняется мусор оттуда...
Alexey_Rostov
Цитата(Golikov A. @ Apr 20 2015, 14:26) *
По умолчанию микроблайз может проинитить только БРАМ память.
Если хотите программу запускать из другой памяти, то надо писать загрузчик который из конфигурационной флеши переложит данные в эту память...

Это про старт после выключения питания.

При старте через среду, перед "заливкой" программы надо заливать bootloop прошивку (в sdk генерится автоматом), а только потом стартовать основную программу... бутлуп тормозить работу проца до загрузки программы во внешнюю память, а без него будет то что вы видите, потому что выполняется мусор оттуда...


В моем случае проблемы с загрузчиком нет (bootloop заливаю каждый раз). Вопросы возникают с добавлением собственного ядра.

Например собрал простой проект: микроблейз, брам, дма, юарт.

Проинициализировал массив в памяти процессора, далее отправил с помощью ДМА в БРАМ, считал с помощью ДМА обратно в процессор и вывел массив в консоль Eclipse. Все работает идеально.

Далее добавляю к шине собственное IP c AXI 4 интерфейсом. Запускаю в Eclipse прежний проект и он не работает! (в консоле нули).

Получается следующее: при добавлении собственного ядра по шине нельзя пересылать burst ами. Как будто она блокируется.
При этом почисловое чтение\запись работают.

Может вопрос с burst ами. И тогда вышеописанная проблема возникает при попытке инициализации с помощью burst?

Может кто-нибудь создавал в Vivado собственные IP slave с AXI 4?

В XPS таких проблем не было (((

dm.pogrebnoy
Цитата(farbius @ Apr 22 2015, 16:33) *
В моем случае проблемы с загрузчиком нет (bootloop заливаю каждый раз). Вопросы возникают с добавлением собственного ядра.

Например собрал простой проект: микроблейз, брам, дма, юарт.

Проинициализировал массив в памяти процессора, далее отправил с помощью ДМА в БРАМ, считал с помощью ДМА обратно в процессор и вывел массив в консоль Eclipse. Все работает идеально.

Далее добавляю к шине собственное IP c AXI 4 интерфейсом. Запускаю в Eclipse прежний проект и он не работает! (в консоле нули).

Получается следующее: при добавлении собственного ядра по шине нельзя пересылать burst ами. Как будто она блокируется.
При этом почисловое чтение\запись работают.

Может вопрос с burst ами. И тогда вышеописанная проблема возникает при попытке инициализации с помощью burst?

Может кто-нибудь создавал в Vivado собственные IP slave с AXI 4?

В XPS таких проблем не было (((


Burst поддерживает только полная AXI-4. AXI-Lite соответственно не поддерживает.
Alexey_Rostov
Цитата(dm.pogrebnoy @ Apr 23 2015, 10:18) *
Burst поддерживает только полная AXI-4. AXI-Lite соответственно не поддерживает.


Ядро которое я создаю full AXI4.
Опишу проблему более просто:

Есть mblz, ddr3, bram, cdma.
Пишу код для процессора
Код
static u32 *PtrSrcDma = CDMA_BASE + 0x18;
static u32 *PtrDstDma = CDMA_BASE + 0x20;
static u32 *PtrBttDma = CDMA_BASE + 0x28;

#define BTT 128

int main(void){

    u8 Buffer[BTT], k = 0;
    int i;

    for(i = 0; i < BTT; i++){
        k += 1;
        Buffer[i]=k;
    }
    *PtrSrcDma = (u8 *)Buffer;
    *PtrDstDma = BRAM_BASE;
    *PtrBttDma = BTT;



    return 0;
}


Data, code, stack&heap процессора мапирую в DDR3. Тогда Buffer заполняется в DDR, откуда пересылается в BRAM. После того как код выполнился, проверяю содержимое DDR3, BRAM, регистров CDMA с помощью XMD.
Все работает отлично.
Создаю и прикручиваю собственное AXI4 full slave IP. Запускаю все тоже самое.
Процессор Unable to Stop. и сообщение

Цитата
An internal error occurred during: "Execute Debug Command".
Unable to Stop Processor
MicroBlaze Pipeline Stalled on a Blocking Instruction or Invalid Bus Access
Stalled PC: 0x80000010
Try Resetting the Processor to Continue..Processor is stalled at address 0x80000004. UNABLE to STOP MicroBlaze

0x80000000 адрес DDR контроллера
Data, code, stack&heap процессора мапирую в local memory bram. Процессор не виснет, но Buffer через CDMA в BRAM естественно я уже не вычитаю.
В чем может быть загвоздка с custom IP?



Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.