1891ВМ12Я 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Изучаю 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 4 апреля, 2022 Опубликовано 4 апреля, 2022 · Жалоба Просто отпишусь, мне удалось эту гадость завести в модели - штатный пример, я в нем четко вижу все адреса и данные, что куда. В модели Cyclic режим работает прекрасно Однако, попытки создания своего тестбенча не приводят к успеху. Но заставить ядро кушать больше 2 пачек данных и вообще есть больше данных мне удалось. Будете смеяться как - я просто задействовал компонент PLL... Это абсурд, оно не должно так реагировать, это же поведенческая модель, какая разница какие частоты на каких портах Более того, оно начало работать тогда, когда я убрал read порт и оставил лишь S2MM write порт. Ну чушь же, они независимы вообще то Сейчас затык - оно принимает нужное число данных, но упорно пишет фрагменты данных по одному адресу, хотя каждый дескриптор - 1 пачка данных по одному адресу. И почему то после 4 пачек на 1 адрес оно берет следующий адрес и... ничего не делает. Как такое отлажить я не понимаю, перепробовал всё что можно, и продолжаю свой рандом перебор. Отвратительное ядро axi_dma, лучше не использовать, наверное стоило самому в порты Zynq записывать и не связываться с этим корявым ядром, которое даже статусы нормальные своего состояния не дает. Вот ядро PCI-E и то о себе многое говорит, отладить легко Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha 0 13 апреля, 2022 Опубликовано 13 апреля, 2022 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 13 апреля, 2022 Опубликовано 13 апреля, 2022 · Жалоба 6 minutes ago, gosha said: Может, настройки (макс кол- во десткипоторов) ? Есть же примеры. https://support.xilinx.com/s/article/58080?language=en_US Спасибо за внимание к теме. В общем, суть в том что пример то в модели у меня работает как надо, я его добил. Но там на VHDL написано и я там с тудом могу что то разобрать. А я делаю сейчас полностью свой тест. Вот что мне удалось понять - я обнаружил у себя расхождения в таймингах с примером, увидел что что-то я запаздывал в некоторых местах и не откликался как надо. т.е. суть в том, чтобы полностью самостоятельно, своими сигналами, управлять этой штукой, чтобы освоить ее досконально. Теперь у меня всё ближе к результату, скоро кажется всё получится. Скоро я буду готов подсказывать по axi_dma другим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 3 сентября, 2022 Опубликовано 3 сентября, 2022 · Жалоба On 4/13/2022 at 9:15 AM, AVR said: Теперь у меня всё ближе к результату, скоро кажется всё получится. Скоро я буду готов подсказывать по axi_dma другим Пожалуй напишу спустя пол года про это. Подскажу чтобы не использовать ее в каких то расширенных целях. В составе обычного block design пожалуйста. Если надо что то более специализированное, просто лучше повторить это самостоятельно, проще написать аналог чем разобраться во всех несуразнустях этого axi_dma. Однако замечу, что это ядро "учебник по AXI" если в нем копаться Увы, чтобы заставить эту штуку работать как надо, я делал ей reset и продолжал работать дальше, а так - было уже поздно делать своё с нуля. Почему оно не будет брать дескрипторы, в каком оно состоянии, что не так - это не то ядро, в котором это будет ясно, никакие AXI Lite регистры или статусы не помогут - их там я не нашел Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться