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