count_enable 0 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба Есть система Microblaze+DDR3. Есть 32-битный входящий порт, в который поступают данные, причем скорость плавает от 1К слов/сек до 1М слов/сек. По одному сценарию надо эти данные писать в память (ПДП), а процессор будет их читать. По второму сценарию их надо писать в другой AXI4-slave. Соответсвенно я создал AXI4-stream, но не могу разобраться как запустить DMA. Какая разница между Central DMA и Datamover? Как подключить порты - понимаю, но как запрограммировать DMA? Возможно, я выбрал плохой инструмент? В системе будет до 8 таких потоков, поэтому желателен ПДП, чтобы не перегрузить процессор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Какая разница между Central DMA и Datamover?Аналогичный вопрос. Плюс к этому ещё есть просто AXI DMA. Вот совсем запутался, в чём разница между ними тремя, для чего какой нужно применять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corvus 1 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Аналогичный вопрос. Плюс к этому ещё есть просто AXI DMA. Вот совсем запутался, в чём разница между ними тремя, для чего какой нужно применять. Разница в том, что axi бывает разный, в частности, бывает memory mapped, бывает axi stream, бывает axi stream video. Соответственно, разные DMA. В описании к каждому блоку всё указано The AXI CDMA engine provides high-bandwidth direct memory access between memory and AXI Stream-video type target peripherals Вот здесь простенький, но наглядный пример по работе http://www.fpgadeveloper.com/2014/03/using...dma-engine.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Вот здесь простенький, но наглядный пример по работе http://www.fpgadeveloper.com/2014/03/using...dma-engine.html за наглядный пример - спасибо вечером посмотрю - внимательнее (для самообучения) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Разница в том, что axi бывает разный, в частности, бывает memory mapped, бывает axi stream, бывает axi stream video. Соответственно, разные DMA. В описании к каждому блоку всё указаноСпасибо. Но указано крайне непонятно (возможно для неподготовленного). Вот например AXI DMA Engine (это он в XPS так называется, а в PDF-ке просто AXI DMA) и AXI DataMover - судя по первичному описанию делают то же самое. Т.е. перекладывают из memory mapped в stream. В чём же отличие? И когда какой нужно применить. Касаемо AXI Central DMA, как я понял, он перекладывает из memory mapped в memory mapped. Т.е. например в пределах одной памяти скопировать блок данных в другие адреса. Или переписать из одной памяти в другую. Правильно? Если в названии слово Video - это то же самое, что из без видео, только двухмерное, с этим понятно. Вобщем наиболее непонятно различие между AXI DMA Engine и AXI DataMover. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corvus 1 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Насколько я помню, AXI DataMover - это минимальный базовый блок. Управления по AXI-Light не имеет, соответственно, чтоб запустить нужен свой IP-Block, который будет получать управление по AXI-Light от Microblaze и рулить DataMover. AXI DMA Engine - его навороченная версия, предназначенная для работы напрямую от Microblaze. Основные отличия - у него есть AXI-Lite регистры и драйвера для конфигурации из Microblaze (из коробки), есть возможность использовать прерывания, несколько режимов работы, многоканальность и ещё что-то. Лично я работал только с ним. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Приветствую! AXI DataMover - это (и из названия видно) блок который непосредственно гоняет данные из stream в memory master и обратно Для того чтобы он заработал ему нужно через командный интерфейс задавать параметры пересылки Во как раз AXI DMA Engine или AXI Central DMA и есть варианты этого командного интерфейса в комплекте с AXI DataMover. Если надо реализовать хитрую логику пересылки (например без необходимости использования MCU, но при этом нет желания реализовывать всю логику AXI шины) Вы вы можете реализовать свой командный модуль который будет рулить AXI DataMover. Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 21 октября, 2014 Опубликовано 21 октября, 2014 · Жалоба Спасибо, теперь гораздо понятнее. Понял, что мне подходит AXI DMA Engine. По нему вопрос. Если его делать многоканальным, то у него обязательно должен быть включен режим scatter/gether? В явную не говорится, но в доке приводится описание многоканального режима только для C_INCLUDE_SG = 1, а для C_INCLUDE_SG = 0 не приводится. Не очень понимаю, что это за режим scatter/gether. Ничего конкретного не нагуглилось, кроме этого, но там речь идёт о возможности представления с помощью этой штуки непрерывного диапазона данных, когда он лежит физически в фрагментированных кусочках. Непонятно, как эта технология используется в ПЛИС, для чего можно например у себя применить. И неужели она такая нужная и широко распространённая? При том в доке на AXI DMA Engine я не увидел какого-либо "вступления для новичков" касаемо этой фичи. Только набор регистров как данность, т.е. ты заранее должен уже знать, как ей пользоваться. Может кто подскажет, где про это почитать касаемо применения в AXI DMA Engine? Может аппликуха есть какая, где всё разжёвано? И ещё: мог бы кто-нибудь объяснить на пальцах, что за термин 4 KB address boundary protection. Что за зверь, как работает, для чего нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба Чуть-чуть разобрался с режимом Scatter/Gether. Вещь полезная, конечно. Правильно ли я понимаю, что для него в XPS нужно поставить отдельный блочок памяти BRAM, к нему подключиться по AXI через AXI Interconnect так, чтобы доступ имел и MicroBlaze, и AXI DMA Engine через его порт Scatter/Gether? Но вот про многоканальный режим очень непонятно. Правильно ли я понимаю, что этот режим нужен, чтобы, например, при многопортовом доступе к одной и той же памяти, один блок AXI DMA Engine мог заменить связку нескольких одноканальных DMA-блоков (по числу портов доступа к памяти), соединённых между собой блоком AXI Interconnect? Т.е. вместо нескольких одноканальных DMA плюс Interconnect можно поставить один многоканальный DMA без интерконнекта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corvus 1 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба Зачем отдельный BRAM? Для наглядности добавьте в XPS Ethernet ядро с включённым режимом DMA. Он автоматом все шины подцепит и SG и MM2S и S2MM. SG идёт в ОЗУ. Про многоканальность - у меня сложилось такое же впечатление, когда разбирался. Правда, в реальном проекте обошлись одним каналом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 23 октября, 2014 Опубликовано 23 октября, 2014 · Жалоба Зачем отдельный BRAM? Для наглядности добавьте в XPS Ethernet ядро с включённым режимом DMA. Он автоматом все шины подцепит и SG и MM2S и S2MM. SG идёт в ОЗУ.Подскажите, пожалуйста, более подробно, что надо сделать. Я сам потыкался, там ядер много, какое конкретно поставить не знаю, парочку поставил - ничего не соединилось, памяти не образовалось... Более конкретно - мне хотелось бы знать, какую конкретно корку вставлять, где у неё включается DMA и какие блоки нужно добавить на схему до установки корки ethernet. Я пробовал так: создал пустой проект с микроблэйзом, потом добавил корку ethernet. Если что у меня spartan6 и ISE соответственно (14.7). Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 23 октября, 2014 Опубликовано 23 октября, 2014 · Жалоба Вроде решил эту проблему. Создал проект под демоборду SP605, там всё автоматом добавилось и соединилось. Видно, какие связи. Получается SG-порт - это порт доступа к той же памяти, для которой осуществляется и сам DMA. Т.е. дескрипторы SG хранятся в той же памяти, к которой осуществляется прямой доступ. Это для меня сначала было непривычно, но теперь вроде улеглось в голове. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться