dubb 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Доброго времени суток. Имеется Vivado 2016.2, борда KC705 + скоро появиться модуль память SODIMM 4GB вместо стандартного. Нужно присоединить память DDR3 на 4 Гигабайта к Микроблейзу. Для хранения данных в процессе работы, Использую Xilinx MIG. Соответственно память появляется в общем адресном пространстве системы, а поскольку МБ 32 битный оно всё вмещает 4 ГБ. На вопрос "можно-ли это сделать" ответили здесь https://forums.xilinx.com/t5/Memory-Interfa...DR3/td-p/632200 говорят что можно, хоть 8 ГБ. Теперь вопрос "как?" Каким образом организовать доступ к этой памяти? На некоторых англо-язычных форумах советуют Memory segmentation, но примеров не приводят. Принцип сегментации памяти ясен как белый день, но как его реализовать на практике непонятно. Можно-ли это сделать стандартными средствами? Или нужно будет городить прослойку между Master-AXI и MIG? В общем хотелось бы услышать совет от тех кто уже прошел эту дорогу, уверен не у меня первого возникла необходимость подключить более 2ГБ памяти )) Заранее спасибо за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Используйте DMA для доступа к памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба судя по ссылке для подсоединения к процессору больше 3 гигов (2^32 -1) - Вам понадобиться "прослойка" логики которая будет например в зависти от флага переводить адресацию к памяти DDR к следующим (2^32 -1) памяти. Т.е. процессор будет видеть только (2^32 -1) памяти, переходить к слудующему (2^32 -1) участку памяти по флагу или другой внешней логики Это мое личное понимание Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Поискать вместо Микроблейза 64битный проц - не? Нельзя ли пояснить, зачем эту мегапамять вешать конкретно на Микроблейз, что он с ней делать будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dubb 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба судя по ссылке для подсоединения к процессору больше 3 гигов (2^32 -1) - Вам понадобиться "прослойка" логики которая будет например в зависти от флага переводить адресацию к памяти DDR к следующим (2^32 -1) памяти. Т.е. процессор будет видеть только (2^32 -1) памяти, переходить к слудующему (2^32 -1) участку памяти по флагу или другой внешней логики Это мое личное понимание Если я вас правильно понял, то нужно написать свое ядро, у которого наружу будут смотреть AXI_Master (к контроллеру памяти), AXI_Slave0 (к микроблейзу интерфейс памяти) и AXI_Slave1 (к микроблейзу интерфейс управления для переключения сегментов памяти). Ну или интерфейсы до МБ можно засунуть в один AXI c адресным пространством типа [Размер сегмента памяти + управляющий регистр] ? Поискать вместо Микроблейза 64битный проц - не? Нельзя ли пояснить, зачем эту мегапамять вешать конкретно на Микроблейз, что он с ней делать будет? Почему микроблейз - из-за распространенности, много примеров, документации. Сейчас задача - тестирование памяти. Вы можете посоветовать какой-то вариант 64 бит софотового проца с контроллером DDR3? В процах пока не силен к сожалению. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Приветствую! Если я вас правильно понял, то нужно написать свое ядро, у которого наружу будут смотреть AXI_Master (к контроллеру памяти), AXI_Slave0 (к микроблейзу интерфейс памяти) и AXI_Slave1 (к микроблейзу интерфейс управления для переключения сегментов памяти). Ну или интерфейсы до МБ можно засунуть в один AXI c адресным пространством типа [Размер сегмента памяти + управляющий регистр] ? Почему микроблейз - из-за распространенности, много примеров, документации. Сейчас задача - тестирование памяти. Вы можете посоветовать какой-то вариант 64 бит софотового проца с контроллером DDR3? В процах пока не силен к сожалению. Сначала желательно изучить имеющуюся матчасть а потом уж ваят что-то свое Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dubb 0 15 сентября, 2016 Опубликовано 15 сентября, 2016 · Жалоба Сначала желательно изучить имеющуюся матчасть а потом уж ваят что-то свое Rob, спасибо, пропустил эту замечательную настройку Микроблейза. Думаю теперь обойдется без своих велосипедов) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 15 сентября, 2016 Опубликовано 15 сентября, 2016 · Жалоба Rob, спасибо, пропустил эту замечательную настройку Микроблейза. Думаю теперь обойдется без своих велосипедов) Просто сия фича не давно появилась - просто её не заметили... :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dubb 0 21 ноября, 2016 Опубликовано 21 ноября, 2016 · Жалоба Реанимирую старую тему. Кто-нибудь пользовался этой фичей - расширения адресного пространства? Насколько стабильно работает? У меня возникли проблемы с "улетанием" Микроблейза в неведомые дали, при попытке провести тест памяти. В проекте с адреса 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 я одновременно записываю в область локальной памяти (что лежит с нулевого адреса) и это приводит к вышеописанным проблемам. Итак вопрос к тем кто использовал эту опцию в МБ. Работает ли оно у Вас? Может у меня не хватает какой-нибудь включенной опции компилятора или чего-то еще? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 22 ноября, 2016 Опубликовано 22 ноября, 2016 · Жалоба Реанимирую старую тему. Кто-нибудь пользовался этой фичей - расширения адресного пространства? Насколько стабильно работает? У меня возникли проблемы с "улетанием" Микроблейза в неведомые дали, при попытке провести тест памяти. В проекте с адреса 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 я одновременно записываю в область локальной памяти (что лежит с нулевого адреса) и это приводит к вышеописанным проблемам. Итак вопрос к тем кто использовал эту опцию в МБ. Работает ли оно у Вас? Может у меня не хватает какой-нибудь включенной опции компилятора или чего-то еще? Спасибо! Проверь вот какие вещи - есть ли в микроблейзе встроенный умножитель, какого он типа (32 или 64) и соответствует ли это ключам компиляции софта? Недавно долго и мучительно искал глюки, связанные с подобным несоответствием (типа инструкция mul выполняется, но результат этой инструкции некорректный). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться