Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: fifo + microblaze прерывания
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Alexey_Rostov
Здравствуйте! Подскажите как лучше решить след задачу:
есть fifo + microblz + dma + ddr
Необходимо "аппаратно" наполнить fifo и программно c помощью mcrblz записать данные в DDR.

Пока делаю так: вешаю FIFO на AXI для процессора (DMA) c одной стороны, а с другой вывожу ноги наружу.
Наполняю FIFO и по сигналу full процессор должен дать команду DMA на трансфер данных в ДДР.

Вот тут и загвоздка: как сигнал full сделать сигналом прерывания для процессора?


FIFO сделал через coregen и в XPS повесил на шину через интерф AXI4.
Golikov A.
можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не?
Alexey_Rostov
Цитата(Golikov A. @ Nov 21 2014, 19:09) *
можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не?


хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения
Golikov A.
есть мнение что нечего лезть в шину на прикладном уровне.
Надо поглядеть нет ли у контроллера ДМА сигнала запуска, его еще логично было бы заюзать, а вот какие-то внутренние сигналы шины ИМХО не верно. Но еще раз ИМХО, может у кого есть и другое аргументированное мнение...
RobFPGA
Приветствую!

Цитата(farbius @ Nov 21 2014, 20:50) *
хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения


Вы не на тех "девушек" посматриваете sm.gif

Если уж так надо такую колбасу колбасить - в смысле через прерывании программно запускать DMA, то в составе любой системы Microblaze уже есть контроллер прерывания. На этот контроллер заводятся все прерывания в системе (таймер, UART, DMA, тот же GPIO). По аналогии заводите туда еще один сигнал, подключаете к выводу FULL (в соответствующей полярности), пишете функцию инициализации и обработки соответствующего прерывания и вуаля - начинаете периодически терять ваши данные на входе в фифо sad.gif Поскольку как быстро это прерывание обработается прогнозировать хоть и можно но тяжело - а данным может быть ну уж очень невтерпеж! Тогда уж лучше цепляйте сигнал прерывания на AFULL.

Правильнее наверное подключить источник ваших данных непосредственно на вход stream DMA (черз фифо или непосредственно) и уже получать прерывание по окончанию пересылки заданного количества данных в память.

Успехов! Rob.



Alexey_Rostov
Цитата(RobFPGA @ Nov 21 2014, 21:49) *
Правильнее наверное подключить источник ваших данных непосредственно на вход stream DMA (черз фифо или непосредственно) и уже получать прерывание по окончанию пересылки заданного количества данных в память.


большое спасибо за совет. Действительно лезть в шину это я погорячился... laughing.gif
Про подачу данных непосредственно на вход ДМА обязательно посмотрю.

Вообще в идеале задача решалась бы так: на шину вешать ядро FIFO с выходом в сторону процессора (ДМА) , а вход выводить наружу. Тут я до конца не разобрался: в xps ядра FIFO такой возможности не предоставляют... (из двух ядер одно для ethernet, другое для ДМА (скорее всего то о чем Вы говорите))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.