sof文件和NIOS II的軟件(elf)合並為jic文件以使用Quartus Programmer燒寫


將Altera FPGA的sof文件和NIOS II的elf固件合並為一個jic文件以使用Quartus Programmer燒寫

 

我們在學習和調試NIOS II工程的時候,一般都是先使用Quartus II軟件中提供的Quartus Programmer來燒寫FPGA配置文件(SOF),然后NIOS II EDS中提供的Flash Programmer工具來進行燒寫NIOS II的。這對於開發者來說,並沒有什么不便,反而因為這種方式的靈活,為開發帶了了很大的便利。然而,當我們的產品已經設計完成並量產的時候,就需要將固件燒寫到產品中。生產線上進行燒錄時,總希望能夠用最簡單的方式實現。試想,如果生產線上在進行燒寫時,還需要幾個工具換來換去,等待很久,效率自然就下去了。因此這種Quartus Programmer+Flash Programmer的方式並不適合生產。

 

小梅哥在最近的工作中也遇到了這樣的問題。我們新設計的一批開發板,在工廠生產完畢后,都要進行出廠測試。然而SMT廠家卻並不熟悉我們的這種Quartus Programmer+Flash Programmer燒寫方式。再說了,要使用這種方式還得安裝Quartus Programmer和NIOS II EDS軟件。廠家表示使用這種方式對他們來說有一定難度,而且效率也不高。所以我就根據Altera 官方網站上的一個帖子,進行了轉換,將SOF文件和NIOS II的elf固件合並並生成了一個jic文件,這樣,廠家就只需要使用Quartus Programmer來燒寫這個jic文件就能實現同時燒寫FPGA配置文件和NIOS II固件的功能了,簡化步驟,節省時間。

 

從SOF文件和ELF文件得到JIC文件的原帖地址如下:

https://www.altera.com.cn/support/support-resources/knowledge-base/solutions/rd10132010_126.html

 

因為有經驗不足的朋友反映在看了這個教程后還是不知道怎么操作,總是不成功,因此這里小梅哥使用我們芯航線FPGA的開發板,一步一步演示這個實現過程,將整個過程具體化。

 

先說明下我這個設計工程的結構:

  • EPCS16: 用來存儲FPGA配置文件和NIOS的固件,本例中最終轉換得到的JIC文件也是燒寫到該器件中。
  • 512K字節SRAM: 作為NIOS II運存或者4.3寸TFT顯存,這里作為TFT顯存。(PS:使用SRAM作為運存,相較於使用SDRAM作為運存,NIOS II的性能會有較大的提升。)
  • 128Mbit SDRAM: 作為NIOS II運存或者4.3寸TFT顯存,這里作為NIOS II運存。以運行較為復雜的程序或者GUI。
  • 4.3寸TFT: 用來顯示文字/圖片等內容。
  • XPT2046觸摸控制器: 使用SPI接口,用來得到觸摸屏信息,實現人機交互
  • CH340 USB2TTL: 將UART協議與USB協議進行互相轉換。以實現調試的功能。
  • 4bit LED: 指示程序運行狀態。
  • 2X輕觸按鍵: 輸入控制信息

 

介紹完了這個系統,接下來就可以介紹整個轉換過程了:

1    sof2flash:

從一個.sof 文件生成一個flash文件:

sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs –verbose

首先我們打開我們的NIOS II軟件工程和對應板級支持包,這里名為tft_touchtft_touch_bsp

然后選中tft_touch,單擊右鍵選擇Nios II -> Nios II Command Shell

 

我們的Quartus II生產的sof文件名為" TFT_SRAM.sof",這個時候,如果我們直接輸入

sof2flash --input= TFT_SRAM.sof --output=hwimage.flash --epcs –verbose

會提示找不到input file也就是找不到TFT_SRAM.sof文件。

這是因為該命令是在當前目錄下尋找TFT_SRAM.sof文件,而我們的TFT_SRAM.sof文件在E:\easy_sopc\TFT_SRAM\prj\output_files目錄下,因此當然無法找到該文件了。解決這個問題的方法有兩種。

第一種,推薦方案。

因為很多不熟悉命令行的朋友在操作時速度慢而且容易出錯,因此這里提供一種比較熟悉的方式。首先在windows中,將TFT_SRAM.sof文件從output_files文件夾中拷貝到tft_touch文件夾中:

然后回到命令行窗口再次執行

sof2flash --input= TFT_SRAM.sof --output=hwimage.flash --epcs –verbose命令

(提示:使用鍵盤上的向上方向鍵,可以快速切換到之前使用過的命令,這里在切換目錄后,連按兩次方向上鍵就應該能找到之前輸入的sof2flash命令。)生成過程大約花費10秒鍾。生成完成后的截圖如下所示:

然后我們輸入ls命令就能看到,確實生成了這樣一個名為hwimage.flash的文件:

 

第二種方案:首先在shell中使用cd命令直接將目錄切換到sof文件所在目錄,也就是E:\easy_sopc\TFT_SRAM\prj\output_files。相應命令為(注意斜線方向):

cd e:/easy_sopc/TFT_SRAM/prj/output_files

 

然后再次執行sof2flash命令即可實現。生成完成后的截圖如下所示:

然后我們輸入ls命令就能看到,確實生成了這樣一個名為hwimage.flash的文件:

 

一般推薦大家使用第一種方式,當然命令行高手除外。

 

2    elf2flash:

從一個,elf 生成一個flash文件:

elf2flash --input=<elf file>.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose

因為推薦大家使用第一種方式操作,因此這里就按照第一種方式接着講,相信有能力用命令行方式切換目錄的朋友,也不會對其他操作存在問題。

這里我們就只需要直接輸入elf2flash命令即可了,命令詳細如下:

elf2flash --input=tft_touch.elf --output=swimage.flash --epcs --after=hwimage.flash –verbose

從命令中可以看到,第一步生成的hwimage.flash文件是作為了參數的一部分的,所以這里必須保證hwimage.flash在當前目錄下。(第一步中使用推薦的方式,則能夠自動保證這一點)。命令執行結果如下:

然后我們輸入ls命令,可以看到,在當前文件夾下確實生成了一個名為swimage.flash的文件:

3    flash2hex:

轉換.flash文件到.hex文件:直接輸入以下命令(注意:altera官網中原帖這個地方命令有誤,前后對應不上,原帖為nios2-e…… mysw.flash mysw.hex,應該講mysw改為swimage):

nios2-elf-objcopy --input-target srec --output-target ihex swimage.flash swimage.hex

這個命令瞬間執行完成,我們ls下,就能看到當前文件夾下已經生成了一個swimage.hex的文件:

4    Convert Programming Files

Quartus® II軟件中,open File > Convert Programming Files > Set the programming file as JTAG Indirect Configuration File (.jic).


5    選擇EPCS

在配置下拉菜單中選擇合適大小的EPCS器件(見10步圖)

6    命名jic

命名你的輸出.jic 文件(見10步圖)

7    Add Device

點擊Flash Loader的下面,在右邊選擇Add Device (見10步圖)

8    選擇FPGA器件

從列表中選擇你的FPGA器件(見10步圖)

9    Add SOF

點擊SOF Data,選擇Add File,選擇加.sof 文件(見10步圖)

10     Add Hex data

點擊Add Hex data,選擇Relative addressing,選擇上面生成的.hex 文件


 

11    Generate

然后點擊Generate生成。生成完成后檢查生成的 .map 文件(使用記事本打開)有Page_0在起始地址0x0,.hex文件在Page_0結束地址后的起始地址1

12 燒寫

現在在Quartus II Programmer中,選擇Add File,選擇加.jic 文件。檢查Program框,下一步.jic 文件,接着按Start即可。

 

13    女神鎮樓

最后上一張測試圖,女神鎮樓(話說放這樣一張圖給客戶,客戶是不是會覺得特別開心呢):

 

如有更多問題,歡迎加入芯航線FPGA技術支持群:472607506

 

小梅哥

芯航線電子工作室

2016年1月30日星期六

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM