把相對成熟的技術應用到某些特定領域如通訊,視頻,信息處理等等開發(fā)出滿足行業(yè)需要并能被行業(yè)客戶接受的產(chǎn)品這方面主要是FPGA技術和專業(yè)技術的結合問題,另外還有就是與專業(yè)客戶的界面問題產(chǎn)品設計還包括專業(yè)工具類產(chǎn)品及民用產(chǎn)品。FPGA因為具備接口,控制,功能IP,內(nèi)嵌CPU等特點有條件實現(xiàn)一個構造簡單,固化程度高,功能全面的系統(tǒng)產(chǎn)品設計將是FPGA技術應用最廣大的市場,具有極大的爆發(fā)性的需求空間產(chǎn)品設計對技術人員的要求比較高。為解決相關FPGA工程師及愛好者提供相關實際案例和電路參考,電子發(fā)燒友網(wǎng)隆重整合推出《FPGA設計實例全攻略》系列,后期會陸續(xù)推出相關章節(jié),以饗讀者,敬請關注。
參閱相關系列文章
FPGA設計實例全攻略(一)
一、遠程在線更新FPGA程序的方法
1 概述
現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)器件具有高密度、低功耗、高速、高可靠性等優(yōu)點,在航空航天、通信、工業(yè)控制等方面得到了大量應用。FPGA的處理器分為軟核和硬核,并且軟核處理器具有高度的靈活性和可配置性。
由于FPGA器件采用的是SRAM工藝,在斷電的情況下FPGA內(nèi)的配置數(shù)據(jù)將丟失,所以需要非易失的存儲器來結合FPGA完成嵌入式系統(tǒng)的設計。EPCS(Erasable Programmable Configurable Serial)Flash屬于串行接口Flash,具有接口簡單、體積小、配置方便的特點,通常用來存儲FPGA的配置文件和NiosII的軟件可執(zhí)行代碼。在經(jīng)過合理的配置后,系統(tǒng)在上電后就可以從EPCSFlash中讀取這些文件來啟動整個系統(tǒng)。
為了能使系統(tǒng)得到更靈活的應用,充分發(fā)揮FPGA的靈活性、高效性,F(xiàn)PGA的軟硬件程序都需要方便的更新和升級功能;而當形成產(chǎn)品后,通過JTAG和NiosII IDE工具來聯(lián)合完成對EPCS Flash的更新燒寫很不方便。為此,本文結合Altera公司提供的工具,提出了一種遠程在線更新FPGA配置文件和NiosII程序文件的方法。
2 系統(tǒng)硬件結構
系統(tǒng)硬件結構如圖1所示。系統(tǒng)主要有上位機系統(tǒng)、FPGA系統(tǒng)、EPCS Flash三個主體部分。上位機系統(tǒng)提供人機交互的部分,F(xiàn)PGA系統(tǒng)包括NiosII處理器、EPCS控制器、網(wǎng)絡及串行接口和其他外部接口,EPCSFlash主要用于存儲FPGA的配置文件和Nios程序映像文件。上位機系統(tǒng)通過FPGA集成的網(wǎng)絡及串行接口來完成通信工作。
FPGA采用Altera公司的CycloneIII系統(tǒng)的EP3C40F48417N芯片。它具有低功耗、高集成度、易于使用的特性。EPCS Flash采用Altera公司的EPCS16SI16N芯片,它支持多種可配置的時鐘源,最高支持100 MHz的外部時鐘源,具有16 Mb的存儲空間,足夠滿足一般的FPGA配置文件和Nios程序文件的存儲需要。
3 更新程序處理流程
更新FPGA的配置文件和NiosII的應用程序的流程如圖2所示。
本方法把由NiosII IDE生成的FPGA配置文件和NiosII程序文件合并,并編程為一個可以直接執(zhí)行的、包含F(xiàn)PGA配置文件和NiosII程序文件的二進制BIN文件。然后把該文件通過X-modem協(xié)議由上位機系統(tǒng)傳輸給NiosII的應用程序。NiosII的應用程序接收到完整的BIN文件后,把該BIN文件寫入到EPCS Flash中。最后,Nios II的應用程序停止看門狗,程序重新啟動,即完成了FPGA的遠程在線更新程序的過程。
4 合并程序文件
Nios II的啟動要經(jīng)歷兩個過程:
?、貴PGA器件本身的配置過程。如果內(nèi)部邏輯中使用了NiosII,則配置完成的FPGA中包含有NiosII軟核CPU。
?、贜iosII本身的應用過程。一旦FPGA配置成功后,NiosII就被邏輯中的復位電路復位,從reset地址開始執(zhí)行代碼。
Nios II IDE將FPGA的配置文件(.sof文件)和應用程序(.elf文件)轉成flash格式文件,轉換后的flash格式文件是一種S-Record格式數(shù)據(jù),包含如下區(qū)域:《type》《length》《address》《data》《checksum》。各字段的意思分別如下:《type》表示記錄的類型;《length》表示數(shù)據(jù)的長度;《address》表示數(shù)據(jù)寫入的起始地址,該字段的長度取決于《type》的取值;《data》表示存儲的數(shù)據(jù);《checknum》表示校驗位。
配置文件和應用程序可能有多個段,每個段前面都插有一個“程序記錄”。一個“程序記錄”由2個32位的數(shù)據(jù)構成,一個是32位的整數(shù),另一個是32位的地址,分別表示程序段本身的長度和程序段的運行時地址。其存儲布局如圖3所示。
為了在更新程序時把FPGA配置文件和Nios II應用程序一起更新,把FPGA配置文件和Nios II應用程序合并成一個文件,并且把合并后的Flash格式的文件轉換成不需要地址解碼就能直接執(zhí)行的二進制BIN文件。具體處理流程如圖4所示。
在合并程序的過程中,去掉了flash文件中的長度、目的地址等用于解析程序的信息,并且把程序映像由字符格式轉換為二進制格式。合并后的BIN文件包含F(xiàn)PGA配置文件和Nios II應用程序,并且Nios II應用程序緊挨在FPGA配置文件的后面,其存儲布局如圖5所示。
5 Nios II更新程序模塊處理
Nios II程序中的更新程序模塊主要負責從上位機接收合并后的可執(zhí)行BIN文件,并把該BIN文件寫入EPCSFlash,處理流程如圖6所示。
5.1 程序文件的傳輸
Nios II應用程序中的更新程序模塊和上位機系統(tǒng)采用X-modem協(xié)議傳輸程序文件,X-modem協(xié)議是一種網(wǎng)口和串口通信中廣泛用到的異步傳輸協(xié)議。
如果在程序傳輸過程中出現(xiàn)錯誤,更新程序模塊能夠通過設置超時來退出更新程序的狀態(tài)。
5.2 對EPCS Flash的讀寫
由于EPCS Flash的串行配置器件定義了特殊的讀寫協(xié)議,所以Nios II程序只能通過Altera提供的HAL API(Application Program Inter face,應用程序接口)來完成讀寫Flash。打開、關閉Flash設備的API為:alt flash open_dev()和alt_flash_close_dev()。操作Flash讀寫
的API為:alt_read_flash()和alt_write_flash_block()。清除Flash的API為alt_erase_falsh_block()。
結語
本文以提高FPGA遠程更新程序的方便性為目標,提出了一種基于EPCS Flash的遠程在線更新FPGA程序的方法,從而在應用中能夠使基于FPGA的產(chǎn)品更加方便地維護升級。
評論
查看更多