韓子舟,任勇峰,李輝景
(中北大學(xué)儀器科學(xué)與動態(tài)測試教育部重點實驗室電子測試技術(shù)重點實驗室,山西太原 030051)
FPGA 可重配置的特性為相關(guān)電子設(shè)備的設(shè)計提供了很高的靈活性,可以在生產(chǎn)過程和后期維護(hù)中根據(jù)不同的需求進(jìn)行更新,保障產(chǎn)品的可靠及穩(wěn)定運(yùn)行[1-3]。傳統(tǒng)的程序升級是打開產(chǎn)品外殼,由USB-JTAG的連接方式實現(xiàn)程序的升級。但是,由于一些設(shè)備已經(jīng)交付或已經(jīng)進(jìn)行特殊工藝處理,不具有拆卸再次進(jìn)行程序升級的條件,無法通過USBJTAG 專用線纜和仿真器的方式進(jìn)行升級[4-5]。針對該難題,文中提出了一種基于1553B 總線的固件更新方法,該方法能夠通過現(xiàn)有的1553B 通信接口完成程序的在線更新,無需進(jìn)行額外的硬件改動,解決了以往只能拆卸產(chǎn)品,再通過專用線纜及仿真器進(jìn)行程序升級的問題。
總體設(shè)計方案如圖1 所示,由1553B 通信模塊和FPGA 控制模塊組成。1553B 模塊主要負(fù)責(zé)與測試臺進(jìn)行通信,實現(xiàn)命令和配置數(shù)據(jù)的接收,再將其傳輸?shù)紽PGA控制模塊中;FPGA控制模塊負(fù)責(zé)接收1553B模塊傳來的指令和配置文件,實現(xiàn)對Flash的分區(qū)擦除、寫入等操作。同時,由ICAPE2 模塊實現(xiàn)了對FPGA的重配置及Fallback 模式的配置,充分利用FPGA的可編程資源[6-7]。如果在程序升級時,設(shè)備斷電致使升級失敗,則FPGA 在上電后會觸發(fā)Fallback模式,保證配置文件能夠通過外部接口實現(xiàn)升級。
圖1 總體設(shè)計方案
在固件更新時,需要由1553B接口接收命令,并進(jìn)行相應(yīng)的操作,電路原理框圖如圖2 所示。FPGA 對1553B 主控模塊BU-61580的控制主要是利用地址總線、數(shù)據(jù)總線、控制總線、狀態(tài)總線完成的[8-9]。所用FPGA的接口電平為3.3 V,BU-61580的接口電平為2~5.3 V,控制總線上的指令是從FPGA 傳送至BU-61580 芯片中,因此該方向不需要進(jìn)行電平匹配。而地址線和數(shù)據(jù)線傳輸方向是雙向的,接口電平會對FPGA 接口產(chǎn)生沖擊,因此需要進(jìn)行電平轉(zhuǎn)換;狀態(tài)總線上的數(shù)據(jù)是從BU-61580 向FPGA 傳輸?shù)模砸矐?yīng)該轉(zhuǎn)換電平,電路原理框圖如圖3 所示。
圖2 1553B總線接口電路
文中以Xilinx Kintex-7 芯片為例,在進(jìn)行FPGA配置時,有7 種方式可以選擇,分別是主串、主并、主SPI、主BPI、從串、從并及JTAG 配置模式,通過設(shè)置M2、M1、M0 3 個引腳的高低電平選擇配置模式。
該設(shè)計分別將M2、M1、M0 進(jìn)行下拉、下拉、上拉,把配置模式設(shè)為主SPI 模式,配置電路如圖3 所示。這種配置模式只需要外掛一個SPI 存儲器即可,不僅所需的FPGA 資源少,而且SPI Flash 尺寸小,能夠最大化利用電路板狹小的面積[10-11]。
圖3 Flash配置電路
在設(shè)備上電復(fù)位以后,1553B 模塊首先要做的就是對BU-61580 進(jìn)行初始化配置,其配置包括寄存器配置和存儲器配置。由于BU-61580 模塊不具備記憶功能,一旦下電所有配置信息將會丟失,因此需要上電之后對其再次進(jìn)行配置[12]。而且每次上電之后配置的信息是一致的,故該設(shè)計將相關(guān)配置信息存儲在FPGA的ROM 中,上電之后只需把要配置的數(shù)據(jù)及地址讀出,分別送到數(shù)據(jù)線及地址線上,發(fā)送給BU-61580 即可完成配置。
在完成配置之后等待接收消息,每接收完成一條消息就會進(jìn)入中斷,然后讀取中斷狀態(tài)寄存器判斷中斷類別。若為MT 中斷則重新回到數(shù)據(jù)等待接收狀態(tài);若為RT 中斷,則需要取出區(qū)域A的棧指針,然后根據(jù)指針指向地址取出命令字,并執(zhí)行相應(yīng)操作。更新程序中主要需完成3 種操作,首先是擦除指令,將需要更新的代碼全部刪除;其次是寫指令,把新的代碼寫入指定的地址,完成更新。在寫操作時,需要根據(jù)數(shù)據(jù)塊指針,取出1553B 所接收的程序再轉(zhuǎn)發(fā)給下一級的FIFO;最后是寫關(guān)閉指令,在完成程序更新后拉低寫使能信號,結(jié)束數(shù)據(jù)的傳輸。1553B 操作流程如圖4 所示。
圖4 1553B操作流程圖
固件更新主要由兩部分組成,分別是狀態(tài)控制模塊和Flash 操作模塊。狀態(tài)控制模塊主要完成指令的識別,以及要發(fā)送指令的賦值操作,完成賦值后進(jìn)入Flash 開始操作。操作結(jié)束后對之前的賦值進(jìn)行清零,然后進(jìn)入待機(jī)狀態(tài)等待下一條指令。Flash操作模塊主要控制讀寫寄存器,發(fā)送地址與數(shù)據(jù),固件更新流程如圖5 所示[13]。
圖5 固件更新流程
Flash的工作狀態(tài)主要有識別設(shè)備ID、寫使能、擦除、寫禁用、讀狀態(tài)寄存器、讀寫數(shù)據(jù)。FPGA 接收到程序升級的命令以后,首先要進(jìn)入識別ID 狀態(tài)得到設(shè)備ID。在識別完成后,發(fā)送寫使能指令,以獲取擦除操作的權(quán)限。當(dāng)從狀態(tài)寄存器中讀取到寫使能已開啟,便開始對Flash的指定地址進(jìn)行擦除。根據(jù)芯片手冊,S25FL256S 支持一次擦除的扇區(qū)大小為64 kB,而固件存儲區(qū)域為10 MB,因此應(yīng)該循環(huán)擦除160 次。最后還需通過讀取狀態(tài)寄存器的值,檢驗擦除是否完成。
Flash 擦除完成后,再由計算機(jī)下發(fā)需要更新的程序。首先FPGA 將從1553B 總線上接收的程序送入FIFO 中緩存,然后對FIFO的空信號進(jìn)行判斷。若不為空,則把數(shù)據(jù)送入Flash 中。從圖5的操作流程圖可知,先由FPGA 下發(fā)寫使能命令,使得Flash 中存儲區(qū)域可供修改,再下發(fā)寫指令、固件數(shù)據(jù)及頁地址。S25FL256S 頁編程一次只支持寫入256 個字節(jié)的數(shù)據(jù),因此需要循環(huán)提供寫使能和寫指令給Flash,直至數(shù)據(jù)全部寫入。當(dāng)判斷到FIFO 為空時,開始計時等待。若FIFO 中出現(xiàn)數(shù)據(jù),則繼續(xù)寫入Flash 中;若連續(xù)等待1 s FIFO 依然為空,則斷定數(shù)據(jù)更新結(jié)束,關(guān)閉寫操作,重新禁用寫使能完成配置工作。
FPGA 多重配置技術(shù)實際是對可編程資源的復(fù)用,用戶可以根據(jù)需求加載不同的配置文件,從而實現(xiàn)多重配置[14]。FPGA 多重配置技術(shù)不僅提高了對資源的利用率,還提高了設(shè)計的靈活性,使設(shè)備易于后期維護(hù)與更新[15-16]。多重配置技術(shù)主要是由ICAPE2 執(zhí)行內(nèi)部編程指令(IPROG)實現(xiàn)的。
當(dāng)開始重配置時,IPROG 指令由FPGA 內(nèi)部的ICAPE2 模塊發(fā)出,使FPGA 從Flash的指定地址開始讀取配置文件,地址由重載起始地址(WBSTAR)寄存器決定。在IPROG 指令發(fā)出后,F(xiàn)PGA 依次進(jìn)行三步操作:首先發(fā)送同步字(AA995566),然后向WBSTAR 寄存器中寫入下一個比特流文件起始地址(00000000),最后發(fā)送IPROG命令(0000000F)。IPROG 指令序列如表1 所示。
表1 IPROG指令隊列
程序在線升級的過程中,如果遇到設(shè)備掉電等突發(fā)情況,重新上電之后,F(xiàn)PGA 根據(jù)觸發(fā)引導(dǎo)邏輯從Flash 中加載程序,然而舊的程序已經(jīng)擦除,而新的配置文件還未完全寫入。導(dǎo)致設(shè)備無法再由1553B 接口接收下發(fā)的指令與相關(guān)配置文件,F(xiàn)PGA也失去了對Flash的控制。此時,唯一的解決辦法就是打開產(chǎn)品外蓋,通過USB-JTAG的方式把配置文件下載至Flash 中,給設(shè)備的升級造成了不便。為避免此類情況的發(fā)生,該設(shè)計通過觸發(fā)Fallback的方式來進(jìn)行解決,其配置邏輯如圖6 所示。
圖6 Fallback配置邏輯
在程序更新的過程中,一旦遇到突發(fā)情況,F(xiàn)PGA檢測到配置出現(xiàn)錯誤,就會立刻進(jìn)入到Fallback 模式,將FPGA 進(jìn)行復(fù)位,然后從Flash的起始地址重新加載Golden Bitstream。Golden Bitstream 中包含原有的接口控制邏輯以及FPGA 對Flash的操作邏輯,這就使得FPGA 可以再次通過1553B 總線完成程序升級,保證了更新的可靠性。
有3 種情況會使FPGA 進(jìn)入Fallback 配置模式,一種是在給定的時間內(nèi)未檢測到同步字AA99556;一種是檢驗到CRC 校驗錯誤,CRC 校驗指令存儲在配置文件的尾部,F(xiàn)PGA 只有接收到CRC 校驗指令才會進(jìn)行校驗,進(jìn)而判斷數(shù)據(jù)是否正確;最后一種便是看門狗計時器超時,看門狗會對配置過程進(jìn)行監(jiān)測,如果超時則會進(jìn)入Fallback 模式。程序在線升級的過程中,若設(shè)備斷電發(fā)生在程序擦除中,導(dǎo)致無法檢測到同步字,則FPGA 會進(jìn)入Fallback 模式重新加載Golden Bitstream。如果設(shè)備斷電發(fā)生在寫Flash 中,因為同步字在配置文件首部已經(jīng)寫入Flash,而CRC 校驗指令在配置文件尾部還未寫入,因此無法通過同步字及CRC 來判斷校驗是否出錯。但是設(shè)備斷電,看門狗計時器便會因FPGA 配置失敗而超時,會觸發(fā)FPGA 配置邏輯重新進(jìn)入Fallback模式再次配置。通過這種方式,無論設(shè)備何時斷電,都會觸發(fā)Fallback 模式,保障了程序在線升級的可靠性。
為了驗證該設(shè)計的可靠性,把通過1553B 總線寫入的程序讀出,并由上位機(jī)軟件顯示,部分配置文件如圖7 所示。再通過Vivado的集成邏輯分析儀ILA 抓取從Flash 中讀取的配置文件,如圖8 所示。通過對比,能夠看到配置文件傳輸無誤。
圖7 部分配置文件
圖8 正常讀取的配置文件
為了對該設(shè)計的重配置進(jìn)行驗證,準(zhǔn)備了3 個配置文件,其中一個為Golden Bitstream,其余兩個為Update Bitstream。其功能為點亮不同的LED 燈,經(jīng)驗證無誤,故重配置設(shè)計已實現(xiàn)。為了對Fallback模式進(jìn)行驗證,該設(shè)計通過ILA 分別抓取正常讀出的配置文件、擦除過程中掉電讀出的配置文件及寫入程序過程中掉電讀出的配置文件,分別如圖8~10 所示,均與前述設(shè)計方案相符,且不論程序升級中設(shè)備何時斷電,均可觸發(fā)Fallback 模式,說明Fallback 配置模式已實現(xiàn),證明了該設(shè)計的可靠性。
圖9 擦除過程中斷電讀取的配置文件
圖10 寫入程序過程中斷電讀取的配置文件
該設(shè)計通過1553B 總線實現(xiàn)了對FPGA的在線升級,避免了特殊環(huán)境下無法完成程序更新,提高了程序更新方式的靈活性。同時通過控制Flash 完成了程序的分區(qū)擦除及分區(qū)寫入,并且借助ICAPE2 模塊完成了FPGA的多重配置,極大地提高了FPGA 可編程資源的利用率。而且Fallback 模式的配置,使得FPGA 即使在程序升級過程中掉電,也可以重新加載外部接口的控制邏輯和Flash的控制邏輯,再次通過1553B 接口完成在線升級,充分提高了固件更新的可靠性。