該問(wèn)題的定位開始是沒有頭緒的,因?yàn)閱?wèn)題出現(xiàn)后,PCIe的通訊已經(jīng)中斷,此時(shí)想通過(guò)工控機(jī)去讀FPGA的調(diào)試相關(guān)的寄存器已經(jīng)沒有用,即此時(shí)讀上來(lái)的值都是無(wú)效的。但是還是得先逐步的排除問(wèn)題。
第一步:是否是軟件的問(wèn)題
通過(guò)閱讀問(wèn)題發(fā)生時(shí)的軟件日志,發(fā)現(xiàn)在問(wèn)題發(fā)生時(shí),軟件沒有收到中斷請(qǐng)求,這說(shuō)明在插拔模塊的過(guò)程中,PCIe通訊已經(jīng)失效,模塊插入/拔出的中斷已經(jīng)無(wú)法發(fā)出(在模塊插入或者拔出的過(guò)程FPGA會(huì)檢測(cè),如果發(fā)生該事件FPGA會(huì)通過(guò)PCIe發(fā)出中斷給工控機(jī))。且在問(wèn)題發(fā)生時(shí)軟件日志的記錄上軟件沒有異常之處,因此排除是軟件的問(wèn)題。
第二步:是否是FPGA邏輯的問(wèn)題
通過(guò)在FPGA插入在線邏輯分析儀,把PCIe的運(yùn)轉(zhuǎn)狀態(tài)機(jī)LTSSM加入到在線邏輯分析儀,在發(fā)生此問(wèn)題時(shí)觸發(fā)觀測(cè)LTSSM狀態(tài)機(jī)。在測(cè)試時(shí),復(fù)現(xiàn)該問(wèn)題后發(fā)現(xiàn)LTSSM有重新回到復(fù)位狀態(tài)的動(dòng)作,因此懷疑此時(shí)可能是電源或者是PCIe接口復(fù)位信號(hào)的問(wèn)題,因?yàn)樵谡G闆r下,如果系統(tǒng)復(fù)位信號(hào)沒有動(dòng)作,且上位機(jī)沒有重新發(fā)送PCIe鏈路訓(xùn)練命令的話,LTSSM狀態(tài)機(jī)是不會(huì)被復(fù)位的。因此該線索把該問(wèn)題的原因?qū)虻綇?fù)位信號(hào)或電源上。
第三步:監(jiān)測(cè)PCIe接口的復(fù)位信號(hào)
PCIe接口的電路如下圖所示: