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

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 должен нормально переинициализироваться и без блокировок.....

 

 

 

 

 

 

 

 

 

 

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


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

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

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


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

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...
только регистрацию на сайте сделайте, если нет еще

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


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

Добрый день!

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

Написали программку под 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"е включает/выключает эту плату в обработчике этого прерывания.... 

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

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


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

10 hours ago, Andrey_L said:

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

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

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

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


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

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

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

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

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

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

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

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

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

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