BSACPLD 15 22 октября, 2018 Опубликовано 22 октября, 2018 · Жалоба Пытаюсь организовать общую память между FPGA и HPS. Сделал мост fpga2sdram и простейший DMA со стороны FPGA. Тестирование провожу следующим образом: 1. Выделяю в Linux приложении буфер uint32_t размером 1024 элемента (с выравниванием по страницам) и заполняю его тестовыми значениями. 2. Получаю физический адрес буфера и передаю его в DMA контроллер. 3. Запускаю DMA на копирование данных из HPS SDRAM в FPGA. 4. Смотрю считываемые данные со стороны FPGA с помощью SignalTap. Если зарустить DMA сразу после заполнения буфера, то в FPGA копируется мусор, если подождать несколько миллисекунд, то корректные данные. Есть предположение что при заполнении буфера данные сначала хранятся в кэше процессора и лишь затем сбрасываются в SDRAM. Каким образом я могу заставить процессор протолкнуть буфер из кэша в SDRAM или как выделить некэшируемый буфер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 25 октября, 2018 Опубликовано 25 октября, 2018 · Жалоба Я несколько по другому делал, параметром в uboot'е указывал ОС использовать не всю память, а лишь первые, например, 1.8 ГБ памяти из 2 доступных физически на плате. В результате оставались 200 МБ неиспользуемой памяти вверху адресного пространства. Дальше делал отображение этого кусочка на виртуальную память через /dev/mem и работал как с обычным буфером. Никаких проблем с мусорными данными не замечал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться