正文
1) 因為FPGA具有開發(fā)周期短,可更新等優(yōu)點,現(xiàn)在有越來越多的通訊系統(tǒng)采用FPGA作為實際產(chǎn)品方案。已經(jīng)有大量的FPGA應用到通訊系統(tǒng)中,為了降低系統(tǒng)維護的人力成本,需要能夠實現(xiàn)FPGA遠程版本更新。本文將以Xilinx Virtex6 為例描述如何實現(xiàn)遠程FPGA版本更新/重啟。
2) FPGA加載主要分為2大類,一類是主動模式(master)另一類是從模式(slave).在主動模式時FPGA會外掛存儲器存儲FPGA bit映像,FPGA會主動提供時鐘訪問外部存儲器。在從模式時,F(xiàn)PGA作為從設備被掛在控制器CPU上由處理器控制對FPGA編程。上述兩種模式中,因為從模式FPGA由外部CPU控制編程,可以通過遠程更新CPU文件就可以實現(xiàn)對FPGA的版本更新,非常方便。但是當CPU外掛的FPGA較多時會使系統(tǒng)加載時間過長,降低系統(tǒng)啟動速度。這里將利用FPGA 多重啟(multi-boot)功能實現(xiàn)在主動模式下版本更新。
3) 遠程更新流程
當系統(tǒng)需要升級時,中心控制系統(tǒng)需要將新的FPGA比特映像文件直接發(fā)布到遠程子系統(tǒng),由遠程 子系統(tǒng)將比特文件更新到非易失存儲器。然后由FPGA內(nèi)部控制邏輯重新啟動。比特映像文件更新后,下次上電啟動將從新的比特映像文件。
如圖 1. FPGA遠程更新系統(tǒng)
多重啟動 FPGA 介紹
a)多重啟動介紹
VIRTEX6可以支持2套配置文件,第一個版本為安全版本存放在起始位置(spi起始地址為0),第二個版本為最終啟動版本。當FPGA啟動時,加載控制器會從地址0開始讀取加載指令。當讀到WBSTAR和IPROG指令時,控制器就跳轉到WBSTAR指定的地址讀取新的加載指令。在第二個配置文件中不再發(fā)IPROG指令,控制其將順序執(zhí)行以直到配置文件結束。配置順序如圖 2。
b)多重啟動模塊
i) 配置存儲器訪問接口
在FPGA配置過程中,F(xiàn)PGA通過指定的配置管腳訪問外部非易失存儲器,當配置結束后,部分管腳被釋放可以用作普通邏輯管腳,但部分FPGA配置管腳是配置專用,在用戶應用中是不可見的,需要例化專用模塊STARTUP_VIRTEX6才能允許用戶邏輯訪問這些專用管腳。
ii) FPGA重啟模塊 ICAP
ICAP_VIRTEX6為用戶邏輯提供FPGA加載功能,它的功能與普通上點加載用的SELECTMAP 加載功能相同。接口信號見表 表 2:ICAP_VIRTEX6接口信號
通過ICAP_VIRTEX6,用戶邏輯可以發(fā)指令讓FPGA從指定的位置重新加載配置文件。加載指令的發(fā)送順序為,
1. 發(fā)同步字
2. 將要加載文件的起始地址寫道WBSTAR寄存器(Warm Boot Start Address Register)
3. 發(fā)送 IPROG指令
4. FPGA從WBSTAR寄存器指定地址開始讀取配置數(shù)據(jù)。
下面是一個控制ICAP從地址80000重加載例子
4) 遠程更新的可靠性
在遠程更新過程中有多種原因可以造成遠端的配置文件出錯。比如數(shù)據(jù)傳輸錯誤,所以在跟新完成之后需要回讀校驗。為了減少傳輸負載可以采用CRC校驗。但是如果在版本更新過程中出現(xiàn)掉電或系統(tǒng)重啟,由于非易失存儲器中的配置影像文件已經(jīng)被破壞,遠程終端將無法啟動。為了避免這種情況的發(fā)生,遠程終端需要有2套配置文件,當一套配置文件出錯時,系統(tǒng)可以回退到備份配置文件啟動。這樣就可以保證當系統(tǒng)出錯時,遠程終端仍可以啟動,接受控制中心發(fā)出的版本更新指令重新進行更新。
內(nèi)部發(fā)重啟過程和狀態(tài)
第1步:第一次FPGA被正確配置,狀態(tài)如下
在FALLBACK時,配置文件中的IPROG命令不再起作用。