周云松,黃維雄,劉驍知,范晉文
(中科芯集成電路有限公司,江蘇無錫 214072)
在進(jìn)行單板FPGA子系統(tǒng)調(diào)試時(shí),只需要連接聯(lián)合測(cè)試工作組(JTAG)接口即可完成比特流的加載、在線觀測(cè)、Flash配置文件的固化等操作,非常便利[1]。然而,當(dāng)一個(gè)系統(tǒng)中有上百個(gè)FPGA子系統(tǒng)需要同時(shí)加載比特流進(jìn)行調(diào)試時(shí),使用JTAG將變得力不從心[2]。目前軍用系統(tǒng)對(duì)大規(guī)模FPGA系統(tǒng)的固件升級(jí)常常使用自定義的通信協(xié)議,不同的設(shè)備要求不同,不具備通用性[3]。同時(shí)部分升級(jí)系統(tǒng)只側(cè)重網(wǎng)絡(luò)上單個(gè)FPGA固件升級(jí)設(shè)計(jì)的實(shí)現(xiàn),規(guī)避應(yīng)用環(huán)境中使用JTAG升級(jí)的安全風(fēng)險(xiǎn),未有在高速通信系統(tǒng)中應(yīng)用的案例[4],且不具備升級(jí)的靈活性。本文提出的固件升級(jí)系統(tǒng)結(jié)合了當(dāng)前較為成熟的技術(shù)解決方案,以萬兆以太網(wǎng)[5]、TCP/IP協(xié)議為基石,解決了通用性問題,在作為系統(tǒng)級(jí)的固件升級(jí)方案的同時(shí)又能作為系統(tǒng)級(jí)的通信方案,保證了高速實(shí)時(shí)通信。系統(tǒng)中還使用了高性能DSP作為系統(tǒng)的主處理器[6],所以整個(gè)系統(tǒng)適用于對(duì)數(shù)據(jù)吞吐量和處理性能要求都較高的系統(tǒng)。
子系統(tǒng)硬件框圖如圖1所示,框圖中只給出了與固件升級(jí)相關(guān)的硬件連接關(guān)系,其余與應(yīng)用相關(guān)的外設(shè)連接關(guān)系不予討論。該子系統(tǒng)是典型的DSP+FPGA構(gòu)架,對(duì)系統(tǒng)中主要器件以及連接關(guān)系進(jìn)行簡(jiǎn)要說明,同樣與應(yīng)用相關(guān)的作用也不予討論。
圖1 子系統(tǒng)硬件框圖
主處理器DSP型號(hào)為TMS320S6455,在固件進(jìn)行升級(jí)操作時(shí)從外部存儲(chǔ)器接口(EMIF)總線讀取固件數(shù)據(jù),并存儲(chǔ)到Flash中,在子系統(tǒng)上電啟動(dòng)時(shí),將Flash中的固件數(shù)據(jù)發(fā)送至EMIF總線,協(xié)FPGA總線通過SelectMap驅(qū)動(dòng)將EMIF固件數(shù)據(jù)發(fā)送至主FPGA,達(dá)到啟動(dòng)主FPGA的目的。
主FPGA型號(hào)為XC7V690T,為子系統(tǒng)提供萬兆以太網(wǎng)的組網(wǎng)能力。協(xié)FPGA主要完成系統(tǒng)的狀態(tài)監(jiān)控、異常處理、接口驅(qū)動(dòng)、電平轉(zhuǎn)換等功能,這里對(duì)電平轉(zhuǎn)換功能進(jìn)行必要的描述。主DSP的EMIF總線工作電平為3.3 V,而主FPGA為高性能FPGA,其I/O電平只能支持1.8 V,所以二者不能直接相連,必須經(jīng)過電平轉(zhuǎn)換。由于EMIF總線的I/O數(shù)多,需要使用多片電平轉(zhuǎn)換芯片,電路占用面積大,這里巧妙利用了協(xié)FPGA支持多種I/O電平的特點(diǎn),在完成子系統(tǒng)其他功能的同時(shí),使用剩余的I/O管腳,完成了EMIF總線電平轉(zhuǎn)換的功能。
系統(tǒng)級(jí)硬件框圖如圖2所示,該系統(tǒng)由PC上位機(jī)、萬兆以太網(wǎng)交換機(jī)與子系統(tǒng)構(gòu)成,在進(jìn)行系統(tǒng)聯(lián)調(diào)或維護(hù)升級(jí)時(shí),可通過上位機(jī)對(duì)所有子系統(tǒng)固件進(jìn)行一鍵升級(jí),同時(shí)上位機(jī)可實(shí)時(shí)查看每一個(gè)子系統(tǒng)的狀態(tài)。
圖2 系統(tǒng)級(jí)硬件框圖
軟件系統(tǒng)框圖如圖3所示,主要由上位機(jī)軟件、主FPGA軟件、協(xié)FPGA軟件與主DSP軟件構(gòu)成,框圖中與固件升級(jí)系統(tǒng)無關(guān)的軟件連接關(guān)系均用虛線表示。
SelectMAP是Xilinx FPGA比特流加載啟動(dòng)的一種方式,有Master SelectMAP和Slave SelectMAP 2種模式,主要區(qū)別是時(shí)鐘信號(hào)CCLK由FPGA產(chǎn)生還是由外部供給,本系統(tǒng)中選擇使用Slave SelectMAP模式,CCLK信號(hào)由外部供給,這是一種方便使用外圍處理器配置FPGA比特流文件的方式[7]。外圍處理器、復(fù)雜可編程邏輯器件(CPLD)等可通過產(chǎn)生對(duì)應(yīng)的時(shí)序來完成對(duì)FPGA的加載,這是完成本系統(tǒng)功能的重要技術(shù)之一,系統(tǒng)軟件框圖中的SelectMAP驅(qū)動(dòng)就是將EMIF總線的數(shù)據(jù)轉(zhuǎn)換為SelectMAP配置時(shí)序,從而實(shí)現(xiàn)DSP配置FPGA比特流的功能。
圖3 系統(tǒng)軟件框圖
萬兆以太網(wǎng)硬件協(xié)議棧的技術(shù)可參閱文獻(xiàn)[8]。本系統(tǒng)中采用的硬件協(xié)議棧功能更為完善,在支持地址解析(ARP)、用戶數(shù)據(jù)報(bào)(UDP)協(xié)議的基礎(chǔ)之上,新增支持組管理協(xié)議(IGMPv2協(xié)議),使協(xié)議棧不僅支持單播組網(wǎng),同時(shí)也支持組播組網(wǎng)。在萬兆以太網(wǎng)硬件協(xié)議棧的加持下,子系統(tǒng)具備了強(qiáng)大的組網(wǎng)能力。
系統(tǒng)的應(yīng)用功能是由主DSP和主FPGA的固件來實(shí)現(xiàn)的,所以固件升級(jí)的是主DSP和主FPGA的固件,協(xié)FPGA固件在第一次固化后就不再升級(jí)。固件升級(jí)流程如圖4所示,上位機(jī)通過萬兆以太網(wǎng)將升級(jí)固件發(fā)送給子系統(tǒng),子系統(tǒng)中的工作流程如下:萬兆以太網(wǎng)硬件協(xié)議棧將數(shù)據(jù)解析后發(fā)送至EMIF總線,主DSP通過EMIF總線識(shí)別讀取,升級(jí)固件后燒寫到Flash中[9]。所有升級(jí)數(shù)據(jù)幀除了以太網(wǎng)協(xié)議中的校驗(yàn)外,用戶數(shù)據(jù)中也包含了校驗(yàn),校驗(yàn)通過后才能燒寫到Flash中,校驗(yàn)不通過,子系統(tǒng)會(huì)將錯(cuò)誤狀態(tài)上報(bào)給上位機(jī)。Flash燒寫完畢后,DSP還會(huì)將固化的固件進(jìn)行回讀比較,以確認(rèn)燒寫的正確性,大大提高了固件升級(jí)的穩(wěn)健性。
由于應(yīng)用環(huán)境的多樣性,在一個(gè)大系統(tǒng)中所有子系統(tǒng)的應(yīng)用軟件可能是相同的,例如相控陣?yán)走_(dá)中各個(gè)子陣;也有可能不同的子系統(tǒng)應(yīng)用軟件分為幾種類型,需要升級(jí)不同的固件。分3種情況說明升級(jí)系統(tǒng)的靈活性。
圖4 固件升級(jí)流程
第1種,所有子系統(tǒng)的固件相同,將所有子系統(tǒng)設(shè)置成同一個(gè)組播IP(即一個(gè)組),上位機(jī)向組播IP發(fā)送升級(jí)數(shù)據(jù)即可。
第2種,子系統(tǒng)的固件分為幾種類型,按類型分類設(shè)置不同的組播IP,上位機(jī)向不同的組播IP發(fā)送升級(jí)數(shù)據(jù),完成不同類型的子系統(tǒng)固件升級(jí)。
第3種,單個(gè)子系統(tǒng)的固件升級(jí),上位機(jī)向指定的單播IP地址發(fā)送升級(jí)數(shù)據(jù),完成一個(gè)子系統(tǒng)的固件升級(jí)。
升級(jí)系統(tǒng)的靈活性可以滿足不同系統(tǒng)的固件升級(jí)需求。
以上描述的升級(jí)固件包含主DSP軟件和主FPGA軟件,協(xié)FPGA的軟件主要為系統(tǒng)的狀態(tài)監(jiān)控、異常處理以及接口轉(zhuǎn)換等功能,在調(diào)試穩(wěn)定后不需要進(jìn)行升級(jí),所以協(xié)FPGA的程序單獨(dú)固化在啟動(dòng)PROM中。
固件啟動(dòng)流程如圖5所示,子系統(tǒng)中的工作流程如下:上電后主DSP會(huì)自動(dòng)從Flash中加載程序,DSP啟動(dòng)完成后首先從Flash中讀取主FPGA的比特流,并通過EMIF總線發(fā)送給協(xié)FPGA,協(xié)FPGA將比特流轉(zhuǎn)換為SelectMap的時(shí)序,完成對(duì)主FPGA的配置與啟動(dòng)。
圖5 固件啟動(dòng)流程
主DSP固件和主FPGA固件是存儲(chǔ)在Flash中的,如何避免異常情況導(dǎo)致固件錯(cuò)誤是必須要研究的課題。硬件協(xié)議棧中的層層校驗(yàn)和回讀確認(rèn)已經(jīng)能保證固件數(shù)據(jù)的正確性,還有一種異常情況則是在燒寫Flash的過程中系統(tǒng)斷電或不可抗力等因素導(dǎo)致固件沒有燒寫完成,這時(shí)Flash中的固件數(shù)據(jù)不完整,再次上電時(shí)主DSP和主FPGA任意一個(gè)不能完成啟動(dòng),子系統(tǒng)將失去再次升級(jí)固件的能力,這時(shí)需要插入JTAG燒寫程序才能再次恢復(fù),這在大的系統(tǒng)聯(lián)調(diào)時(shí)是不被允許的,冗余備份則能有效解決該問題。
Flash固件存儲(chǔ)結(jié)構(gòu)如圖6所示,F(xiàn)lash的存儲(chǔ)空間被一分為二,因?yàn)镕lash的地址總線最高位是由協(xié)FPGA控制的(參見圖1或3),在子系統(tǒng)掛入大系統(tǒng)之前,黃金固件區(qū)和更新固件區(qū)均要燒寫好相同的固件。當(dāng)系統(tǒng)級(jí)固件升級(jí)時(shí),一般只是把固件燒寫到更新固件區(qū),這樣黃金固件區(qū)的固件會(huì)始終保持完整,即使更新固件區(qū)的固件被損壞,子系統(tǒng)也能利用黃金固件區(qū)的固件完成啟動(dòng)。當(dāng)需要升級(jí)黃金固件區(qū)的固件時(shí),主DSP需要向協(xié)FPGA申請(qǐng)獲得Flash最高地址位的控制權(quán),并且升級(jí)時(shí)需要保證更新固件區(qū)固件的完整性。
圖6 Flash固件存儲(chǔ)結(jié)構(gòu)
主備份的切換啟動(dòng)是由協(xié)FPGA來控制的,因?yàn)镕lash地址總線的最高位和DSP的硬件復(fù)位信號(hào)均由協(xié)FPGA控制(參見圖1或3),具體工作原理如下。
協(xié)FPGA內(nèi)部有一個(gè)狀態(tài)監(jiān)測(cè)看門狗,它是一個(gè)定時(shí)器,上電以后開始計(jì)時(shí)。主DSP軟件需要間隔固定時(shí)間向狀態(tài)監(jiān)測(cè)看門狗上報(bào)狀態(tài),當(dāng)任一固件啟動(dòng)失敗時(shí),主DSP不能在規(guī)定的間隔時(shí)間內(nèi)向狀態(tài)監(jiān)測(cè)看門狗上報(bào)狀態(tài),此時(shí)狀態(tài)監(jiān)測(cè)看門狗將翻轉(zhuǎn)Flash地址總線最高位的電平以切換固件區(qū),并控制主DSP復(fù)位,主DSP復(fù)位后就可以從新的固件區(qū)重新開始啟動(dòng),其具體流程如圖7所示。
基于FPGA構(gòu)架的固件升級(jí)系統(tǒng)在某型號(hào)相控陣?yán)走_(dá)上通過了驗(yàn)證,相控陣?yán)走_(dá)由一百多個(gè)FPGA子系統(tǒng)構(gòu)成,雷達(dá)在系統(tǒng)聯(lián)調(diào)時(shí)會(huì)對(duì)子系統(tǒng)的固件或參數(shù)進(jìn)行反復(fù)的升級(jí)和配置,使系統(tǒng)完成功能或達(dá)到最佳性能。該升級(jí)系統(tǒng)可有效支持雷達(dá)各子系統(tǒng)固件一鍵升級(jí),也可只對(duì)一個(gè)或幾個(gè)指定的子系統(tǒng)進(jìn)行固件升級(jí),并且可利用系統(tǒng)靈活的特性對(duì)每個(gè)子系統(tǒng)進(jìn)行參數(shù)的差異化配置,大大減少了系統(tǒng)的調(diào)試工作量,加快了聯(lián)調(diào)進(jìn)度。
圖7 冗余備份切換機(jī)制工作流程
通過實(shí)踐驗(yàn)證了基于FPGA構(gòu)架的固件升級(jí)系統(tǒng)設(shè)計(jì)的正確性。該設(shè)計(jì)具有快捷、高效、靈活、穩(wěn)定的特性,同時(shí)能兼顧系統(tǒng)應(yīng)用的高速通信,非常適合大規(guī)模使用FPGA構(gòu)建的系統(tǒng),可以減少系統(tǒng)聯(lián)調(diào)的工作量,提高效率,具備良好的推廣與借鑒價(jià)值。