Aleksei_Rostov 0 21 ноября, 2014 Опубликовано 21 ноября, 2014 · Жалоба Здравствуйте! Подскажите как лучше решить след задачу: есть fifo + microblz + dma + ddr Необходимо "аппаратно" наполнить fifo и программно c помощью mcrblz записать данные в DDR. Пока делаю так: вешаю FIFO на AXI для процессора (DMA) c одной стороны, а с другой вывожу ноги наружу. Наполняю FIFO и по сигналу full процессор должен дать команду DMA на трансфер данных в ДДР. Вот тут и загвоздка: как сигнал full сделать сигналом прерывания для процессора? FIFO сделал через coregen и в XPS повесил на шину через интерф AXI4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 ноября, 2014 Опубликовано 21 ноября, 2014 · Жалоба можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 21 ноября, 2014 Опубликовано 21 ноября, 2014 · Жалоба можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не? хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 ноября, 2014 Опубликовано 21 ноября, 2014 · Жалоба есть мнение что нечего лезть в шину на прикладном уровне. Надо поглядеть нет ли у контроллера ДМА сигнала запуска, его еще логично было бы заюзать, а вот какие-то внутренние сигналы шины ИМХО не верно. Но еще раз ИМХО, может у кого есть и другое аргументированное мнение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 21 ноября, 2014 Опубликовано 21 ноября, 2014 · Жалоба Приветствую! хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения Вы не на тех "девушек" посматриваете :) Если уж так надо такую колбасу колбасить - в смысле через прерывании программно запускать DMA, то в составе любой системы Microblaze уже есть контроллер прерывания. На этот контроллер заводятся все прерывания в системе (таймер, UART, DMA, тот же GPIO). По аналогии заводите туда еще один сигнал, подключаете к выводу FULL (в соответствующей полярности), пишете функцию инициализации и обработки соответствующего прерывания и вуаля - начинаете периодически терять ваши данные на входе в фифо :( Поскольку как быстро это прерывание обработается прогнозировать хоть и можно но тяжело - а данным может быть ну уж очень невтерпеж! Тогда уж лучше цепляйте сигнал прерывания на AFULL. Правильнее наверное подключить источник ваших данных непосредственно на вход stream DMA (черз фифо или непосредственно) и уже получать прерывание по окончанию пересылки заданного количества данных в память. Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 22 ноября, 2014 Опубликовано 22 ноября, 2014 · Жалоба Правильнее наверное подключить источник ваших данных непосредственно на вход stream DMA (черз фифо или непосредственно) и уже получать прерывание по окончанию пересылки заданного количества данных в память. большое спасибо за совет. Действительно лезть в шину это я погорячился... :laughing: Про подачу данных непосредственно на вход ДМА обязательно посмотрю. Вообще в идеале задача решалась бы так: на шину вешать ядро FIFO с выходом в сторону процессора (ДМА) , а вход выводить наружу. Тут я до конца не разобрался: в xps ядра FIFO такой возможности не предоставляют... (из двух ядер одно для ethernet, другое для ДМА (скорее всего то о чем Вы говорите)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться