康志杰
摘要:現(xiàn)場可編程門陣列(FPGA)廣泛應用在通信及信息處理等眾多領域,傳統(tǒng)的基于本地開發(fā)環(huán)境的FPGA升級方式無法滿足工程現(xiàn)場維護的需求,基于以太網(wǎng)傳輸方式設計了FPGA遠程升級系統(tǒng)方案,實現(xiàn)對FPGA配置文件的更新,為產(chǎn)品的升級維護提供了便利。升級過程中的異常情況,通過分析數(shù)據(jù)處理流程和引發(fā)常見問題的異常情況,分別設計了不同的異常處理機制,解決了遠程升級失敗的問題。對異常處理機制進行了充分測試,驗證了設計的可靠性。
關鍵詞:現(xiàn)場可編程門陣列;遠程升級;可靠性
中圖分類號:TP393文獻標志碼:A文章編號:1008-1739(2020)08-61-4
0引言
現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)具有并行處理架構(gòu),高速數(shù)據(jù)處理能力遠優(yōu)于一般CPU,因而在航空航天、醫(yī)療設備、通信、汽車及工控等領域得到了廣泛應用[1]。而FPGA的配置文件升級維護,通常需要工程人員到現(xiàn)場利用JTAG進行升級。當待升級設備和技術(shù)人員處在不同地點時,傳統(tǒng)的升級方式將造成時間和人力的浪費。而遠程在線升級技術(shù),可以利用以太網(wǎng)實現(xiàn)設備升級,不受人機地點的限制。此外,基于以太網(wǎng)的升級方式可以同時進行大批量的設備升級。目前針對遠程升級的方案,主要有利用FPGA內(nèi)部邏輯更新Flash[2-3]和利用CPU直接更新Flash[4]。通常情況下,遠程升級成功的關鍵在于升級包數(shù)據(jù)準確無誤地寫入Flash,在升級包數(shù)據(jù)傳輸過程中一旦發(fā)生斷電、傳輸錯誤及CPU軟復位等異常,F(xiàn)lash中原有的配置文件完整性可能被破壞,這種情況下只能依賴JTAG重新下載配置文件。為規(guī)避這些異常帶來的風險,本文針對CPU+FPGA架構(gòu)類型的板卡,提出了一種可靠的FPGA遠程升級方案,已成功應用在通信系統(tǒng)上。
1遠程升級關鍵技術(shù)
對于CPU+FPGA架構(gòu)類型的板卡,在遠程升級過程中需要解決CPU軟復位、板卡意外斷電及數(shù)據(jù)傳輸錯誤等關鍵問題。
如果不做特殊處理,升級失敗就會導致FPGA無法加載,產(chǎn)生災難性后果。一旦發(fā)生,只能拆開設備通過JTAG重新下載程序。針對這些問題,分別設計了不同的處理技術(shù)以實現(xiàn)升級的穩(wěn)定可靠。
1.1握手幀和傳輸狀態(tài)機技術(shù)
升級過程中,CPU可能在任意時刻軟復位,從而導致數(shù)據(jù)傳輸中斷。針對該情況,設計了CPU和FPGA握手幀格式,如圖1所示。
FPGA處理升級包的狀態(tài)機,如圖2所示。
上述狀態(tài)機中設計了超時計數(shù)狀態(tài),用來處理CPU因復位導致的意外停發(fā)。在幀頭標志字接收、配置地址長度字接收、rbf文件接收下發(fā)及校驗結(jié)果接收等狀態(tài)時,若在限定時間內(nèi)未接收到CPU的數(shù)據(jù),該狀態(tài)機將強制回到空閑狀態(tài),以等待下次升級。
1.2 Flash狀態(tài)字保護技術(shù)
意外斷電發(fā)生在FPGA訪問Flash期間,會對系統(tǒng)產(chǎn)生影響,其他時間斷電不會對系統(tǒng)產(chǎn)生任何影響,只需重新上電,系統(tǒng)即可恢復到升級前狀態(tài)。因此,需要對訪問Flash期間的意外斷電進行保護,升級過程中FPGA訪問Flash流程,如圖3所示。
在FPGA訪問Flash時,首先擦除狀態(tài)字節(jié)(地址0x7FFFF),待訪問完畢后,重新在狀態(tài)字打上0xA5標志,這樣任何時刻在訪問Flash時發(fā)生斷電,再次上電時,因不滿足由出廠配置跳轉(zhuǎn)到用戶配置的條件,系統(tǒng)只停留在出廠配置運行。出廠配置中包含升級功能,可重新啟動升級過程,該方法能有效避免斷電帶來的“災難性”影響。
1.3數(shù)據(jù)傳輸保護技術(shù)
升級過程中,升級包字節(jié)傳輸錯誤同樣會導致不可預知的程序功能異常,為保證整個鏈路數(shù)據(jù)正確傳輸,整個升級過程共包含3次校驗,有效保證了數(shù)據(jù)的正確傳輸。
第1次校驗:升級包由PC機下發(fā)到板卡的CPU,升級包內(nèi)包含MD5校驗字節(jié),CPU在收到升級包后,同樣會進行MD5值計算,計算所得結(jié)果與升級包內(nèi)MD5校驗字節(jié)進行比對,若一致,則認為升級包正常接收,否則會提示升級失敗。該次校驗保證了數(shù)據(jù)包從PC機到板卡CPU的正確傳輸。
第2次校驗:CPU與FPGA的握手幀CRC校驗,主要為了保證握手幀中用戶配置地址和升級包長度接收無誤。如果該部分字節(jié)錯誤,可能造成Flash內(nèi)原始固化的出廠文件損壞或?qū)懭脲e誤的用戶配置,這種情況下可能造成系統(tǒng)“變磚”。借助CRC校驗,有效避免了這種情況的發(fā)生。
第3次校驗:CPU下發(fā)的升級包和FPGA從Flash回讀的升級包進行對比,完全一致后,CPU向上位機和FPGA分別發(fā)送升級成功標志,這樣保證了要升級的程序正確寫到了Flash內(nèi)部,避免升級完成后程序功能出現(xiàn)異常。
2遠程升級系統(tǒng)方案
2.1系統(tǒng)架構(gòu)
遠程升級系統(tǒng)架構(gòu)如圖4所示。
升級文件經(jīng)由PC機、網(wǎng)線、CPU及FPGA傳輸?shù)紽lash配置芯片[5]。
2.2 CPU端處理框圖
PC機通過以太網(wǎng)與CPU進行數(shù)據(jù)交互,CPU內(nèi)模塊處理流程圖,如圖5所示。
PC端上位機下發(fā)的升級包包含rbf文件(依賴于FPGA綜合工具生成)和隨路MD5校驗值兩部分。CPU接收到升級包后提取rbf文件,計算MD5,與隨路MD5校驗值比較,如果二者一致,則認為CPU正確地接收了升級包。然后CPU與FPGA握手,提取rbf文件下發(fā)到FPGA中,等待FPGA從Flash回讀rbf文件進行校驗,最后下發(fā)校驗結(jié)果到FPGA并且上報到PC端。
2.3 FPGA端處理流程圖
FPGA端處理框圖如圖6所示。
各個模塊的功能如下:
①Flash管理模塊:負責接收升級數(shù)據(jù)包、升級完成后向上發(fā)送回讀數(shù)據(jù)包及升級完成后指導配置切換模塊切換配置文件。
②配置切換模塊:負責用戶配置和出廠配置的切換。
③用戶邏輯:為用戶自定義功能邏輯塊。
④UART_ASMI模塊:工作在50 MHz時鐘下,負責從串口接收數(shù)據(jù),串行轉(zhuǎn)并行后發(fā)送到ASMI_FIFO中,接收UART_FIFO發(fā)送過來的數(shù)據(jù)并行轉(zhuǎn)串行向上發(fā)送。
⑤ASMI_FIFO,UART_FIFO模塊:負責進行時鐘域的轉(zhuǎn)換,UART_ASMI與FIFO交互時鐘為50 MHz,ASMI_CONTROL模塊與FIFO交互時鐘為10 MHz。
⑥ASMI_CONTROL:負責控制ASMI_UPDATE(ASMI_PARALLEL)核,向外部串行Flash寫入升級數(shù)據(jù),從Flash讀取升級數(shù)據(jù)包,擦除Flash等。
⑦ASMI_UPDATE_IP:訪問外部Flash的IP,該IP核直接控制Flash的讀寫。
⑧RU_CB及REMOTE_ UPDATE_IP:負責出廠配置文件和用戶配置文件的切換。
FPGA遠程升級程序流程圖如圖7所示。
3 Flash地址空間及配置文件跳轉(zhuǎn)
FPGA升級完成后,能正常運行的條件是:①Flash內(nèi)部按預設的地址空間存儲著正確的配置文件;②由出廠配置向用戶配置的跳轉(zhuǎn)關系成立。
3.1 Flash地址空間分配
Flash芯片內(nèi)部地址空間如圖8所示。
出廠配置文件(FAC)存儲在Flash存儲空間的前半部分,F(xiàn)AC內(nèi)包含升級功能及用戶基本功能。而用戶配置文件存放在0x40000~0x7FFFE的地址空間。0x7FFFF地址用來存儲狀態(tài)字,用來標識用戶配置文件是否正確完好。
3.2配置文件跳轉(zhuǎn)
Flash內(nèi)配置文件跳轉(zhuǎn)關系如圖9所示。
板卡出廠情況下,F(xiàn)lash內(nèi)要固化出廠配置和用戶配置文件。板卡上電后,系統(tǒng)應能正確檢測出用戶配置文件的正確與否,然后決定是否由出廠配置文件跳轉(zhuǎn)到用戶配置文件去執(zhí)行。
一旦Flash內(nèi)部存儲的出廠配置文件、用戶配置文件被破壞,配置文件將無法正常執(zhí)行,這種情況下只能依賴JTAG重新下載出廠配置文件。升級過程中的意外斷電和CPU軟復位,將會造成用戶配置文件被破壞。而數(shù)據(jù)傳輸錯誤可能造成出廠配置文件、用戶配置文件被破壞。在用戶配置文件被破壞的條件下,仍然需要依賴出廠配置文件重新遠程升級,實現(xiàn)新的用戶配置文件的寫入。因此,遠程升級的關鍵技術(shù)在于:在意外斷電、數(shù)據(jù)傳輸錯誤和CPU軟復位情況發(fā)生后,系統(tǒng)仍然能夠再次遠程升級,而不是通過JTAG去下載。
4測試結(jié)果及分析
4.1測試環(huán)境
測試硬件環(huán)境為通信系統(tǒng)板卡,板載CPU是NXP的SOC芯片,F(xiàn)PGA是ALTERA的EP4C,上位機軟件是自研管理軟件。上位機能獲取FPGA正在運行的配置文件版本號,從而能夠驗證升級成功與否[6]。FPGA出廠配置文件版本號為V01,初始用戶配置文件版本號為V02,升級后的用戶配置文件版本號為V03。
4.2測試用例及結(jié)果
測試1:CPU意外軟復位對升級的影響
設計了4個時刻插入CPU軟復位,測試結(jié)果如表1所示。
通過測試,在CPU異常軟復位后,系統(tǒng)均能重新利用網(wǎng)絡進行升級。其中,在測試用例4的測試情況下,板卡重上電后,由于用戶配置已被擦除,故只能執(zhí)行出廠配置。在出廠配置運行時,可以重新進行升級。上述測試用例每個進行100次測試,最終能100%升級成功。
測試2:板卡意外斷電對升級的影響
設計了2個測試用例測試升級過程中意外斷電的影響,測試結(jié)果如表2所示。
每個測試用例均測試100次,最終100%升級成功。測試結(jié)果表明,在系統(tǒng)升級過程中,因異常斷電導致的系統(tǒng)升級失敗,在重新上電后,能重新利用網(wǎng)絡進行再次升級。
測試3:數(shù)據(jù)傳輸錯誤對升級的影響
為測試對抗數(shù)據(jù)傳輸錯誤的能力,對數(shù)據(jù)傳輸鏈路上部分字節(jié)進行修改后,測試結(jié)果如表3所示。
當握手幀出現(xiàn)錯誤字節(jié)后,均無法成功握手。此外,故意修改FPGA從Flash回讀的配置文件,當送到CPU校驗時,無法通過校驗。測試結(jié)果表明,設計方案能應對數(shù)據(jù)傳輸中出現(xiàn)的錯誤。
5結(jié)束語
通過工程實際測試,該遠程升級方法實現(xiàn)簡單、穩(wěn)定可靠,不會導致系統(tǒng)“變磚”,不需要修改硬件,易于移植。適用于大批量、非易接觸設備的板卡升級,已在多種板卡上應用。
參考文獻
[1]劉永恩,王俊芳.FPGA遠程升級技術(shù)的分析與實現(xiàn)[J].無線電工程,2012,42(9):48-50,60.
[2]閆雙山,胡學龍,季靜,等.串口更新FPGA配置文件的一種實現(xiàn)方法[J].國外電子測量技術(shù),2019,38(10):79-83.
[3]丁丁,湯曉斌,陳立德,等.基于μClinux的FPGA遠程更新系統(tǒng)的實現(xiàn)[J].電子技術(shù)應用,2014,40(3):6-8.
[4]姚遠.基于JTAG接口實現(xiàn)ARM對FPGA的Firmware遠程配置[D].沈陽:沈陽航空航天大學,2011.
[5]李強,羅超,夏威,等.FPGA遠程更新系統(tǒng)[J].儀表技術(shù)與傳感器,2014(7):72-74.
[6]周瓊,周鵬.單核FPGA系統(tǒng)的可靠性遠程升級設計[J].中國新通信,2018,20(2):47-49.