http://bbs.ednchina.com/BLOG_ARTICLE_3029418.HTM?source=sina
近期在用nios ii做項目時,發現一個奇怪的現象,在NIOS II EDS軟體中編寫好的代碼,燒寫到晶片中,第一次能夠正常運行,但是當我按下板卡上的複位鍵之後,系統卻卡死了,再也運行不起來,除非重新下載程式。經過分析系統可知,系統的硬體設計和Qsys系統中NIOS II CPU系統的搭建都是沒有任何問題的。那麼為什麼會存在這樣的問題呢,這裡我先簡單介紹下我的系統:
我的系統主要由NIOS II最強板CPU,SDRAM、預留系統定時器、預留時間戳記定時器、system ID、EPCS控制器以及JTAG_UART組成。具體如下圖所示(點擊圖片可查看高清大圖):
在Qsys環境中,我一開始將CPU的複位向量(Reset Vector)設定在了EPCS上,然後在NIOS II EDS中建立了軟體工程,編譯,下載運行都沒有問題,但是並沒有將fpga設定檔和代碼固化到EPCS中去,因此複位時存在問題是肯定的。後來為了調試方便,在Qsys系統中將CPU的複位向量也修改指向了SDRAM,然後在NIOS II EDS軟體中,重建了BSP之後,軟體的編譯,下載運行都沒有問題,只是每當我按下板卡上的複位鍵之後,系統卻卡死了,再也運行不起來。
記起去年做畢業設計時,曾經為在含有EPCS的系統中無法下載程式的問題苦惱過,當時下載程式時,每次都在進度為64%時報如下的錯誤,“Nios II ‘Launching New_configuration’ has ecountered a problem.Dowenloading Elf Process failed.”相信這個報錯也是大家最深惡痛絕的(注,此圖是我從網上下載的,自己做系統已經很久不出這個問題了,想弄張這樣的圖片只能百度了):
在網上找了一大堆問題,有說是SDRAM相位不對的,這個我以前也確實遇見過不過自從我將SDRAM的時鐘相移設定為-90度後,就基本沒遇到過這個問題了。還有說是硬體本身有問題的,這裡不排除此種情況,但是我的系統中卻並非如此。最終是在新浪部落格還是百度空間中的某位前輩的文章中找到的答案我忘記了。當時忘了記下部落格地址了,只是將內容複寫出來,存了一個word文檔。現在這篇文檔已經能夠在百度文庫中直接檢索到了,尊重他人著作權,我這裡就只發文章在文庫中的地址了:
http://wenku.baidu.com/link?url=YOyixrJXWj0ZunlJGqdUFdLv8wkF1KCXxXcEkHGpaulHwlsXPwjR29GxGBxQ-AhMrwot6oKnSziAdDYZrGayB6ZrLu8XaAHmhIikud3wPNC
他的解決方案就是在BSP editor中修改了兩個與bootloader位置相關的選項,將allow_code_at_reset和enable_alt_load兩個選項的勾選取消了,如下圖(點擊圖片可查看高清大圖):
該文章中介紹,當建立不帶EPCS控制器的NIOS II系統時,在NIOS II EDS中建立工程時,bsp editor中這兩項是勾選上的。當建立了帶EPCS控制器的NIOS II系統時,在NIOS II EDS中建立工程時,bsp editor中這兩項是沒有勾選上的。由此可知,當複位向量為SDRAM時,這兩個選項應該勾選上。具體的原因見該文中作者在Altera提供的相關手冊中找到原始解釋。
當我在系統中將此兩項勾選上後,再次產生bsp,然後編譯、下載,處理器就能夠正常執行複位了。
小梅哥
2015年5月26日於北京至芯科技