国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SiTCP通信協(xié)議的FPGA可回滾遠(yuǎn)程固件更新方法

2020-11-17 08:40長(zhǎng)
核技術(shù) 2020年11期
關(guān)鍵詞:電子學(xué)狀態(tài)機(jī)固件

陳 長(zhǎng) 王 錚 胡 俊

1(中國(guó)科學(xué)院高能物理研究所 北京 100049)

2(中國(guó)科學(xué)院大學(xué) 北京 100049)

3(核探測(cè)與核電子學(xué)國(guó)家重點(diǎn)實(shí)驗(yàn)室 北京 100049)

在大型高能物理實(shí)驗(yàn)領(lǐng)域,探測(cè)器的集成度越來(lái)越高,對(duì)后端讀出電子學(xué)數(shù)據(jù)處理及數(shù)據(jù)傳輸能力的要求也越來(lái)越高;現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)作為可編程器件以其強(qiáng)大的數(shù)據(jù)處理能力、豐富的高速數(shù)字接口設(shè)計(jì)和靈活的功能實(shí)現(xiàn),成為高能物理實(shí)驗(yàn)電子學(xué)系統(tǒng)中的核心器件之一。常用的FPGA多屬于掉電易失器件,每次上電時(shí)都需要從板上Flash存儲(chǔ)器加載固件到片上內(nèi)存(Random Access Memory,RAM)才能實(shí)現(xiàn)相應(yīng)功能。

需要更新固件時(shí),專用上位機(jī)軟件通過(guò)JTAG(Joint Test Action Group)加載器將數(shù)據(jù)發(fā)送給FPGA,對(duì)Flash 進(jìn)行編程,修改存儲(chǔ)內(nèi)容;再次上電時(shí) ,F(xiàn)PGA 從 Flash 內(nèi)加載更新后的固件。JTAG 加載器還能直接向FPGA的片內(nèi)RAM發(fā)送固件,這種方式耗時(shí)更少,但重新上電后內(nèi)容丟失。這兩種方式都需要在現(xiàn)場(chǎng)通過(guò)線纜接到電路板上的預(yù)留JTAG接口進(jìn)行操作,而大型高能物理實(shí)驗(yàn)的探測(cè)器和電子學(xué)系統(tǒng)往往安裝在地下、水下、輻射場(chǎng)等特殊環(huán)境中;因此,使用傳統(tǒng)的專用JTAG 線纜對(duì)單個(gè)FPGA進(jìn)行更新變得不再合適。

1 背景介紹

大型高能物理實(shí)驗(yàn)的電子學(xué)系統(tǒng)中普遍實(shí)現(xiàn)了FPGA 遠(yuǎn)程更新功能。北京譜儀第三代(Beijing Spectrometer,BESIII)改造工程的Muon鑒別器電子學(xué)讀出系統(tǒng)采用了PLD(Programmable Logic Device)器件控制的Multi-Passive Serial配置方式[1]:更新固件通過(guò)VME(Versa Module Eurocard)總線發(fā)送給接口FPGA,對(duì)其附屬的Flash 進(jìn)行編程;接口FPGA 再向各條鏈路的主控FPGA 發(fā)送固件,主控FPGA 完成對(duì)其附屬Flash 的編程;最后每條鏈路的主控FPGA 向各電子學(xué)插件下發(fā)固件,完成665 塊FPGA的更新。

CMS(Compact Muon Solenoid)實(shí)驗(yàn)的電磁量能器off-detector 電子學(xué)系統(tǒng)共有738 塊使用FPGA的電路板,研究人員設(shè)計(jì)了JTAG 分發(fā)板(JTAG Distribution Board,JDB),它和其他電子學(xué)插件都安裝在VME機(jī)箱內(nèi);JDB作為電腦和需要遠(yuǎn)程更新的電路板之間的橋梁,電腦連接到JDB,通過(guò)VME 機(jī)箱背板的MTM(Module Test and Maintenance)總線來(lái)連接其他插件,或者由JDB 直接接出多根JTAG信號(hào)線到其他插件[2]。

ITER(International Thermonuclear Experimental Reactor)實(shí)驗(yàn)由于處于強(qiáng)中子輻射場(chǎng),其電子學(xué)系統(tǒng) 主 控 板 通 過(guò) PCIe(Peripheral Component Interconnect express)鏈路連接到上位機(jī),由上位機(jī)接收遠(yuǎn)端發(fā)來(lái)的更新固件并下發(fā)給FPGA[3]。江門中微子實(shí)驗(yàn)(Jiangmen Underground Neutrino Observatory,JUNO)為了精確采集波形而采用了源端數(shù)字化方案,整個(gè)讀出電子學(xué)系統(tǒng)包含近7 000塊電路板,密封置于水下靠近探測(cè)器的位置。該電路板上使用一塊較小的FPGA 作為控制器,通過(guò)網(wǎng)絡(luò)接收固件,專用于給主FPGA 進(jìn)行更新[4]。其他如北京同步輻射裝置上實(shí)驗(yàn)站的像素探測(cè)器讀出系統(tǒng),也因?yàn)樘幱谳椛洵h(huán)境而采用基于XVC(Xilinx Virtual Cable)技術(shù)的遠(yuǎn)程更新方法[5],利用ARM 處理器模擬JTAG時(shí)序?qū)PGA片內(nèi)RAM進(jìn)行配置。

綜上所述,現(xiàn)有的FPGA遠(yuǎn)程更新方法,一般需要額外的器件或設(shè)備,如PLD、ARM等,增加了硬件設(shè)計(jì)復(fù)雜度和成本;額外器件也降低了系統(tǒng)的可靠性,如更新過(guò)程中額外輔助器件出錯(cuò)且無(wú)法恢復(fù),將造成無(wú)法修復(fù)的系統(tǒng)崩潰。本文提出并實(shí)現(xiàn)了一種基 于 SiTCP(Silicon Transmission Control Protocol)協(xié)議的可回滾遠(yuǎn)程更新方法,利用板上現(xiàn)有的數(shù)據(jù)傳輸接口,無(wú)需額外硬件;且?guī)в邪踩珯C(jī)制,保證FPGA能從更新故障中恢復(fù),提高可靠性。

2 方法及實(shí)現(xiàn)

本設(shè)計(jì)在FPGA內(nèi)實(shí)現(xiàn)純硬件的TCP/IP網(wǎng)絡(luò)協(xié)議,結(jié)合Xilinx 的QuickBoot 功能,無(wú)需外部額外硬件配合,實(shí)現(xiàn)遠(yuǎn)程通過(guò)網(wǎng)絡(luò)協(xié)議更新FPGA 固件的目標(biāo)。同時(shí)調(diào)整Flash內(nèi)固件存儲(chǔ)的結(jié)構(gòu),添加跳轉(zhuǎn)指令和一塊存放早前版本固件的區(qū)域,實(shí)現(xiàn)故障情況下的回滾功能;更新出錯(cuò)后,下次上電會(huì)加載早前正確版本的固件。

2.1 硬件設(shè)計(jì)

本設(shè)計(jì)中的FPGA更新方式不依賴于外部硬件設(shè)計(jì),因此采用了一塊自設(shè)計(jì)的板卡。硬件電路包括一塊Xilinx XC7K325T系列FPGA,一塊用于存儲(chǔ)FPGA 固件的 Micron N25Q256A Flash 存儲(chǔ)器,外部接口為基于SFP(Small Form-factor Pluggable)的網(wǎng)絡(luò)接口,實(shí)物如圖1所示。

圖1 測(cè)試板實(shí)物圖Fig.1 Photograph of a test board

2.2 FPGA固件設(shè)計(jì)

FPGA 固件主要包括以下模塊:基于SiTCP 的網(wǎng)絡(luò)傳輸模塊、FIFO(First In First Out)緩存、遠(yuǎn)程更新的FSM(Finite State Machine)狀態(tài)機(jī)和控制Flash讀寫的SPI(Serial Peripheral Interface)接口[6]。

SiTCP 協(xié)議[7]是一款商用的、基于硬件的 TCP/IP 協(xié)議,用FPGA 硬件描述語(yǔ)言的代碼和Xilinx 的IP 核實(shí)現(xiàn)了從傳輸層到數(shù)據(jù)鏈路層的功能,因而不需要MAC(Media Access Control)硬件控制器。本設(shè)計(jì)中,使用FPGA 的高速數(shù)字接口GTX(Gigabyte Transceiver)作為物理層的 PHY(Physical)接口,因此無(wú)需外部額外的PHY 芯片,從而完全在FPGA 內(nèi)實(shí)現(xiàn)了硬件的TCP/IP 協(xié)議。這種基于FPGA 實(shí)現(xiàn)TCP/IP 協(xié)議的方法,無(wú)需額外以太網(wǎng)芯片,降低了硬件設(shè)計(jì)復(fù)雜度和成本,有較好的靈活性,被一些高能物理實(shí)驗(yàn)的電子學(xué)讀出系統(tǒng)所采用[8-9]。

經(jīng)SiTCP 解析后的數(shù)據(jù),以8 bit 的長(zhǎng)度送入FIFO 進(jìn)行緩存,然后以32 bit 的長(zhǎng)度送給FSM 狀態(tài)機(jī)。作為遠(yuǎn)程更新功能的核心控制模塊,狀態(tài)機(jī)完成以下功能,其狀態(tài)轉(zhuǎn)換如圖2所示。

1)查詢指定寄存器的值,確定是否開(kāi)始遠(yuǎn)程更新操作。

2)遠(yuǎn)程更新開(kāi)始后,先執(zhí)行擦除Flash內(nèi)跳轉(zhuǎn)指令的動(dòng)作。跳轉(zhuǎn)指令的作用是當(dāng)FPGA加載到此處時(shí),指定跳轉(zhuǎn)到特定位置繼續(xù)加載。所以當(dāng)跳轉(zhuǎn)指令存在時(shí),F(xiàn)PGA會(huì)跳轉(zhuǎn)到更新區(qū)域去加載固件;反之則會(huì)在當(dāng)前位置繼續(xù)向后加載,讀取到的就是回滾區(qū)域內(nèi)的早前版本的固件。因此跳轉(zhuǎn)指令是保證更新異常后FPGA仍能正常工作的關(guān)鍵。

3)擦除更新區(qū)域的內(nèi)容;接收上位機(jī)發(fā)送的固件數(shù)據(jù),寫入更新區(qū)域。

4)回讀更新區(qū)域的內(nèi)容,計(jì)算CRC(Cyclic Redundancy Check)校驗(yàn)值,并與寫在更新區(qū)域末尾的校驗(yàn)值進(jìn)行比較。

5)CRC 校驗(yàn)通過(guò)后,進(jìn)行寫跳轉(zhuǎn)指令的操作,更新完成。

圖2 遠(yuǎn)程更新?tīng)顟B(tài)機(jī)跳轉(zhuǎn)示意圖Fig.2 State transition diagram of the remote update process

SPI 接口模塊是一個(gè)串行/解串器,接收狀態(tài)機(jī)的8 bit 數(shù)據(jù)輸出,以串行方式輸出到Flash 的DQ0管腳。模塊輸出的Flash讀寫時(shí)鐘spiclk需要通過(guò)原語(yǔ)STARTUPE2連接到FPGA專用管腳CCLK上,再連接到Flash,用于驅(qū)動(dòng)Flash讀寫,如圖3所示。

圖3 spiclk共享FPGA專用管腳CCLK連接示意圖Fig.3 Block diagram for user spiclk pin connected to FPGA dedicated CCLK pin using Xilinx STARTUPE2 primitive

2.3 FPGA固件的生成與處理

FPGA固件設(shè)計(jì)完成后,用Xilinx提供的ISE設(shè)計(jì)軟件生成bit文件,該文件可寫入FPGA片內(nèi)RAM用于直接加載,但掉電后會(huì)丟失固件信息;也可進(jìn)一步生成mcs 文件寫入Flash 中,掉電后不會(huì)丟失,F(xiàn)PGA將在上電后自動(dòng)加載Flash中的固件信息。

為了實(shí)現(xiàn)回滾功能,需要在生成mcs 文件時(shí)進(jìn)行一些特殊處理。普通的mcs文件只包含一塊存放固件的區(qū)域,本設(shè)計(jì)中的mcs文件包含兩塊區(qū)域(回滾和更新區(qū)域)及跳轉(zhuǎn)指令,示意圖見(jiàn)圖4。首先,將這份包含跳轉(zhuǎn)指令、回滾區(qū)域和更新區(qū)域的固件通過(guò)傳統(tǒng)的JTAG方式下載到Flash。當(dāng)需要更新固件時(shí),新的固件也要含有§2.2 中所述的必要FPGA功能模塊,且狀態(tài)機(jī)內(nèi)的更新區(qū)域起始地址保持不變。由于mcs文件中不僅包含要寫入Flash的數(shù)據(jù),還有地址和校驗(yàn)位;而新的固件會(huì)在狀態(tài)機(jī)的控制下寫入特定的Flash地址,因此需要生成不含地址和校驗(yàn)位的bin文件,用于上位機(jī)向FPGA發(fā)送。

圖4 實(shí)現(xiàn)回滾功能所需的固件結(jié)構(gòu),跳轉(zhuǎn)指令是否存在將決定加載方向Fig.4 Firmware structure for rollback function,existence of switch word determines FPGA loading process

2.4 上位機(jī)固件發(fā)送程序

使用MATLAB 編寫發(fā)送程序,該軟件封裝了UDP 函數(shù),使用方便。寫好FPGA 的IP 地址和端口號(hào),即可建立UDP 連接。以讀的形式打開(kāi)bin 二進(jìn)制文件,遍歷文件以獲取字節(jié)數(shù)。按照SiTCP 的UDP 包格式[7]來(lái)組裝要發(fā)送的數(shù)據(jù),設(shè)置一個(gè)包內(nèi)的數(shù)據(jù)長(zhǎng)度,按照數(shù)據(jù)長(zhǎng)度讀取二進(jìn)制文件,向FPGA 進(jìn)行發(fā)送。程序流程圖如圖5 所示。FPGA解析得到數(shù)據(jù)后由兩個(gè)功能模塊分別完成Flash 編程的狀態(tài)控制,以及與Flash的SPI接口功能。

圖5 上位機(jī)固件發(fā)送程序流程圖Fig.5 Flow chart of MATLAB sender in host computer

3 功能測(cè)試

按照§2.3 的步驟生成一份三段式的固件,通過(guò)JTAG 方式下載到Flash 并加載到FPGA。撥動(dòng)板上撥碼開(kāi)關(guān)以置位寄存器,開(kāi)始遠(yuǎn)程更新流程。等待Flash 擦除操作完成后,上位機(jī)運(yùn)行MATLAB程序,通過(guò)網(wǎng)絡(luò)協(xié)議向FPGA發(fā)送一個(gè)版本號(hào)和功能均不同的更新固件,開(kāi)始寫Flash。CRC校驗(yàn)以及寫跳轉(zhuǎn)指令完成后,一系列寄存器會(huì)置位以表示不同的狀態(tài),如CRC校驗(yàn)是否通過(guò)、跳轉(zhuǎn)指令是否寫入、更新是否完成,以及一系列錯(cuò)誤提示如超時(shí)等。提示更新正常完成且無(wú)錯(cuò)誤指示,重新上電;可見(jiàn)LED 以不同的方式閃爍,使用Xilinx 的iMPACT 軟件讀取到正確的自定義版本號(hào)UserID,說(shuō)明遠(yuǎn)程更新成功。

安全回滾功能的測(cè)試,以在更新過(guò)程中斷掉電源的方式進(jìn)行。經(jīng)多次驗(yàn)證,在更新過(guò)程中不同時(shí)點(diǎn)掉電(發(fā)生異常),再次上電后FPGA 均可以回滾到早前版本的固件,不至于無(wú)法工作。

4 結(jié)語(yǔ)

本文介紹了一種帶有回滾功能的FPGA遠(yuǎn)程更新方法。該方法基于SiTCP 通信協(xié)議,由上位機(jī)向FPGA 發(fā)送更新固件,對(duì)Flash 進(jìn)行編程,無(wú)需增加額外以太網(wǎng)芯片或輔助器件。它有以下特點(diǎn):利用FPGA自身資源實(shí)現(xiàn)PHY和MAC芯片的功能,不需要額外芯片且具有靈活性,降低了硬件設(shè)計(jì)成本和復(fù)雜度;帶有保障機(jī)制,更新異常時(shí)可以回滾到安全的版本正常工作,提高了可靠性;對(duì)于使用SiTCP作為網(wǎng)絡(luò)傳輸協(xié)議的電子學(xué)系統(tǒng),不需要集成其它通信協(xié)議;采用UDP 協(xié)議發(fā)送固件,能利用廣播向多個(gè)FPGA發(fā)送,具有擴(kuò)展性。

猜你喜歡
電子學(xué)狀態(tài)機(jī)固件
《量子電子學(xué)報(bào)》征稿簡(jiǎn)則
《量子電子學(xué)報(bào)》征稿簡(jiǎn)則
《量子電子學(xué)報(bào)》征稿簡(jiǎn)則
《量子電子學(xué)報(bào)》征稿簡(jiǎn)則
FPGA狀態(tài)機(jī)綜合可靠性探究 ①
基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
基于Spring StateMachine的有限狀態(tài)機(jī)應(yīng)用研究
基于固件的遠(yuǎn)程身份認(rèn)證
谷歌公司推出計(jì)算機(jī)固件分析工具幫助用戶阻止惡意軟件入侵
英特爾發(fā)布免費(fèi)固件引擎
临武县| 吉隆县| 西平县| 广河县| 永仁县| 桂平市| 双城市| 梨树县| 象州县| 民乐县| 都安| 盖州市| 松溪县| 德阳市| 那坡县| 临高县| 徐闻县| 邵阳市| 泉州市| 浙江省| 连云港市| 博客| 龙山县| 方正县| 平安县| 蒲城县| 陆河县| 康平县| 色达县| 河间市| 鄄城县| 德昌县| 深州市| 诸城市| 尼木县| 博野县| 莱芜市| 鄱阳县| 北宁市| 北京市| 汉中市|