Jump to content

    

axi_dma кушает 3 SG дескриптора, но больше двух пачек не берет

Recommended Posts

AVR

Изучаю axi_dma на Zynq. Режим simple dma успешно работает как в модели так и на реальном железе. Но вот в чем проблема, нужно освоить именно SG-DMA режим. На железе он не работает вообще, выкидывает флаг ошибки, и отладить ее я не могу никак (не документировно). Даю 4 дескриптора, только 3 оно хочет вычитывать, а пачек с AXI Stream берет всего 2, и не ясно какое подтверждение надо где давать

 

Решил осваивать в модели, симулятор Vivado simulator. Я даю 4 дескриптора подряд, но оно забирает из памяти лишь 3 первых (содержимое верно, last флаг в правильном месте), но принимает всего лишь две посылки! Две, но абсолютно верно, правильно, всё идеально. А потом молча просто не берет больше

 

Посылки Stream to Memory Mapped правильной длины (по 256 байт), общий буфер в регистре 0x58 задал 8192 байт. Указатели на дескрипторы верные, tail адрес тоже верный. В упор не вижу причины, а почему бы ему не взять и третий пакет данных, и четвертый и тысячный??? Пробовал менять значения битов start end в дескрипторе - что с ним что без него - разницы не увидел

 

Как отлаживать такие проблемы? Где найти документацию на значения битов axi_dma_tstvec - там целых 32 бита отладочной информации и абслюто нет информации по ним в официальной доке. Также я не пробовал смотреть содержимое функций стандартных, которые в библиотеке Xilinx запускают транзакции, пробовал только по документации регистры настраивать. Но код примеров изучал, не видно разницы, вся разница которую пока что увидел, что там просто осуществляется проверка что SG-режим включен. Это я делаю чтением AXI Lite в тестбенче, там всё верно - бит показывает всё норм. Пробовал Cyclic DMA бит - снова ничего. Настройки IP ядра тоже смотреть - ничего дефолт, но есть канал чтения и записи - считается ли это multi channel mode?

Share this post


Link to post
Share on other sites

AVR

Просто отпишусь, мне удалось эту гадость завести в модели - штатный пример, я в нем четко вижу все адреса и данные, что куда. В модели Cyclic режим работает прекрасно


Однако, попытки создания своего тестбенча не приводят к успеху. Но заставить ядро кушать больше 2 пачек данных и вообще есть больше данных мне удалось. Будете смеяться как - я просто задействовал компонент PLL... Это абсурд, оно не должно так реагировать, это же поведенческая модель, какая разница какие частоты на каких портах

 

Более того, оно начало работать тогда, когда я убрал read порт и оставил лишь S2MM write порт. Ну чушь же, они независимы вообще то

 

Сейчас затык - оно принимает нужное число данных, но упорно пишет фрагменты данных по одному адресу, хотя каждый дескриптор - 1 пачка данных по одному адресу. И почему то после 4 пачек на 1 адрес оно берет следующий адрес и... ничего не делает. Как такое отлажить я не понимаю, перепробовал всё что можно, и продолжаю свой рандом перебор. Отвратительное ядро axi_dma, лучше не использовать, наверное стоило самому в порты Zynq записывать и не связываться с этим корявым ядром, которое даже статусы нормальные своего состояния не дает. Вот ядро PCI-E и то о себе многое говорит, отладить легко

Share this post


Link to post
Share on other sites

gosha
On 2/20/2022 at 6:16 PM, AVR said:

Изучаю axi_dma на Zynq. Режим simple dma успешно работает как в модели так и на реальном железе. Но вот в чем проблема, нужно освоить именно SG-DMA режим. На железе он не работает вообще, выкидывает флаг ошибки, и отладить ее я не могу никак (не документировно). Даю 4 дескриптора, только 3 оно хочет вычитывать, а пачек с AXI Stream берет всего 2, и не ясно какое подтверждение надо где давать

 

Решил осваивать в модели, симулятор Vivado simulator. Я даю 4 дескриптора подряд, но оно забирает из памяти лишь 3 первых (содержимое верно, last флаг в правильном месте), но принимает всего лишь две посылки! Две, но абсолютно верно, правильно, всё идеально. А потом молча просто не берет больше

 

Посылки Stream to Memory Mapped правильной длины (по 256 байт), общий буфер в регистре 0x58 задал 8192 байт. Указатели на дескрипторы верные, tail адрес тоже верный. В упор не вижу причины, а почему бы ему не взять и третий пакет данных, и четвертый и тысячный??? Пробовал менять значения битов start end в дескрипторе - что с ним что без него - разницы не увидел

 

Как отлаживать такие проблемы? Где найти документацию на значения битов axi_dma_tstvec - там целых 32 бита отладочной информации и абслюто нет информации по ним в официальной доке. Также я не пробовал смотреть содержимое функций стандартных, которые в библиотеке Xilinx запускают транзакции, пробовал только по документации регистры настраивать. Но код примеров изучал, не видно разницы, вся разница которую пока что увидел, что там просто осуществляется проверка что SG-режим включен. Это я делаю чтением AXI Lite в тестбенче, там всё верно - бит показывает всё норм. Пробовал Cyclic DMA бит - снова ничего. Настройки IP ядра тоже смотреть - ничего дефолт, но есть канал чтения и записи - считается ли это multi channel mode?

Может, настройки (макс кол- во десткипоторов) ?

Есть же примеры.

https://support.xilinx.com/s/article/58080?language=en_US

Share this post


Link to post
Share on other sites

AVR
6 minutes ago, gosha said:

Может, настройки (макс кол- во десткипоторов) ? Есть же примеры. https://support.xilinx.com/s/article/58080?language=en_US

Спасибо за внимание к теме. В общем, суть в том что пример то в модели у меня работает как надо, я его добил. Но там на VHDL написано и я там с тудом могу что то разобрать. А я делаю сейчас полностью свой тест. Вот что мне удалось понять - я обнаружил у себя расхождения в таймингах с примером, увидел что что-то я запаздывал в некоторых местах и не откликался как надо.

 

т.е. суть в том, чтобы полностью самостоятельно, своими сигналами, управлять этой штукой, чтобы освоить ее досконально.

 

Теперь у меня всё ближе к результату, скоро кажется всё получится. Скоро я буду готов подсказывать по axi_dma другим.

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.