1. 程式人生 > >Xilinx FGPA的多重配置功能(1)

Xilinx FGPA的多重配置功能(1)

如今,隨著FPGA工藝的進步,效能提升和成本縮減均得到極大的改善,這使得FPGA晶片的使用越來越廣泛。因此為了達到降低系統維護和升級的成本,通常我們都會通過網路傳送最新的下載檔案,讓使用者在現場直接將檔案下載到FPGA中進行遠端的升級處理。然而,一旦下載檔案是錯的,那麼系統輕則功能出錯,重則直接宕機不工作。為了防止這種情況發生給使用者帶來重大影響或者損失,Xilinx提供了FPGA的多重配置操作功能。

1.何為多重配置

FPGA多重配置允許動態進行多個下載檔案之間的切換,當引導配置過程中檢測到出錯時,FPGA會觸發一個回退標誌確保一個已知的好的檔案可以被載入進來。具體如下圖所示:

簡而言之,就是你的.mcs檔案裡包含有兩個或更多的下載檔案,然後地址0的位置開始存放一個可用的下載檔案(多數是升級前那個舊的檔案),後面的地址(ADDR_1)存放你將要更新的檔案。當下載時,FPGA會先從ADDR_1讀取更新的檔案,若這個過程發生錯誤的話就會回到地址0,讀取之前的檔案,確保裝置仍能正常工作。

2.多重配置的使用

Xilinx的多重配置功能除了更新檔案外,也可以進行多工的切換排程處理。基於這個功能,只要Flash夠大,是可以存放好多個下載檔案的。當遇到FPGA資源較小,且多個功能之間是獨立不干擾的話,有時候可以通過外部控制,在需要不同功能時,進行檔案切換下載。

比如一個裝置需要做到ABCD四個功能,且ABCD各自應用於不同場合,之間沒有資料往來,互不干擾。如果這時FPGA的資源只能夠實現ABCD中的一種功能或者兩種,那麼我們就可以做出四個不同的bit檔案分別實現ABCD四種功能併合併成一個.mcs檔案下載到Flash中。當在需要A功能的場合,我們可以使用按鍵或者上位機進行配置,讓FPGA載入A功能的下載檔案,實現A功能。同理,在只需要BCD的場合也是這樣,如此可以大大節省FPGA的資源。

3.多重配置的流程

FPGA內部有一個ICAP核,可對程式載入進行預配置,預配置處理可在.v程式碼中處理並隨之生成.bit檔案。如果不在程式碼處理,則為預設配置。Xilinx FPGA的多重配置流程如下圖所示,具體可參考官方文件 " xapp1247 " 。

其中可用檔案存放在起始地址為0處;更新檔案存放在起始地址為A1處。

  • 上電後,FPGA會進入Flash的0地址,檢測配置暫存器中的WBSTAR和IPROG指令(.v裡進行配置)。

  • 如果WBSTAR地址指向A1,且IPROG的指令正確,FPGA會跳到A1處讀取並載入檔案。

  • 如果A1處的WBSTAR地址為0,且沒有IPROG指令,則載入此處的檔案。

  • 如果在載入更新檔案過程中發生錯誤,FPGA便會跳到地址0處,重新載入確保可用的那個檔案。

    IPROG的指令表如下所示:

對於IPROG的指令配置,必須按照這個順序進行,一旦資料不對或者順序不對,FPGA便不會對更新檔案進行載入。

3.結語

在實際使用中FPGA的多重載入是非常有幫助的,靈活的使用能夠避免很多現場的尷尬,也節省了很多後期技術支援的成本。下一節將介紹如何進行程式碼的多重配置處理與使用。