Перейти к содержанию
    

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

Изучаю 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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


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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, gosha said:

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/13/2022 at 9:15 AM, AVR said:

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

Пожалуй напишу спустя пол года про это. Подскажу чтобы не использовать ее в каких то расширенных целях. В составе обычного block design пожалуйста. Если надо что то более специализированное, просто лучше повторить это самостоятельно, проще написать аналог чем разобраться во всех несуразнустях этого axi_dma. Однако замечу, что это ядро "учебник по AXI" если в нем копаться

 

Увы, чтобы заставить эту штуку работать как надо, я делал ей reset и продолжал работать дальше, а так - было уже поздно делать своё с нуля. Почему оно не будет брать дескрипторы, в каком оно состоянии, что не так - это не то ядро, в котором это будет ясно, никакие AXI Lite регистры или статусы не помогут - их там я не нашел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...