Реанимирую старую тему.
Кто-нибудь пользовался этой фичей - расширения адресного пространства? Насколько стабильно работает?
У меня возникли проблемы с "улетанием" Микроблейза в неведомые дали, при попытке провести тест памяти.
В проекте с адреса 0x1_0000_0000 прилинкован 1Gb DDR3, но если поставить туда блочную память, то ситуация похожая
Вот что происходит:
Код
#include "mb_interface.h"
u32 Data;
u32 Rd_Data;
u32 err_cnt = 0;
u64 Addr = 0x0000000100000000LL;
// write-read test
for (u32 i = 0; i < 0x1000; i++) // words count loop
{
Data = (u32)i;
swea(Addr, Data); // Store word to extended address
Rd_Data = lwea(Addr);
if (Data != Rd_Data)
{
err_cnt++;
xil_printf("Err cnt: %u\n", cnt);
}
Addr = Addr + 4;
}
При выполнении такого кода проц улетает в какой-то бесконечный цикл, частью которого является, например, сообщение "Err cnt: %u". Оно в терминле крутиться постоянно.
Здесь я использую обращение в расширенном адресном пространстве в соответствии с MicroBlaze Processor Reference Guide(UG984) - функции swea(u62, u32) и lwea(u32).
Одиночные попытки прочитать - записать по произвольному адресу в диапазоне выше 0x1_0000_0000 как правило успешны. Создается впечатление, что при обращении к MIG я одновременно записываю в область локальной памяти (что лежит с нулевого адреса) и это приводит к вышеописанным проблемам.
Итак вопрос к тем кто использовал эту опцию в МБ. Работает ли оно у Вас? Может у меня не хватает какой-нибудь включенной опции компилятора или чего-то еще?
Спасибо!