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

 
 
 
Reply to this topicStart new topic
> Microblaze + DDR3 4GB+, как прикрутить большую память
dubb
сообщение Sep 14 2016, 10:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-08-09
Из: Сибири
Пользователь №: 51 936



Доброго времени суток.

Имеется 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ГБ памяти ))

Заранее спасибо за ответы.
Go to the top of the page
 
+Quote Post
doom13
сообщение Sep 14 2016, 13:40
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Используйте DMA для доступа к памяти.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 14 2016, 14:01
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



судя по ссылке для подсоединения к процессору больше 3 гигов (2^32 -1) - Вам понадобиться "прослойка" логики которая будет например в зависти от флага переводить адресацию к памяти DDR к следующим (2^32 -1) памяти.
Т.е. процессор будет видеть только (2^32 -1) памяти, переходить к слудующему (2^32 -1) участку памяти по флагу или другой внешней логики

Это мое личное понимание


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Sep 14 2016, 14:56
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Поискать вместо Микроблейза 64битный проц - не? Нельзя ли пояснить, зачем эту мегапамять вешать конкретно на Микроблейз, что он с ней делать будет?
Go to the top of the page
 
+Quote Post
dubb
сообщение Sep 14 2016, 17:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-08-09
Из: Сибири
Пользователь №: 51 936



Цитата(Maverick @ Sep 14 2016, 18:01) *
судя по ссылке для подсоединения к процессору больше 3 гигов (2^32 -1) - Вам понадобиться "прослойка" логики которая будет например в зависти от флага переводить адресацию к памяти DDR к следующим (2^32 -1) памяти.
Т.е. процессор будет видеть только (2^32 -1) памяти, переходить к слудующему (2^32 -1) участку памяти по флагу или другой внешней логики

Это мое личное понимание


Если я вас правильно понял, то нужно написать свое ядро, у которого наружу будут смотреть AXI_Master (к контроллеру памяти), AXI_Slave0 (к микроблейзу интерфейс памяти) и AXI_Slave1 (к микроблейзу интерфейс управления для переключения сегментов памяти). Ну или интерфейсы до МБ можно засунуть в один AXI c адресным пространством типа [Размер сегмента памяти + управляющий регистр] ?


Цитата(Koluchiy @ Sep 14 2016, 18:56) *
Поискать вместо Микроблейза 64битный проц - не? Нельзя ли пояснить, зачем эту мегапамять вешать конкретно на Микроблейз, что он с ней делать будет?


Почему микроблейз - из-за распространенности, много примеров, документации.
Сейчас задача - тестирование памяти.
Вы можете посоветовать какой-то вариант 64 бит софотового проца с контроллером DDR3? В процах пока не силен к сожалению.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Sep 14 2016, 18:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(dubb @ Sep 14 2016, 20:53) *
Если я вас правильно понял, то нужно написать свое ядро, у которого наружу будут смотреть AXI_Master (к контроллеру памяти), AXI_Slave0 (к микроблейзу интерфейс памяти) и AXI_Slave1 (к микроблейзу интерфейс управления для переключения сегментов памяти). Ну или интерфейсы до МБ можно засунуть в один AXI c адресным пространством типа [Размер сегмента памяти + управляющий регистр] ?

Почему микроблейз - из-за распространенности, много примеров, документации.
Сейчас задача - тестирование памяти.
Вы можете посоветовать какой-то вариант 64 бит софотового проца с контроллером DDR3? В процах пока не силен к сожалению.

Сначала желательно изучить имеющуюся матчасть а потом уж ваят что-то свое

Прикрепленное изображение


Удачи! Rob.
Go to the top of the page
 
+Quote Post
dubb
сообщение Sep 15 2016, 05:23
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-08-09
Из: Сибири
Пользователь №: 51 936



Цитата(RobFPGA @ Sep 14 2016, 22:19) *
Сначала желательно изучить имеющуюся матчасть а потом уж ваят что-то свое


Rob, спасибо, пропустил эту замечательную настройку Микроблейза.

Думаю теперь обойдется без своих велосипедов)
Go to the top of the page
 
+Quote Post
Alex77
сообщение Sep 15 2016, 06:39
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(dubb @ Sep 15 2016, 08:23) *
Rob, спасибо, пропустил эту замечательную настройку Микроблейза.

Думаю теперь обойдется без своих велосипедов)

Просто сия фича не давно появилась - просто её не заметили... rolleyes.gif
Go to the top of the page
 
+Quote Post
dubb
сообщение Nov 21 2016, 10:15
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-08-09
Из: Сибири
Пользователь №: 51 936



Реанимирую старую тему.
Кто-нибудь пользовался этой фичей - расширения адресного пространства? Насколько стабильно работает?

У меня возникли проблемы с "улетанием" Микроблейза в неведомые дали, при попытке провести тест памяти.
В проекте с адреса 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 я одновременно записываю в область локальной памяти (что лежит с нулевого адреса) и это приводит к вышеописанным проблемам.

Итак вопрос к тем кто использовал эту опцию в МБ. Работает ли оно у Вас? Может у меня не хватает какой-нибудь включенной опции компилятора или чего-то еще?

Спасибо!
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Nov 22 2016, 03:46
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(dubb @ Nov 21 2016, 17:15) *
Реанимирую старую тему.
Кто-нибудь пользовался этой фичей - расширения адресного пространства? Насколько стабильно работает?

У меня возникли проблемы с "улетанием" Микроблейза в неведомые дали, при попытке провести тест памяти.
В проекте с адреса 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 выполняется, но результат этой инструкции некорректный).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:25
Рейтинг@Mail.ru


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