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

Вешается шина PS у ULTRASCALE+, в чем может быть дело?

Всем доброго дня. 

У меня в системе несколько IP на avalon (мастеры). Через мост avalon-AXI они все подключены к одному PL-PS интерфейсу AXI HP0. У моста четыре слейва - входа, один мастер-выход. Вот настройки:

image.thumb.png.f0b49a757a80d707068a747118e95097.png

Все работает какое-то время - мастеры читают, c AXI все приходит. Потом что-то случается и со стороны авалона мост перестает отвечать на запросы. Есть нормальная транзакция и в режиме зависания. Помогите разобраться, в чем может быть дело? Я в  AXI не силен, поэтому буду благодарен, если кто подскажет (по скринам ниже), это мост висит или это PS мосту не отвечает и висит его шина AXI HP? При этом остальные три шины (AXI HP1- AXI HP3) работают штатно и на чтение и на запись, даже когда AXI HP0 висит. 

Нормальная работа :

image.thumb.jpeg.98e251ea0c96a74479015366a02483fc.jpeg

 

Шина висит (видно, что IP на avalon дает read и beginbursttransfer, а readdatavalid не появляется и на AXI шине тоже никакой активности):

image.thumb.jpeg.6094e35122e53ece8540aeb17decbc4a.jpeg

 

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


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

ИМХО вряд ли мост AXI-HP0 повис, это давно бы нашли. Скорее висит корка из-за нарушений требований AXI протокола. Например пересечение сегмента 4к на бурст или еще чего то типа такого. 

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


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

Ну "повис" я имел ввиду не дефект корки моста, там бы давно нашли, согласен. Понятно что что-то висит по моей вине, но вот что висит - понят не могу. По скриншотам определить это нельзя (кто чего ждет)? А у авалона нет такого ограничения по пересечении границы 4к? Мост, я уверен, правильно будет переделывать и транслировать команды авалона.

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


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

2 minutes ago, alexPec said:

Ну "повис" я имел ввиду не дефект корки моста, там бы давно нашли, согласен. Понятно что что-то висит по моей вине, но вот что висит - понят не могу. По скриншотам определить это нельзя (кто чего ждет)?

По второй картинке как раз видно  что висит именно мост так как сигнал avm_waitrequest в 1.   А вот  почему он висит причина на картинке не видна. 
Можно лишь гадать  что из за незаконченных полностью предыдущих транзакций на AXI. 

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


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

10 minutes ago, alexPec said:

Ну "повис" я имел ввиду не дефект корки моста, там бы давно нашли, согласен. Понятно что что-то висит по моей вине, но вот что висит - понят не могу. По скриншотам определить это нельзя (кто чего ждет)? А у авалона нет такого ограничения по пересечении границы 4к? Мост, я уверен, правильно будет переделывать и транслировать команды авалона.

чтобы по скринам посмотреть нарушения протокола, нужно чтобы транзакцию было видно полностью. У вас только хвосты. Т.е. нужны близко сигналы araddr, arlen транзакции перед зависанием. Еще карта ваших адресов. Про авалон и 4к не помню. Но в акси точно есть. Если бурст нарушает эту границу, он должен быть разбит на две транзакции. Вообще странно что корка не выдает ошибок в какие нить регистры статуса.

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


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

Как бы вот ее поймать-то, когда зависает все...

4 часа назад, RobFPGA сказал:

По второй картинке как раз видно  что висит именно мост так как сигнал avm_waitrequest в 1.   А вот  почему он висит причина на картинке не видна. 
Можно лишь гадать  что из за незаконченных полностью предыдущих транзакций на AXI. 

А с AXI там все нормально? Просто avm_waitrequest всегда в 1 висит, пока команду не подашь. Когда команду мастер выдает - мастер ждет, когда avm_waitrequest упадет в ноль - это подтверждение что слейв понял что от него хотят. 

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


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

1 hour ago, alexPec said:

Как бы вот ее поймать-то, когда зависает все...

А с AXI там все нормально? Просто avm_waitrequest всегда в 1 висит, пока команду не подашь. Когда команду мастер выдает - мастер ждет, когда avm_waitrequest упадет в ноль - это подтверждение что слейв понял что от него хотят. 

с точки зрения AXI, там тишина. arvalid = 0 -> никакой активности на акси нет и быть не может. Т.е. прокладка висит наглухо. Скорее всего не принимает новую транзакцию, потому что не закончила старую.

Самое простое уйдите на одиночные транзакции, если глючить не будет, то скорее всего бурст. Вы запросили с превышением границы адреса в 4к (не размера бурста, а именно границы адреса в бурсте), прокладка обрезала адрес, отдала на сторону проца, он переслал часть, как и должен. А прокладка ждет больше. Ну это чистое вангование

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


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

2 hours ago, alexPec said:

А с AXI там все нормально?

На приведённой  картинке с AXI все нормально.  А то что avm_waitrequest не опускается в 0  как раз и говорит что мост не готов начать новую  транзакцию.  А вот почему так и приходится гадать. 
Увы картинки не полные и допитая чашка кофе показывает следующее ... 

Если присмотреться то видны непонятки  -  на первой картинке -  на входе avm  видна 1 транзакция  на  на выходе  AXI две,  и при этом странное  сочетание адреса 0x**220 и  длины  0x77 для первой из них. Увы, параметры  второй транзакции 
непонятны как и параметры на входе avm
А на второй картинке   видно что перед началом avm транзакции на AXI rready  в 0 значит вроде как предыдущая транзакция окончилась, по аналогии с первой картинкой на которой rready устанавливается в 1  в начале первой транзакции на AXI. 
 

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


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

Большое спасибо за ответы! 
Не понимаю, как в принципе можно повесить мост через avalon в том виде, в котором он используется. Используется авалон всеми мастерами одинаково:
1. выставляю avm_address, burst count, begin burst transfer, avm_read.
2. На следующем такте begin burst transfer снимаю
3. при первом же неактивном avm_waitrequest снимаю сигнал avm_read.
4. Далее только по сигналу avm_readdatavalid (от моста в мой IP) хватаю с шины данные.

Т.е. я не имею никаких средств (при)остановки транзакции после снятия сигнала avm_read. Мост только на чтение. Есть идеи какая схема нужна чтобы его повесить? Что в принципе можно сделать чтобы он повис? Пока даже предположений никаких...

UPD: Интересно, если после шага 2 (каким-то чудом) снять avm_read НЕ дожидаясь установки avm_waitrequest в 0 и забыть про эту транзакцию, это повесит мост? 

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


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

Как оказалось, вешается не мост, а сама шина AXI у PS. Пробовал в "зависнутом" состоянии дергать за сброс моста - никакой реакции. Мост по прежнему не транслирует в AXI ничего. Похоже все-таки AXI-шина чего-то ждет. Как можно понять по сигналам на AXI шине, что, например, транзакция чтения (баст) не закончена?

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


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

12 минут назад, alexPec сказал:

Как можно понять по сигналам на AXI шине, что, например, транзакция чтения (баст) не закончена?

Можно попробовать применить https://www.xilinx.com/products/intellectual-property/axi_protocol_checker.html

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


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

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


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

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

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

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

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

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

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

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

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

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