Jump to content
    

Microsemi SmartFusion2 и PCIExpress

Добрый день!

Столкнулся с проблемой:

Есть плата собственной разработке на smartFusion2 (M2S050T-1FG484I) в ней используется встроенный блок Serdes с выходом на PCIExpress x 1.

Разработка идет в среде Libero SoC 11.6 с использованием SystemBilder'a. Для простоты сделан простенький проект где встроенный процессор и Serdes связаны по шине AHB, процессор мастер, Serdes - slave.

Плата подключена к шине PCIExpress через анализатор шины PCIE Lecroy Edge T1-4. 

Во встроенном процессоре написана простенькая программа - пришел символ по RS232 - выдать в Serdes 32разр. фиксированное слово по фиксированному адресу.

После включения питания - все устойчиво работает - нажал кнопку в терминалке - получил захваченную транзакцию MemWr на анализаторе. Всё работает под Windows 7 - плата нормально видится (как неопознанное устр-во, драйверов пока не написали...)

Если сделать перезагрузку компьютера с платой без выключения питания - всё также хорошо восстанавливается и работает.

Проблема в том что в плате необходимо предусмотреть возможность перезагрузки встроенного процессора, например от внешнего WDT таймера, когда например, встроенный процессор повис.

Сброс встроенного процессора возможен только через один вход - FAB_RESET. Подключение выхода внешнего WDT (он на плате есть) к контакту FAB_RESET приводит к перезагрузке встроенного процессора и всей его периферии (в том числе и SerDes'a).

Вход ручного сброса этого WDT подключен с сбросу шины PCIe. Если сброс платы происходит от сброса шины PCIe - то всё ок (см. выше - это перезагрузка компьютера без выкл. питания), если сброс платы происходит от срабатывания WDT - возникает проблема.

После этого сброса процессор нормально перезапускается, а вот с SerDes'ом проблемы. Он вроде бы нормально переинициализировался (в Win7 плата видна), выход встр. процессора SDIF_READY устанавливается в акт. состояние, при активности сигнала FAB_RESET'а я вижу на анализаторе PCIe транзакции LinkDown/LinkUP, кучу транзакций TS1,TS2, но при попытке записать из процессора в Serdes, последний опускает сигнал HREADY шины AHB в лог.0 (не готов) и не подымает его обратно в лог.1 (как он делает когда все работает). Транзакции MemWR на PCIE при этом нет. 

Возникает вопрос - кто-нибудь пытался сделать похожее, может не на Smartfusion2? Т.е перегружал SerDes подключенный к PCIe без наличия сброса с шины PCIe? 

Можно, конечно, поставить блокировку на сигналы сброса SerDes'a при наличии FAB_RESET'a, но мне кажется Serdes должен нормально переинициализироваться и без блокировок.....

 

 

 

 

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

Просмотрел свой PolarFire - у него сброс только со стороны PCI-Express по PERSTN, с локальной стороны сброса нет.

Share this post


Link to post
Share on other sites

On 3/25/2020 at 10:04 AM, Andrey_L said:

Добрый день!

Столкнулся с проблемой:

 

Если решение не найдете, то с этим лучше в тех. поддержку
https://www.microsemi.com/product-directory/product-support/4217-fpgas-socs-support
Contact Information
Technical support
Web...
только регистрацию на сайте сделайте, если нет еще

Share this post


Link to post
Share on other sites

Добрый день!

В общем решение нашел - опишу коротенько, думаю кому-нибудь пригодится.

Написали программку под QNX 6.x аналогичную Win7. Эффект был такой же, но было одно но - если после внутр. сброса на плате из платы в "root" ничего не записывать, а программу под QNX перезапустить, то дальше всё работает не повисая...

Из этого был сделан вывод что "виноват" root на PCIe - он не знал что плата перезапустилась и транзакций от платы вида Link down/link up ему было не достаточно для понимания состояния платы.

Возможно в этом поведении "виноват" используемый в тестовой машине старый чипсет (max - PCIe Gen1) - может все "root"'ы не реагируют на транзакции link up/down - не знаю.

Попробовал под Win7 переинициализировать root - удалить/обновить устройство в диспетчере задач не помогло.

Помогла кнопка включить/выключить устройство - анализатор показал, что при выключении от "root" уходит транзакция на перевод устройства в спящий режим (L1 или L2 - не помню). Кнопка "включить устройство" - от "root" уходит транзакция

"link up" и всё - плата работает. В настройках Serdes'а в Libero поддержка режима L1/L2 была включена (что было бы, если была бы выключена - не знаю - экспериментов не ставил).

В дальнейшем планирую сделать генерацию платой прерывания при любом запуске/перезапуске программы встроенного процессора, а драйвер в "root"е включает/выключает эту плату в обработчике этого прерывания.... 

Спасибо всем за помощь.

Share this post


Link to post
Share on other sites

10 hours ago, Andrey_L said:

В общем решение нашел - опишу коротенько, думаю кому-нибудь пригодится.

Написали программку под QNX 6.x аналогичную Win7. Эффект был такой же, но было одно но -

Спасибо, интересно! Использование QNX вызывает уважение

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...