[email protected] 0 14 февраля Опубликовано 14 февраля · Жалоба Добрый день! Создали тестовый проект на kintex ultra scale. Обмен по pcie работает, но смущает одна проблема. Иногда при записи в адрес пакеты повторяются. То есть, другими словами, я вижу valid, принимаю пакет, поднимаю ready и опускаю его в 0, а valid и last от ядра pcie продолжают висеть в "1". Это шина ПК дублирует пакет или это висит предыдущий? И если это происходит, то почему и как это исправить? Прилагаю фото из даташита как должно быть и фото Ila как есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ObKo 1 15 февраля Опубликовано 15 февраля · Жалоба Это уже следующий пакет идёт. В AXI передача считается завершенной в момент когда tvalid = 1 и tready = 1. При этом tvalid и tready могут подняты независимо друг от друга. Более того, tvalid не должен ждать поднятия tready. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 февраля Опубликовано 15 февраля · Жалоба 2 hours ago, ObKo said: Это уже следующий пакет идёт. В AXI передача считается завершенной в момент когда tvalid = 1 и tready = 1. При этом tvalid и tready могут подняты независимо друг от друга. Более того, tvalid не должен ждать поднятия tready. момент завершения пакета сигнализирует M_TLAST = '1' и M_TVALID = '1' и M_TREADY = '1' когда tvalid = 1 и tready = 1 при таких условиях происходит передача данних по axi stream 17 hours ago, [email protected] said: Добрый день! Создали тестовый проект на kintex ultra scale. Обмен по pcie работает, но смущает одна проблема. Иногда при записи в адрес пакеты повторяются. То есть, другими словами, я вижу valid, принимаю пакет, поднимаю ready и опускаю его в 0, а valid и last от ядра pcie продолжают висеть в "1". Это шина ПК дублирует пакет или это висит предыдущий? И если это происходит, то почему и как это исправить? Прилагаю фото из даташита как должно быть и фото Ila как есть количество передаваемых данных в пакете axi stream точно правильно? такое ощущение что не досчитываете на 1 передача данных идет через axi fifo? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
[email protected] 0 15 февраля Опубликовано 15 февраля · Жалоба Спасибо за ответы! Сразу встречный вопрос- если запись в драйвере однократная. Что же в таком случае идёт из шины акси после завершения цикла? Что он там досылает, если из драйвера ничего не отправляли? Может ли быть дело в том, что у нас райзер для pcie 30 см? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 февраля Опубликовано 15 февраля · Жалоба читать надо я не работал с pcie возможно какие-то пакети для обеспечения синхронизации - не знаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ObKo 1 15 февраля Опубликовано 15 февраля · Жалоба 2 часа назад, [email protected] сказал: Спасибо за ответы! Сразу встречный вопрос- если запись в драйвере однократная. Что же в таком случае идёт из шины акси после завершения цикла? Что он там досылает, если из драйвера ничего не отправляли? Может ли быть дело в том, что у нас райзер для pcie 30 см? А как в драйвере пишется? Просто запись по адресу 32-битного числа? От райзера не должно зависит. Дажк если сигнал плохой и есть ретрансмиты, они отлавливаются на уровне ниже. У вас на той картинке ila работает на тактовой от axi? Просто выглядит немного странно - на двух тактах подряд принимается два пакета с записью по одному адресу, потом tready опускается. И самое странное - при поднятом tvalid и опущенном tready на следующем такте данные меняются что нарушает правила AXI и контроллер PCIe так делать не должен... И ещё вопрос - точно в коде не перепутаны сигналы контроллера от разных шин? Они называются по дкрацки - cq, cc, rq, rc, легко перепутать и слушать не тот tvalid или не те данные... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 15 февраля Опубликовано 15 февраля · Жалоба 4 hours ago, ObKo said: И самое странное - при поднятом tvalid и опущенном tready на следующем такте данные меняются что нарушает правила AXI и контроллер PCIe так делать не должен... На первой картинке в этой теме пример шины cq и там поднят tvalid, и данные меняются как раз после опускания tready, и висят в таком состоянии пока не получится следующий tready. Какие правила это нарушило? Добавлено: да, заметил на скриншоте, меняются данные дальше, не висят как должны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 20 февраля Опубликовано 20 февраля (изменено) · Жалоба On 2/15/2024 at 4:31 PM, [email protected] said: Спасибо за ответы! Сразу встречный вопрос- если запись в драйвере однократная. Что же в таком случае идёт из шины акси после завершения цикла? Что он там досылает, если из драйвера ничего не отправляли? Может ли быть дело в том, что у нас райзер для pcie 30 см? Скорее всего криво формируете пакеты. Там есть особенность: внутри xdma есть fifo, вроде на 64 beat. Кроме того, в доке на xdma имеется описание на рекомендованный размер пакета. Мы работали фиксированными пакетами по 4k байт и проблем не было и это было под linux. Вообще xdma в режиме stream для весьма специфических задач, обычно все стараются поднять режим mm и работать с памятью DDR на плис. Изменено 20 февраля пользователем likeasm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
[email protected] 0 4 марта Опубликовано 4 марта · Жалоба Всем спасибо за ответы и версии. Проблема решена. Причина оказалась в том, что хоть в документации на ядро и указано что tready можно держать в нуле и использовать tready в качестве подтверждения приема с целью выдачи следующего пакета на шину, на деле же стабильно это работает только если держать tready постоянно в единице. Всё работает без дублирования если принять заголовок пакета, сохранить его содержимое, и пока идет обработка первого пакета, tready висит в нуле, а на шине при этом уже будет следующий пакет. Это удалось выяснить с помощью симуляции с задействованием PCI root, при этом тест был изменен таким образом, чтобы уже на стороне PCI root отправлялись два пакета в соседних тактах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться