Jump to content

    
Sign in to follow this  
Aleksei_Rostov

fifo + microblaze прерывания

Recommended Posts

Здравствуйте! Подскажите как лучше решить след задачу:

есть fifo + microblz + dma + ddr

Необходимо "аппаратно" наполнить fifo и программно c помощью mcrblz записать данные в DDR.

 

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

Наполняю FIFO и по сигналу full процессор должен дать команду DMA на трансфер данных в ДДР.

 

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

 

 

FIFO сделал через coregen и в XPS повесил на шину через интерф AXI4.

Share this post


Link to post
Share on other sites
можно добавить еще порт GPIO с прерыванием, и сигнал завести как бы на его ногу, так не?

 

хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения

Share this post


Link to post
Share on other sites

есть мнение что нечего лезть в шину на прикладном уровне.

Надо поглядеть нет ли у контроллера ДМА сигнала запуска, его еще логично было бы заюзать, а вот какие-то внутренние сигналы шины ИМХО не верно. Но еще раз ИМХО, может у кого есть и другое аргументированное мнение...

Share this post


Link to post
Share on other sites

Приветствую!

 

хорошая идея. Еще посматриваю в сторону сигнала s_axi_rready для интерфейса. Вроде как по нему процессор получает информацию о готовности канала чтения

 

Вы не на тех "девушек" посматриваете :)

 

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

 

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

 

Успехов! Rob.

 

 

 

 

Share this post


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

 

большое спасибо за совет. Действительно лезть в шину это я погорячился... :laughing:

Про подачу данных непосредственно на вход ДМА обязательно посмотрю.

 

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this