該問題的定位開始是沒有頭緒的,因為問題出現后,PCIe的通訊已經中斷,此時想通過工控機去讀FPGA的調試相關的寄存器已經沒有用,即此時讀上來的值都是無效的。但是還是得先逐步的排除問題。
第一步:是否是軟件的問題
通過閱讀問題發(fā)生時的軟件日志,發(fā)現在問題發(fā)生時,軟件沒有收到中斷請求,這說明在插拔模塊的過程中,PCIe通訊已經失效,模塊插入/拔出的中斷已經無法發(fā)出(在模塊插入或者拔出的過程FPGA會檢測,如果發(fā)生該事件FPGA會通過PCIe發(fā)出中斷給工控機)。且在問題發(fā)生時軟件日志的記錄上軟件沒有異常之處,因此排除是軟件的問題。
第二步:是否是FPGA邏輯的問題
通過在FPGA插入在線邏輯分析儀,把PCIe的運轉狀態(tài)機LTSSM加入到在線邏輯分析儀,在發(fā)生此問題時觸發(fā)觀測LTSSM狀態(tài)機。在測試時,復現該問題后發(fā)現LTSSM有重新回到復位狀態(tài)的動作,因此懷疑此時可能是電源或者是PCIe接口復位信號的問題,因為在正常情況下,如果系統復位信號沒有動作,且上位機沒有重新發(fā)送PCIe鏈路訓練命令的話,LTSSM狀態(tài)機是不會被復位的。因此該線索把該問題的原因導向到復位信號或電源上。
第三步:監(jiān)測PCIe接口的復位信號
PCIe接口的電路如下圖所示: