Перейти к содержанию

    

HPS+DMA+Linux

Пытаюсь организовать общую память между FPGA и HPS.

Сделал мост fpga2sdram и простейший DMA со стороны FPGA.

Тестирование провожу следующим образом:

1. Выделяю в Linux приложении буфер uint32_t размером 1024 элемента (с выравниванием по страницам) и заполняю его тестовыми значениями.

2. Получаю физический адрес буфера и передаю его в DMA контроллер.

3. Запускаю DMA на копирование данных из HPS SDRAM в FPGA.

4. Смотрю считываемые данные со стороны FPGA с помощью SignalTap.

Если зарустить DMA сразу после заполнения буфера, то в FPGA копируется мусор, если подождать несколько миллисекунд, то корректные данные.

Есть предположение что при заполнении буфера данные сначала хранятся в кэше процессора и лишь затем сбрасываются в SDRAM.

Каким образом я могу заставить процессор протолкнуть буфер из кэша в SDRAM или как выделить некэшируемый буфер?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я несколько по другому делал, параметром в uboot'е указывал ОС использовать не всю память, а лишь первые, например, 1.8 ГБ памяти из 2 доступных физически на плате. В результате оставались 200 МБ неиспользуемой памяти вверху адресного пространства. Дальше делал отображение этого кусочка на виртуальную память через /dev/mem и работал как с обычным буфером. Никаких проблем с мусорными данными не замечал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти