• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于SiTCP通信協議的FPGA可回滾遠程固件更新方法

      2020-11-17 08:40:36
      核技術 2020年11期
      關鍵詞:電子學固件狀態(tài)機

      陳 長 王 錚 胡 俊

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

      2(中國科學院大學 北京 100049)

      3(核探測與核電子學國家重點實驗室 北京 100049)

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

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

      1 背景介紹

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

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

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

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

      2 方法及實現

      本設計在FPGA內實現純硬件的TCP/IP網絡協議,結合Xilinx 的QuickBoot 功能,無需外部額外硬件配合,實現遠程通過網絡協議更新FPGA 固件的目標。同時調整Flash內固件存儲的結構,添加跳轉指令和一塊存放早前版本固件的區(qū)域,實現故障情況下的回滾功能;更新出錯后,下次上電會加載早前正確版本的固件。

      2.1 硬件設計

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

      圖1 測試板實物圖Fig.1 Photograph of a test board

      2.2 FPGA固件設計

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

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

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

      1)查詢指定寄存器的值,確定是否開始遠程更新操作。

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

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

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

      5)CRC 校驗通過后,進行寫跳轉指令的操作,更新完成。

      圖2 遠程更新狀態(tài)機跳轉示意圖Fig.2 State transition diagram of the remote update process

      SPI 接口模塊是一個串行/解串器,接收狀態(tài)機的8 bit 數據輸出,以串行方式輸出到Flash 的DQ0管腳。模塊輸出的Flash讀寫時鐘spiclk需要通過原語STARTUPE2連接到FPGA專用管腳CCLK上,再連接到Flash,用于驅動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固件設計完成后,用Xilinx提供的ISE設計軟件生成bit文件,該文件可寫入FPGA片內RAM用于直接加載,但掉電后會丟失固件信息;也可進一步生成mcs 文件寫入Flash 中,掉電后不會丟失,FPGA將在上電后自動加載Flash中的固件信息。

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

      圖4 實現回滾功能所需的固件結構,跳轉指令是否存在將決定加載方向Fig.4 Firmware structure for rollback function,existence of switch word determines FPGA loading process

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

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

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

      3 功能測試

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

      安全回滾功能的測試,以在更新過程中斷掉電源的方式進行。經多次驗證,在更新過程中不同時點掉電(發(fā)生異常),再次上電后FPGA 均可以回滾到早前版本的固件,不至于無法工作。

      4 結語

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

      猜你喜歡
      電子學固件狀態(tài)機
      《量子電子學報》征稿簡則
      《量子電子學報》征稿簡則
      《量子電子學報》征稿簡則
      《量子電子學報》征稿簡則
      基于有限狀態(tài)機的交會對接飛行任務規(guī)劃方法
      基于固件的遠程身份認證
      提取ROM固件中的APP
      電腦愛好者(2015年7期)2015-04-09 08:54:02
      一種通過USB接口的可靠固件升級技術
      奧林巴斯XZ—2新固件升級
      中國攝影(2014年1期)2014-02-24 01:50:23
      FPGA設計中狀態(tài)機安全性研究
      黑龍江科學(2011年2期)2011-03-14 00:39:36
      襄樊市| 北川| 皋兰县| 河北省| 峡江县| 临泽县| 德格县| 林口县| 进贤县| 平武县| 荣昌县| 天等县| 寻甸| 湄潭县| 三穗县| 梁河县| 蓬溪县| 原阳县| 平武县| 四子王旗| 黎城县| 新平| 韶关市| 元谋县| 常宁市| 东宁县| 齐河县| 夏邑县| 松阳县| 兴隆县| 开江县| 华安县| 镇沅| 崇州市| 尼木县| 咸阳市| 应城市| 兴隆县| 阿瓦提县| 鹤壁市| 方正县|