Jump to content
    

Вешается шина 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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

2 minutes ago, alexPec said:

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

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

Share this post


Link to post
Share on other sites

10 minutes ago, alexPec said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

1 hour ago, alexPec said:

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

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

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

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

Share this post


Link to post
Share on other sites

2 hours ago, alexPec said:

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

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

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

Share this post


Link to post
Share on other sites

Большое спасибо за ответы! 
Не понимаю, как в принципе можно повесить мост через 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 и забыть про эту транзакцию, это повесит мост? 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...