哈哈,前一個項目終于完成了,費了那么多天的勁,確實也找到了一些設計上的缺陷和不合理的地方,在代碼中也找到了幾個BUG.呵呵. 現(xiàn)在將我在FPGA部分設計的一點心得記錄下來.
故障情況:
外部EEPROM存儲器在設備上電過程中,出現(xiàn)數(shù)據(jù)被改寫情況.導致數(shù)據(jù)丟失.
故障定位:
對設備進行反復的加斷電實驗,發(fā)現(xiàn)故障出現(xiàn),用獨立的讀存儲器代碼將存儲器中相關字節(jié)讀出通過串口發(fā)送回計算機,可看到相關字節(jié)無規(guī)律的被改寫為FF,但無規(guī)律可尋.更換存儲器,故障依舊,排除存儲器損壞可能.
使用邏輯分析儀,觀察上電時存儲器CE,WE,OE三個管腳時序, 用CE信號做觸發(fā)信號,發(fā)現(xiàn)在正常讀時序前有時間長度為60uS的不規(guī)律脈沖出現(xiàn)在三個管腳上.
故可懷疑為代碼問題或者FPGA問題.
檢查讀EEPROM字節(jié)代碼,未發(fā)現(xiàn)問題,使用MODELSIM做前仿和后仿,時序正確.故排除代碼問題.
設置一測試信號,FPGA在上電完成配置后,即刻將該測試信號拉高.
使用示波器觀察FPGA核電壓建立到該測試信號變高間時間約為720mS,CE第一次動作到該測試信號變高見時間為12mS,故可確定與代碼無關.
最后將故障定位為FPGA上電配置時管腳電平狀態(tài)翻轉造成EEPROM誤動作問題.
解決方法:
在FPGA管腳約束時將EEPROM的CE,WE,OE全部PULL UP .
利用RC電路做一延時電路,延時電路加電時保持2s高電平后變低,利用這一電路來關閉EEPROM在上電2S中的寫操作.
舉一反三:
利用FPGA,CPLD,ARM,單片機設計的系統(tǒng),設備上電時候應該對敏感信號管腳加以控制,以得到更高的可靠性.
我的解決辦法可能不是最好的,如果大家有更好的解決辦法,留言告訴我,大家共同學習,共同進步.活活 ,睡了.