一種fpga重構裝置、系統及方法
【技術領域】
[0001]本發明涉及電子電路技術領域,尤其是涉及一種應用于可編程邏輯器件的FPGA重構裝置、系統及方法。
【背景技術】
[0002]隨著可編程邏輯技術,尤其是FPGA技術的發展與壯大,幾乎所有的產品都會用到FPGA芯片,因此難以避免FPGA程序由于設計缺陷而需要通過電路重構實現應用程序的更新。電路重構的本質是利用可編程FPGA具有可多次配置的特性,根據需要調用不同的配置文件來改變電路的邏輯結構,從而使系統具有靈活、簡捷、硬件資源可重用、易于升級等多種優良性能。可重構系統通常在兩種情況下對FPGA進行重新配置:一是FPGA邏輯功能需要轉換,如算法改進或是發現設計上的錯誤;二是FPGA配置數據發生錯誤而導致的功能失效。
[0003]XILINX公司的SPARTAN3AN系列FPGA芯片自帶內部SPI FLASH作為FPGA程序存儲器,在使用到該款芯片開發的產品需要通過處理器更新FPGA程序時,如果在更新過程中,出現諸如忽然斷電、程序誤碼等等不可預知的原因造成更新不成功時,則不但更新不成功,還會損壞原來SPI FLASH里面所存儲的程序,使得FPGA芯片不能正常運行。同時,進一步導致FPGA內部通過邏輯語言實現的SPI控制器不復存在,處理器也就無法和FPGA芯片內部的SPI FLASH建立連接,從而不能重新通過處理器更新FPGA的應用程序,而只能通過FPGA芯片的JTAG 口下載應用程序到SPI FLASH中。
[0004]現有技術通常是在產品應用現場進行FPGA應用程序的更新,而現場程序更新的過程是一個龐大而艱巨的工程。傳統的方法都是通過JTAG接口更新FPGA程序,這首先需要拆開產品的外殼,然后利用專用的FPGA程序下載器通過FPGA芯片的JTAG接口下載程序到FPGA芯片的程序存儲器中。這種方法非常低效,大部分工作時間都浪費在拆卸、組裝產品上,為了解決這種傳統的FPGA程序更新方法的低效問題,新的通過處理器更新FPGA程序的方法不斷出現,然而在實際實施過程中,一旦更新程序進行到一半而出錯時,則無法再次通過處理器更新FPGA程序,依然需要拆卸產品,仍舊通過JTAG接口來更新FPGA程序,無法徹底解決傳統FPGA程序更新方法存在的技術問題。
【發明內容】
[0005]有鑒于此,本發明的目的在于提供一種FPGA重構裝置、系統及方法,能夠有效地解決通過處理器更新FPGA程序過程中存在的風險,確保即使在更新過程中由于錯誤的操作、突然斷電等等一些不可預知的異常情況下,依然能夠完成通過處理器更新FPGA程序的過程。
[0006]為了實現上述發明目的,本發明具體提供了一種FPGA重構系統的技術實現方案,一種FPGA重構裝置,包括:FPGA芯片,所述FPGA芯片包括FPGA程序單元和存儲器。所述存儲器包括作為引導區的程序存儲A區,以及存儲有應用程序的程序存儲B區。當所述FPGA芯片上電時,先從所述程序存儲A區下載文件運行,并生成FPGA程序單元,當所述FPGA芯片運行完成后,向外部的處理器發出指示信號,由所述處理器控制所述FPGA芯片重新啟動,所述FPGA芯片從程序存儲B區中下載應用程序運行。
[0007]優選的,所述FPGA程序單元包括應用程序單元和重構觸發單元,所述應用程序單元包括端口控制器。所述程序存儲A區中存儲有生成所述重構觸發單元和端口控制器的程序,當所述FPGA芯片運行完成后,生成所述重構觸發單元和端口控制器,所述處理器能通過所述端口控制器訪問所述存儲器。在正常運行工況下,當所述FPGA芯片運行完成后,向外部的處理器發出指示信號,在所述指示信號到來后由所述處理器向所述FPGA程序單元的重構觸發單元發出觸發信號,控制所述FPGA芯片重新啟動。
[0008]優選的,在FPGA程序更新工況下,當所述FPGA芯片運行完成后,向外部的處理器發出指示信號,所述處理器在所述指示信號到來后更新所述程序存儲B區中的所述FPGA芯片的應用程序,更新完成后由所述處理器向所述FPGA程序單元的重構觸發單元發出觸發信號,控制所述FPGA芯片重新啟動。
[0009]優選的,所述重構觸發單元包括命令字寫單元和內部配置訪問單元,所述命令字寫單元向所述內部配置訪問單元寫入命令字,控制所述內部配置訪問單元的工作狀態,所述內部配置訪問單元用于控制所述存儲器向所述FPGA程序單元加載配置文件。
[0010]優選的,所述FPGA芯片通過SPI總線與所述外部的處理器相連。
[0011]優選的,所述存儲器為所述FPGA芯片內部的SPI FLASH,所述端口控制器為SPI控制器。
[0012]本發明還另外具體提供了一種FPGA重構系統的技術實現方案,一種FPGA重構系統,包括:如上所述的FPGA重構裝置,以及與所述FPGA重構裝置相連的處理器。
[0013]優選的,在正常運行工況下,所述處理器等待所述FPGA芯片運行完成后的指示信號,并在所述指示信號到來后,向所述FPGA程序單元的重構觸發單元發出觸發信號。
[0014]優選的,在FPGA程序更新工況下,所述處理器等待所述FPGA芯片運行完成后的指示信號,所述處理器在所述指示信號到來后更新所述程序存儲B區中的所述FPGA芯片的應用程序,更新完成后由所述處理器向所述FPGA程序單元的重構觸發單元發出觸發信號。
[0015]本發明還另外具體提供了一種FPGA重構方法的技術實現方案,FPGA重構裝置包括FPGA芯片,所述FPGA芯片包括FPGA程序單元和存儲器;所述存儲器包括作為引導區的程序存儲A區,以及存儲有應用程序的程序存儲B區;所述方法包括以下步驟:
S10:當FPGA芯片上電時,先從存儲器的程序存儲A區下載文件運行,并生成FPGA程序單元;
S20:當所述FPGA芯片運行完成后,向外部的處理器發出指示信號,由所述處理器控制所述FPGA芯片重新啟動,所述FPGA芯片從所述存儲器的程序存儲B區中下載應用程序運行。
[0016]優選的,所述FPGA程序單元包括應用程序單元和重構觸發單元,所述應用程序單元包括端口控制器;所述程序存儲A區中存儲有生成所述重構觸發單元和端口控制器的程序,當所述FPGA芯片運行完成后,生成所述重構觸發單元和端口控制器,所述處理器能通過所述端口控制器訪問所述存儲器。
[0017]優選的,在正常運行工況下,所述步驟S20進一步包括: 所述處理器等待所述FPGA芯片完成運行后的指示信號,并在所述指示信號到來后,向所述FPGA芯片的重構觸發單元發出觸發信號,控制所述FPGA芯片重新啟動。
[0018]優選的,在FPGA程序更新工況下,所述步驟S20進一步包括:
所述處理器等待所述FPGA芯片完成運行后的指示信號,所述處理器在所述指示信號到來后更新所述程序存儲B區中的所述FPGA芯片的應用程序,更新完成后由所述處理器向所述FPGA程序單元的重構觸發單元發出觸發信號,控制所述FPGA芯片重新啟動。
[0019]通過實施上述本發明提供的FPGA重構裝置、系統及方法,具有如下技術效果:
(1)本發明使用FPGA芯片內部的存儲器作為FPGA程序存儲區時,可以高可靠地采取外部的處理器更新存儲器中的FPGA程序,即使在更新過程中出錯,損壞的也只是程序存儲B區的程序,而程序存儲A區的引導程序一直不會損壞,程序存儲A區的FPGA程序依然可用;FPGA芯片重新上電后依然可以運行程序存儲A區的FPGA程序,處理器依然可以通過程序存儲A區程序里面的接口控制器訪問存儲器;
(2)本發明能夠有效地解決通過處理器更新FPGA程序過程中存在的風險,確保即使在更新過程中由于錯誤的操作、突然斷電等等一些不可預知的異常情況下,依然能夠完成通過處理器更新FPGA程序的過程。
【附圖說明】
[0020]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0021]圖1是本發明FPGA重構系統一種【具體實施方式】的系統結構框圖;
圖2是本發明FPGA重構方法一種【具體實施方式】的FPGA芯片在正常運行工況下的程序流程圖;
圖3是本發明FPGA重構方法一種【具體實施方式】的處理器在正常運行工況下的程序流程圖;
圖4是本發明FPGA重構方法一種【具體實施方式】的FPGA芯片在FPGA程序更新工況下的程序流程圖;
圖5是本發明FPGA重構方法一種【具體實施方式】的處理器在FPGA程序更新工況下的程序流程圖;
圖中:1-處理器,2-FPGA芯片,3-FPGA程序單元,4-存儲器,31-應用程序單元,32-重構觸發單元,311-端口控制器,321-命令字寫單元,322-內部配置訪問單元,41-程序存儲A區,42 -程序存儲B區。
【具體實施方式】
[0022]為了引用和清楚起見,將下文中使用的技術名詞、簡寫或縮寫記載如下:
XILINX:是一家設計、制造、銷售FPGA芯片的公司;
SPARTAN3AN:是XILINX公司FPGA芯片的一個型號;
CPU:Central Processing Unit,中央處理單