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

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 и работал как с обычным буфером. Никаких проблем с мусорными данными не замечал.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...