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

Дублирование пакетов в pci-e

Добрый день! Создали тестовый проект на kintex ultra scale. Обмен по pcie работает, но смущает одна проблема. Иногда при записи в адрес пакеты повторяются. То есть, другими словами, я вижу valid, принимаю пакет, поднимаю ready и опускаю его в 0, а valid и last от ядра pcie продолжают висеть в "1". Это шина ПК дублирует пакет или это висит предыдущий? И если это происходит, то почему и как это исправить? Прилагаю фото из даташита как должно быть и фото  Ila как есть

 

Screenshot_2024-02-14-23-57-57-893_org.telegram.messenger.jpg

Screenshot_2024-02-15-00-02-01-199_org.telegram.messenger.jpg

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


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

Это уже следующий пакет идёт. В AXI передача считается завершенной в момент когда tvalid = 1 и tready = 1. При этом tvalid и tready могут подняты независимо друг от друга. Более того, tvalid не должен ждать поднятия tready. 

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


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

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

axis.jpg?fit=640,480&ssl=1

 

axi_stream.png?resize=640,259&ssl=1

 

17 hours ago, [email protected] said:

Добрый день! Создали тестовый проект на kintex ultra scale. Обмен по pcie работает, но смущает одна проблема. Иногда при записи в адрес пакеты повторяются. То есть, другими словами, я вижу valid, принимаю пакет, поднимаю ready и опускаю его в 0, а valid и last от ядра pcie продолжают висеть в "1". Это шина ПК дублирует пакет или это висит предыдущий? И если это происходит, то почему и как это исправить? Прилагаю фото из даташита как должно быть и фото  Ila как есть

 

Screenshot_2024-02-14-23-57-57-893_org.telegram.messenger.jpg

Screenshot_2024-02-15-00-02-01-199_org.telegram.messenger.jpg

количество передаваемых данных в пакете axi stream точно правильно? такое ощущение что не досчитываете на 1 

передача данных идет через axi fifo?

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


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

Спасибо за ответы! Сразу встречный вопрос- если запись в драйвере однократная. Что же в таком случае идёт из шины акси после завершения цикла? Что он там досылает, если из драйвера ничего не отправляли? Может ли быть дело в том, что у нас райзер для pcie 30 см? 

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


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

читать надо я не работал с pcie возможно какие-то пакети для обеспечения синхронизации - не знаю

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


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

2 часа назад, [email protected] сказал:

Спасибо за ответы! Сразу встречный вопрос- если запись в драйвере однократная. Что же в таком случае идёт из шины акси после завершения цикла? Что он там досылает, если из драйвера ничего не отправляли? Может ли быть дело в том, что у нас райзер для pcie 30 см? 

А как в драйвере пишется? Просто запись по адресу 32-битного числа? От райзера не должно зависит. Дажк если сигнал плохой и есть ретрансмиты, они отлавливаются на уровне ниже. 

У вас на той картинке ila работает на тактовой от axi? Просто выглядит немного странно - на двух тактах подряд принимается два пакета с записью по одному адресу, потом tready опускается. И самое странное - при поднятом tvalid и опущенном tready на следующем такте данные меняются что нарушает правила AXI и контроллер PCIe так делать не должен... 

И ещё вопрос - точно в коде не перепутаны сигналы контроллера от разных шин? Они называются по дкрацки - cq, cc, rq, rc, легко перепутать и слушать не тот tvalid или не те данные... 

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


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

4 hours ago, ObKo said:

И самое странное - при поднятом tvalid и опущенном tready на следующем такте данные меняются что нарушает правила AXI и контроллер PCIe так делать не должен...

На первой картинке в этой теме пример шины cq и там поднят tvalid, и данные меняются как раз после опускания tready, и висят в таком состоянии пока не получится следующий tready. Какие правила это нарушило? Добавлено: да, заметил на скриншоте, меняются данные дальше, не висят как должны.

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


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

On 2/15/2024 at 4:31 PM, [email protected] said:

Спасибо за ответы! Сразу встречный вопрос- если запись в драйвере однократная. Что же в таком случае идёт из шины акси после завершения цикла? Что он там досылает, если из драйвера ничего не отправляли? Может ли быть дело в том, что у нас райзер для pcie 30 см? 

Скорее всего криво формируете пакеты. Там есть особенность: внутри xdma есть fifo, вроде на 64 beat. Кроме того, в доке на xdma имеется описание на рекомендованный размер пакета. Мы работали фиксированными пакетами по 4k байт и проблем не было и это было под linux. Вообще xdma в режиме stream для весьма специфических задач, обычно все стараются поднять режим mm и работать с памятью DDR на плис.

Изменено пользователем likeasm

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


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

Всем спасибо за ответы и версии. Проблема решена.

 

Причина оказалась в том, что хоть в документации на ядро и указано что tready можно держать в нуле и использовать tready в качестве подтверждения приема с целью выдачи следующего пакета на шину, на деле же стабильно это работает только если держать tready постоянно в единице. Всё работает без дублирования если принять заголовок пакета, сохранить его содержимое, и пока идет обработка первого пакета, tready висит в нуле, а на шине при этом уже будет следующий пакет.

 

Это удалось выяснить с помощью симуляции с задействованием PCI root, при этом тест был изменен таким образом, чтобы уже на стороне PCI root отправлялись два пакета в соседних тактах.

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


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

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

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

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

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

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

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

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

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

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