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

 
 
 
Reply to this topicStart new topic
> размещение data и code microblaze
Alexey_Rostov
сообщение Apr 20 2015, 07:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Здравствуйте! Столкнулся с одной проблемой в 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 слейва без каких либо модификации (за исключением прибавления константы).

Сообщение отредактировал farbius - Apr 20 2015, 07:15
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2015, 11:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

При старте через среду, перед "заливкой" программы надо заливать bootloop прошивку (в sdk генерится автоматом), а только потом стартовать основную программу... бутлуп тормозить работу проца до загрузки программы во внешнюю память, а без него будет то что вы видите, потому что выполняется мусор оттуда...
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Apr 22 2015, 13:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(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 таких проблем не было (((

Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Apr 23 2015, 07:18
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



Цитата(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 соответственно не поддерживает.


--------------------
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Apr 25 2015, 10:15
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(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?



Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:35
Рейтинг@Mail.ru


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