本發(fā)明屬于數(shù)字信號處理領(lǐng)域,涉及一種FPGA動態(tài)配置方法,特別涉及一種基于文件壓縮及非接觸式的FPGA動態(tài)配置方法,可用于通信、圖像處理、能源交通等領(lǐng)域。
背景技術(shù):
FPGA(Field Programmable Gate Array)即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。
FPGA是一種可編程使用的信號處理器件,用戶可通過改變配置信息對其功能進行定義,以滿足設(shè)計需求。與傳統(tǒng)數(shù)字電路系統(tǒng)相比,F(xiàn)PGA具有可編程、高集成度、高速和高可靠性等優(yōu)點,通過配置器件內(nèi)部的邏輯功能和輸入、輸出端口,將原來電路板級的設(shè)計放在芯片中進行,提高了電路性能,降低了印刷電路板設(shè)計的工作量和難度,有效提高了設(shè)計的靈活性和效率。可編程技術(shù)是FPGA的核心,采用不同類型的存儲器實現(xiàn)可編程功能對FPGA器件的結(jié)構(gòu)和性能有著巨大的影響,可編程技術(shù)主要分為3種。第一種是基于SRAM的編程技術(shù),由于SRAM是易失性存儲器,掉電后內(nèi)部數(shù)據(jù)丟失,每次上電后必須重新配置,這樣在正式使用時特別不方便,所以一般只在調(diào)試時使用;第二種是反熔絲編程技術(shù),掉電后程序不會丟失,不過反熔絲技術(shù)只能一次性編程,無法重復(fù)編程,而且編程后器件良品率低,加上成本很高,所以一般只用于軍工航天領(lǐng)域;第三種是FLASH編程技術(shù),與以上兩種編程技術(shù)相比,F(xiàn)LASH編程結(jié)合了非易失性和可重復(fù)編程的特點,上電后可自動配置FPGA,由于其適用于大多數(shù)情況,所以成為當下的主流配置方式。靜態(tài)配置是指一次配置成功后,若想改變整個電路功能,必須斷電后重新上電,下載新的配置文件,功能才能改變。動態(tài)配置是指在不需要斷電的情況下,靈活改變FPGA的配置文件。隨著通信系統(tǒng)的復(fù)雜化和功能多樣化,很多系統(tǒng)需要在不同時刻實現(xiàn)不同的功能,靜態(tài)配置已經(jīng)不能滿足要求,多數(shù)場合需要FPGA能夠支持在線動態(tài)配置,從而動態(tài)的改變整個電路的功能。
目前對FPGA進行動態(tài)配置主要有以下幾種方法:
第一種,用DSP芯片模擬FPGA配置時序,對FPGA進行動態(tài)配置。例如中國專利申請,授權(quán)公告號為CN102521065B,公開了一種FPGA動態(tài)加載配置文件的方法,將FPGA的Hardwarerst端口與PROG_B端口等電壓連接,所述Hardwarerst端口為FPGA的一個閑置的I/O端口,所述PROG_B端口的電平狀態(tài)決定FPGA是否重新加載配置文件;DSP通過控制所述Hardwarerst端口的輸出信號來控制PROG_B端口的狀態(tài),在平臺上電時,DSP控制FPGA加載配置文件,并控制FPGA進行自檢,并根據(jù)FPGA的自檢結(jié)果一旦發(fā)現(xiàn)FPGA工作異常則控制FPGA重新加載配置文件。此方法雖然可以實現(xiàn)FPGA的動態(tài)配置,不過需要用DSP做輔助處理,硬件實現(xiàn)復(fù)雜,成本高,而且配置文件未經(jīng)過壓縮,配置速率低。
第二種,用CPLD芯片模擬FPGA配置時序,對FPGA進行動態(tài)配置。例如2013年陳曦在通信技術(shù)2012年03期中題為“一種可靠的FPGA動態(tài)配置方法及實現(xiàn)”,提出一種基于CPU+CPLD的可靠的FPGA動態(tài)加載方法,其中CPU用于完成配置過程的控制,程序的加解密存儲和讀取,同時根據(jù)應(yīng)用環(huán)境選擇相應(yīng)的FPGA程序。CPLD用于完成對FPGA的被動加載接口時序,同時完成對FPGA和DSP的看門狗功能。此方法雖然也可以實現(xiàn)動態(tài)配置,但是同樣需要CPLD來模擬FPGA加載時序,硬件實現(xiàn)復(fù)雜,成本高,而且需要將FPGA板卡與CPU通過網(wǎng)線連接,靈活性差,也不適用于一些FPGA所在設(shè)備需要密封的場合。
可見現(xiàn)有的動態(tài)配置技術(shù)都有硬件復(fù)雜度高、配置速率低、靈活性差等缺陷,并且在正式使用中,很多測試設(shè)備都是被封裝起來,設(shè)備的蓋板不能輕易打開或移除,傳統(tǒng)的方法必須打開設(shè)備或者通過與設(shè)備存在硬件連接,這樣就存在很多不便。因此,找到一種基于文件壓縮及非接觸式的FPGA動態(tài)配置方法顯得尤為重要。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)存在的缺陷,提出了一種基于文件壓縮及非接觸式的FPGA動態(tài)配置方法,用于解決現(xiàn)有動態(tài)配置中存在的硬件復(fù)雜度高、配置速度低和靈活性差的技術(shù)問題。
為了實現(xiàn)上述目的,本發(fā)明采取的技術(shù)方案為:
基于文件壓縮及非接觸式的FPGA動態(tài)配置方法,包括以下步驟:
(1)構(gòu)建包括硬件上掛有配置FLASH和與外部處理設(shè)備相對應(yīng)的無線通信模塊,且內(nèi)部固化有無線接收模塊、數(shù)據(jù)解壓縮模塊、在系統(tǒng)編程模塊和配置文件載入模塊程序的目標FPGA;
(2)外部處理設(shè)備采用無損壓縮算法對其生成的目標FPGA配置文件進行壓縮,得到壓縮后配置文件,并根據(jù)配置文件的大小和數(shù)量指定配置文件的初始寫入地址;
(3)外部處理設(shè)備通過無線方式將壓縮后配置文件和配置文件的初始寫入地址發(fā)送到目標FPGA;
(4)目標FPGA通過無線接收模塊將接收到的壓縮后配置文件和配置文件的初始寫入地址存儲到內(nèi)部RAM中;
(5)目標FPGA的數(shù)據(jù)解壓縮模塊讀取內(nèi)部RAM中的壓縮后配置文件,并對其采用解壓縮算法進行硬件解壓縮,得到配置文件,同時在系統(tǒng)編程模塊將配置文件寫入與目標FPGA對應(yīng)的配置FLASH中從初始寫入地址開始的存儲空間;
(6)對目標FPGA進行動態(tài)配置,實現(xiàn)步驟為:
(6a)外部處理設(shè)備根據(jù)目標FPGA需要實現(xiàn)的功能選擇配置文件,并向目標FPGA發(fā)送與其所選擇的配置文件對應(yīng)的配置FLASH的熱啟動地址和配置文件載入命令;
(6b)目標FPGA接收與配置文件對應(yīng)的配置FLASH的熱啟動地址和配置文件載入命令,啟動配置文件載入模塊,該配置文件載入模塊從配置FLASH的熱啟動地址開始載入配置文件。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點。
1、本發(fā)明通過外部設(shè)備將配置文件進行無損壓縮后傳輸,減小了配置文件的大小,繼而縮短了配置文件的傳輸時間,并用FPGA實現(xiàn)硬件解壓縮,提高了配置速率。
2、本發(fā)明中外部處理設(shè)備通過無線傳輸方式將配置文件發(fā)到目標FPGA,避免了現(xiàn)有方案中需要將目標FPGA和外部處理設(shè)備需要用下載線或網(wǎng)線等連接的缺陷,實現(xiàn)了非接觸性,進而提高了使用靈活性。
3、本發(fā)明中目標FPGA用在系統(tǒng)編程的方式直接將配置文件寫入配置FLASH中,不需要用其他CPLD或CPU來輔助FPGA進行配置,與現(xiàn)有技術(shù)相比,降低了硬件復(fù)雜度。
附圖說明
圖1為本發(fā)明的組成框圖;
圖2為本發(fā)明的實現(xiàn)流程框圖;
圖3為本發(fā)明中目標FPGA將配置文件寫入配置FLASH的操作流程圖;
圖4為本發(fā)明中配置文件載入模塊的工作流程圖。
具體實施方式
以下結(jié)合附圖和實施例,對本發(fā)明作進一步詳細說明;
參照圖1,本發(fā)明包括以下模塊:
模塊B10,外部處理模塊;
本發(fā)明中對外部處理模塊的要求為:具有無線文件發(fā)送功能的計算機,在本實施例中采用具有藍牙接口的筆記本電腦,目標FPGA外部掛有藍牙收發(fā)模塊。
模塊B11,無線傳輸方式;
無線傳輸方式是指任何不經(jīng)過接觸就能傳輸文件的方式,本實施例中采用藍牙發(fā)送;
模塊B12,無線接口;
無線接口是用來做無線信號接收時的物理層,主要負責無線傳輸和目標FPGA之間的電平轉(zhuǎn)換功能,本實施例中無線接口采用藍牙收發(fā)模塊;
模塊B13,目標FPGA;
目標FPGA是指接受動態(tài)配置的FPGA,本發(fā)明中對目標FPGA的要求有兩點,首先必須是基于SRAM結(jié)構(gòu)的FPGA,其次內(nèi)部必須具有大于1MB的BRAM,本實施例中目標FPGA芯片采用Xilinx公司的XC7K325T-FFG900;
模塊B14,配置FLASH;
配置FLASH用來存儲目標FPGA的配置文件,本發(fā)明中對配置FLASH的要求為存儲容量必須大于128MB,本實施例中配置FLASH型號為JS28F00AP30,存儲容量為128MB。
參照圖2,本發(fā)明包括以下步驟:
步驟S10,構(gòu)建內(nèi)部固化了無線接收模塊、數(shù)據(jù)解壓縮模塊、在系統(tǒng)編程模塊和配置文件載入模塊程序的目標FPGA;
由FPGA的特性可知,每次上電后都會變成白片,必須對它進行配置才能工作。本實施例中的FPGA采用FLASH配置,即在FLASH中固化了包含無線接收模塊、數(shù)據(jù)解壓縮模塊、在系統(tǒng)編程模塊和配置文件載入模塊的配置程序,在上電后,F(xiàn)PGA會從FLASH中載入配置文件完成FPGA配置。
步驟S11,外部處理設(shè)備對目標FPGA的配置文件進行無損壓縮;
XC7K325T的FLASH配置文件大小為30MB,經(jīng)過LZW無損壓縮算法壓縮后的文件大小為32KB。顯而易見,經(jīng)過壓縮后的配置文件長度大大縮小,減小了從外部處理設(shè)備發(fā)送至目標FPGA的時間。
本實施例中,所述的配置文件,可以是一個配置文件也可以是多個對應(yīng)不同F(xiàn)PGA功能的配置文件。如果是一個配置文件,則配置FLASH的初始寫入地址為0,如果有多個配置文件,則必須按照配置文件的大小來指定配置FLASH的初始寫入地址,避免重復(fù)。
本實施例中,外部處理設(shè)備必須采用無損壓縮算法來對配置文件進行壓縮,壓縮分為無損壓縮和有損壓縮,無損壓縮是指壓縮后文件可以完全還原,不會影響文件內(nèi)容,有損壓縮會減少原文件的數(shù)據(jù)量,不能完整還原出原文件,因此本實施例選擇LZW無損壓縮算法對FPGA配置文件進行壓縮,LZW算法是根據(jù)輸入數(shù)據(jù)的不同即時建立字典,這一策略能夠最大限度保證當前字典中的內(nèi)容可以最有效的壓縮當前輸入數(shù)據(jù),而且LZW算法原理相對簡單,非常適合硬件實現(xiàn),這對后來在目標FPGA中實現(xiàn)解壓縮打下了基礎(chǔ)。
步驟S12,外部處理設(shè)備將壓縮后配置文件發(fā)送到目標FPGA;
本實施例中,外部處理設(shè)備即擁有藍牙接口的筆記本電腦,將用LZW算法壓縮后的FPGA配置文件通過藍牙傳輸?shù)姆绞桨l(fā)送到掛有藍牙模塊的目標FPGA所在的板卡。
步驟S13,目標FPGA把接收到的文件存儲到內(nèi)部RAM中;
本實施例中,目標FPGA在初始狀態(tài)時已經(jīng)在配置FLASH里固化了程序,這個程序功能包括無線接收模塊、數(shù)據(jù)解壓縮模塊、在系統(tǒng)編程模塊、配置文件載入模塊。FPGA內(nèi)部程序?qū)崟r掃描這幾個模塊,當藍牙接口有數(shù)據(jù)傳來時則將收到的數(shù)據(jù)存入RAM中,本實施例中用的FPGA擁有2000KBytes的內(nèi)部RAM資源,完全可以存儲多個大小32K的壓縮后配置文件。
步驟S14,目標FPGA將配置文件解壓縮并寫入配置FLASH中;
本實施例中所述的目標FPGA將配置文件解壓縮是指,當無線接收模塊已經(jīng)將壓縮后配置文件接收完畢并寫入FPGA內(nèi)部RAM后,數(shù)據(jù)解壓縮模塊將RAM中的數(shù)據(jù)讀出并解壓,得到配置文件,在系統(tǒng)編程模塊負責將配置文件寫入配置FLASH中,配置文件的解壓縮和配置文件寫入配置FLASH是同時進行的,因為配置文件解壓縮后有30MB大小,F(xiàn)PGA內(nèi)部沒有這么大的存儲空間,同時進行的話FPGA既可以節(jié)省配置時間,又可以不用外加DDR芯片作為數(shù)據(jù)緩存,節(jié)省硬件資源。
本實施例中所述的目標FPGA將配置文件寫入配置FLASH中,是指目標FPGA通過在系統(tǒng)編程方式將配置文件寫入配置FLASH中。其中在系統(tǒng)編程(In System Programming)是指在不需要將器件從電路板上取下的情況下對其進行擦除或再編程。這種可對電路板或整個電子系統(tǒng)隨時進行組態(tài)或重組的功能,給設(shè)計開發(fā)、電路板級調(diào)試和系統(tǒng)升級換代帶來了極大的方便,使得整個系統(tǒng)設(shè)計、生產(chǎn)、維護以及更新等環(huán)節(jié)都發(fā)生了革命性的變化。
本實施例中目標FPGA將配置文件寫入FLASH的具體操作流程如圖3所示。
步驟S15,外部處理設(shè)備向目標FPGA發(fā)送配置文件載入命令和熱啟動地址;
本實施例中外部處理設(shè)備通過藍牙接口將動態(tài)配置開始命令和初始地址發(fā)送到目標FPGA,目標FPGA的藍牙接收模塊負責接收命令和地址。
步驟S16,目標FPGA受到命令和地址后啟動配置文件載入,完成動態(tài)配置;
本實施例中目標FPGA啟動動態(tài)配置過程是通過向ICAPE核發(fā)送IPROG命令實現(xiàn)的,IPROG指令的作用是對FPGA芯片進行復(fù)位操作,該復(fù)位操作對FPGA內(nèi)部的應(yīng)用程序進行復(fù)位,復(fù)位過程中除專用配置管腳和JTAG管腳,其他輸入/輸出管腳均為高阻態(tài)。完成復(fù)位操作后,將默認的加載地址用熱啟動地址寄存器(Warm Boot Start Address,WBSTAR)中的新地址替換。在發(fā)送IPROG指令之前,需要對ICAPE核進行預(yù)配置。重載控制模塊在收到觸發(fā)信號后,第一個時鐘周期將ICAPE核的寫信號和片選信號置高,第二個周期將寫信號置低,片選信號置高,第三個周期將寫信號置低,片選信號也置低。接著在下面的八個時鐘周期里,將指令隊列中的控制命令逐個發(fā)出。在狀態(tài)機發(fā)送IPROG指令的過程中,為了保證ICAPE核接收到正確的指令,每一個發(fā)送出去的命令和數(shù)據(jù)必須遵循SelectMAP數(shù)據(jù)順序。SelectMAP數(shù)據(jù)順序是將每個指令都按字節(jié)劃分,劃分后每個字節(jié)的數(shù)據(jù)都按比特位翻轉(zhuǎn)。具體的操作過程如圖4所示。
參照圖3,為本發(fā)明中目標FPGA將配置文件寫入配置FLASH的操作流程圖;
步驟S141,外部處理設(shè)備向目標FPGA發(fā)送熱啟動地址和配置文件載入命令;
本實施例中,熱啟動地址表示配置文件載入的初始地址,壓縮后的配置文件大小為32K字節(jié),F(xiàn)LASH的數(shù)據(jù)線寬為16位,地址線寬為26位,高兩位暫時用不到,所以設(shè)定初始地址為24’h000000,結(jié)束地址為24’h004000。若有兩個配置文件,則可設(shè)置第二個配置文件的初始寫入地址為24’h005000,結(jié)束地址為24’h009000。初始地址的指定是為了不讓配置文件在寫入時發(fā)生重復(fù)或覆蓋。
步驟S142,F(xiàn)PGA發(fā)送解鎖unlock命令;
本實施例中,F(xiàn)LASH型號為PC28F00AP30,解鎖命令為兩個時鐘周期的命令,第一個時鐘周期,向塊地址發(fā)送0x60,第二個時鐘周期,發(fā)送0x90,當FLASH收到連續(xù)兩字節(jié)命令后會執(zhí)行解鎖操作。
步驟S143,判斷FLASH是否解鎖;
本實施例中,判斷FLASH是否解鎖是通過FPGA讀取FLASH的狀態(tài)寄存器,通過狀態(tài)寄存器的值來判斷是否解鎖的。FPGA通過向FLASH發(fā)送0x90來讀取FLASH的狀態(tài)寄存器,如果寄存器的值為0x80,說明FLASH解鎖完畢,可以進行下一步,否則繼續(xù)等待,直到解鎖完畢;
步驟S144,F(xiàn)PGA發(fā)送擦除erase命令;
本實施例中,配置FLASH為NOR FLASH,由FLASH的特性得知,若想對FLASH進行編程操作,首先得將其所有存儲位置1,即擦除操作。擦除命令也是兩個時鐘周期的命令,第一個時鐘周期,向FLASH發(fā)送0x20塊擦除命令,第二個時鐘周期,發(fā)送0xD0塊擦除確認命令;
步驟S145,判斷FLASH是否擦除成功;
本實施例中判斷FLASH是否擦除成功是通過FPGA讀取FLASH的狀態(tài)寄存器,通過狀態(tài)寄存器的值來判斷是否擦除完畢的。目標FPGA向FLASH發(fā)送0x90命令,讀取FLASH狀態(tài)寄存器,判斷狀態(tài)寄存器值是否為0x80,若是,則表示擦除成功,若否,則繼續(xù)等待。需要注意的是FLASH的擦除較慢,典型擦除時間為800ms;
步驟S146,F(xiàn)PGA發(fā)送編程program命令;
本實施例中,編程命令為兩個時鐘周期的命令,第一個時鐘周期,F(xiàn)PGA向FLASH發(fā)送0xE8,表示編程開始,等數(shù)據(jù)寫入完畢后發(fā)送第二個時鐘周期命令0xD0,表示數(shù)據(jù)寫入完成;
步驟S147,F(xiàn)PGA將壓縮后配置文件從RAM中讀出并解壓縮;
本實施例中,當FPGA向FLASH發(fā)送0xE8表示編程開始后,數(shù)據(jù)解壓縮模塊開始將壓縮后配置文件從RAM讀出并解壓縮,解壓縮是由FPGA內(nèi)部數(shù)據(jù)解壓縮模塊實現(xiàn)的。
步驟S148,F(xiàn)PGA將配置文件寫入配置FLASH中;
本實施例中,F(xiàn)LASH編程用的緩沖器編程模式,緩沖器的深度設(shè)為512字節(jié),也就是說FPGA連續(xù)將512字節(jié)寫入數(shù)據(jù)緩沖區(qū),然后FLASH將這512字節(jié)寫入相應(yīng)的塊,本實施例中數(shù)據(jù)寫入和步驟147的數(shù)據(jù)讀出解壓縮都是同時進行的,這樣可以不用外部DDR存儲來緩存解壓縮后的數(shù)據(jù),節(jié)省了硬件成本。
步驟S149,判斷FLASH是否編程成功;
本實施例中,F(xiàn)PGA判斷FLASH是否編程成功,是通過向FLASH發(fā)送0x90命令,讀取FLASH狀態(tài)寄存器,判斷狀態(tài)寄存器值是否為0x80,若是,則表示編程成功,若否,則表示數(shù)據(jù)正在寫入。
參照圖4,本發(fā)明中目標FPGA啟動動態(tài)配置的工作流程圖;
步驟S161,目標FPGA收到熱啟動地址和配置文件載入命令;
本實施例中,F(xiàn)PGA內(nèi)部藍牙接收模塊負責接收熱啟動地址和配置文件載入命令;
步驟S162,將ICAPE核的寫信號和片選信號設(shè)置為高;
本實施例中,藍牙接收模塊若收到外部處理設(shè)備發(fā)出的動態(tài)配置開始命令,則將ICAPE核的寫信號和片選信號初始狀態(tài)設(shè)置為高。ICAPE核是Xilinx專用編譯軟件ISE中的專有IP核,調(diào)用時需要根據(jù)設(shè)計確定并調(diào)整操作數(shù)據(jù)帶寬(X8,X16,X32三種模式),本實施例中用X32模式;
步驟S163,將ICAPE核的寫信號置低和片選信號置高;
本實施例中,將ICAPE核的寫信號置低,讓寫信號有效,片選信號置高,即暫時還不讓ICAPE核工作;
步驟S164,將ICAPE核的寫信號和片選信號都置低;
本實施例中,將片選信號置低,讓ICAPE核開始工作;
步驟S165,發(fā)送8個周期的IPROG指令;
本實施例中,IPROG指令為8個時鐘周期指令,首先發(fā)送FFFFFFF,表示啞數(shù)據(jù),然后發(fā)送AA995566,表示同步字,然后發(fā)送20000000,表示空閑,接著發(fā)送30020001,表示對起始地址寄存器寫1,接下來是最重要的熱啟動地址(WBSTSR),也就是外部處理設(shè)備發(fā)送的熱啟動地址,接下來發(fā)送30008001,表示指令寄存器寫1,然后發(fā)送0000000F,表示運行IPROG指令,最后發(fā)送20000000,表示指令結(jié)束回到空閑。為了保證ICAPE核正確收到指令和數(shù)據(jù),需要對操作的數(shù)據(jù)按照比特進行順序調(diào)整。調(diào)整規(guī)則為:將數(shù)據(jù)按字節(jié)劃分,劃分后的數(shù)據(jù)每字節(jié)按比特位進行翻轉(zhuǎn)。FPGA專用配置邏輯在收到IPROG指令后,開始執(zhí)行內(nèi)部復(fù)位操作,擦除內(nèi)存中原來的程序,并根據(jù)WBSTAR中的熱啟動地址,從FLASH芯片中WBSTAR所指向的熱啟動地址位開始讀取FPGA配置位流數(shù)據(jù),完成FPGA配置。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的保護范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所做的等效結(jié)構(gòu)和等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的保護范圍內(nèi)。