閆成亮 曹鳳才 岳鳳英
摘? 要: 北斗衛(wèi)星導航信號接收機分布較為廣泛,地處偏遠,而且機箱內(nèi)部芯片的程序又需要及時更新,這就造成了開發(fā)維護人員不能及時、方便地對芯片內(nèi)的程序進行更新的問題。從環(huán)境的約束、人力成本、便利性等角度考慮,在這種情況下,以常規(guī)的方式對設備中的芯片進行軟件更新是難以實現(xiàn)的。為了解決這個問題,提出基于ZYNQ的遠程并行固化設計,在Linux運行環(huán)境下,利用遠程計算機、FPGA和以太網(wǎng)通信組成一種遠程并行固化系統(tǒng),對FLASH中的程序進行固化更新。系統(tǒng)目前已在實際中得到應用,極大地提升了開發(fā)人員的效率,節(jié)省了大量的人力成本,具有很高的實際應用價值。
關鍵詞: 遠程程序; 并行固化設計; 程序更新; 控制模塊設計; 軟件設計; 系統(tǒng)測試
中圖分類號: TN927?34; TP274? ? ? ? ? ? ? ? ? ?文獻標識碼: A? ? ? ? ? ? ? ? ? ? ? 文章編號: 1004?373X(2020)10?0038?05
ZYNQ?based parallel curing design for remote program
YAN Chengliang, CAO Fengcai, YUE Fengying
(School of Electrical and Control Engineering, North University of China, Taiyuan 030051, China)
Abstract: The Beidou satellite navigation signal receiver is widely distributed and located in remote areas, and the program of chip in its crate needs to be updated timely, which makes it impossible for developers and maintainers to update the program inside the chip timely and conveniently. In consideration of the environment′s constraint, labor cost and convenience, it is difficult to achieve the software update of the chip in the device in the usual way. A remote program parallel curing design based on ZYNQ is proposed to solve above problems. A remote parallel curing system is composed of remote computer, FPGA and Ethernet communication in the Linux operating environment to cure and update the programs in FLASH. This system has been applied in practice, which has greatly improved the developers′ working efficiency and saved a lot of labor cost.
Keywords: remote program; parallel curing design; program update; control module design; software design; system test
0? 引? 言
隨著“一帶一路”建設對北斗導航衛(wèi)星沿線國家服務的需要,需要在全球范圍內(nèi)部署地面接收機。因國防技術發(fā)展的日新月異,北斗精度算法不斷迭代,需要對已經(jīng)完成全球部署的地面接收機實時進行功能更新,以滿足我軍技術的不斷發(fā)展。已經(jīng)部署在全球的地面接收機,如赤道、沙漠、南北極等,設備數(shù)量龐大,人工實地軟件升級成本巨大。北斗地面接收機具有基于軟件定義的無線通信協(xié)議而非通過硬連線實現(xiàn)。頻帶、空中接口協(xié)議和功能可通過軟件遠程下載和更新來升級,而不用更換硬件。為滿足當前地面接收機發(fā)展需求,設計基于ZYNQ的遠程程序并行固化系統(tǒng)。
ZYNQ?7000可擴展處理平臺是賽靈思新一代FPGA(Artix?7與Kintex?7系列FPGA)所采用的最新系列產(chǎn)品。該芯片可編程邏輯可由用戶配置,并通過“互連”一起,這樣可以提供用戶自定義的任意邏輯功能,從而擴展處理系統(tǒng)的性能及功能[1]。且該芯片采用帶有NEON及雙精度浮點引擎的雙核ARM Cortex?A9 MPCore處理系統(tǒng),該系統(tǒng)通過硬連線完成了包括L1,L2緩存、存儲器控制器以及常用外設在內(nèi)的全面集成,該處理系統(tǒng)不僅能在開機時啟動,并運行各種獨立于可編程邏輯的操作系統(tǒng),而且還可根據(jù)需要配置可編程邏輯。ZYNQ?7000主要包含PS(Processing System)和PL(Programmable Logic)兩部分,將ARM CPU和外設集成在一個芯片內(nèi),使得ZYNQ?7000系列具有處理器和FPGA的雙重特性,適用軟硬件協(xié)同設計。相對于ARM與FPGA結(jié)合的系統(tǒng)[2],其優(yōu)勢主要為以下幾點:
1) 高集成度、高性能、低功耗。導航信號接收機分布在世界各地,其中不乏炎熱、干旱地區(qū),機箱內(nèi)溫度過高會影響系統(tǒng)運行的穩(wěn)定性。
2) PS與PL間的高速數(shù)據(jù)傳輸協(xié)議。PS與PL間通過AXI總線協(xié)議進行數(shù)據(jù)傳輸。AXI總線協(xié)議具有低延遲、數(shù)據(jù)吞吐能力強的特性,最大帶寬可達1 200 MB/s,極大地提高了PS與PL之間的數(shù)據(jù)傳輸速率。
3) PS端將接收到的配置文件按照數(shù)據(jù)協(xié)議直接寫入PL端不同地址中,免去了FPGA在控制固化不同的板卡時檢測板卡ID號的步驟,釋放了更多的引腳資源。
1? 并行固化總體方案
1.1? 系統(tǒng)概述
采集主板上的ZYNQ?7000芯片作為系統(tǒng)的主控核心,其ARM端(Linux運行環(huán)境[3?4])通過TCP/IP協(xié)議與遠程計算機進行通信[5],接收配置文件并解包,根據(jù)數(shù)據(jù)包中不同的板卡號將配置文件通過AXI?Lite總線接口寫到主板的PL層的邏輯單元地址中。FPGA端在地址中讀取該板卡的配置文件,對其解包后根據(jù)包格式中的FLASH號將配置文件固化到對應的FLASH中。同時將地址中對應信號處理板的配置文件取出,通過LVDS協(xié)議轉(zhuǎn)發(fā)至每塊信號處理板中,由信號處理板中的ZYNQ芯片對其進行讀寫FLASH操作。系統(tǒng)功能架構如圖1所示。數(shù)據(jù)流向圖如圖2所示。
1.2? 硬件電路構成
本系統(tǒng)由信號采集傳輸板卡、高速傳輸背板、信號處理板構成。其中采集傳輸主板由Xilinx的ZYNQ?7000系列芯片XC7Z015作為系統(tǒng)的控制核心。一片Xilinx公司的XC7K410T和一片XC7K325T Kintex?7系列芯片作為被配置FPGA,三片TI的TMS320C6655芯片作為被配置DSP,實現(xiàn)數(shù)字信號處理的輔助計算和通信功能,一片PHY芯片作為網(wǎng)口通信的協(xié)議通信芯片[6?7]。高速傳輸背板的功能是負責信號采集傳輸主板和信號處理板的板間高速互連和電源分配。
信號處理板由Xilinx的ZYNQ?7000系列芯片XC7Z015作為系統(tǒng)的控制核心。一片Xilinx公司的XC7K410T芯片作為被配置FPGA,兩片TI公司的TMS320C6747芯片作為被配置DSP。
本設計使用恒憶公司設計生產(chǎn)的FLASH存儲模塊N25Q128芯片作為被固化存儲設備,通過SPI串行總線接口配置芯片讀/寫,128 MB數(shù)據(jù)存儲空間,最高支持108 MHz時鐘頻率。在每塊板卡中都有一片接口模擬開關TS3L301DGG,用于切換寫FLASH和從FLASH中加載程序。
1.3? ARM與FPGA數(shù)據(jù)傳輸
綜合考慮系統(tǒng)的傳輸類型、傳輸速度需求以及功耗等各個因素,ARM與FPGA端的通信協(xié)議選擇AXI4?Lite協(xié)議,其通常用于允許由某種形式的CPU或微控制器控制設計。使用VIVADO軟件自定義ZYNQ的IP核,利用AXI4?Lite總線將ZYNQ核與編碼模塊連接到一起,并為IP核添加編碼模塊到FPGA端的地址和數(shù)據(jù)通道。自定義ARM的IP核如圖3所示。
其中l(wèi)ocal_wrcs[15:0],local_rdcs[15:0]分別為寫、讀片選信號;local_wren,local_rden分別為寫、讀使能信號;local_wradd[31:0],local_wrdat[31:0]分別為寫地址、寫數(shù)據(jù)通道;local_rdadd[31:0],local_rddat[511:0]為讀地址、讀數(shù)據(jù)通道;local_rdvad[15:0]為讀數(shù)據(jù)有效信號。
主板中ZYNQ芯片的ARM端作為master,F(xiàn)PGA端作為slave,通過AXI?Lite協(xié)議將配置文件發(fā)送到FPGA端。ARM調(diào)用寫函數(shù)時自定義IP地址映射為0x4000_0000,為每一塊板卡分配不同的地址空間。采用AXI4?Lite協(xié)議的突發(fā)式讀寫模式,master模塊通過讀地址通道發(fā)出寄存器的地址值,然后通過讀數(shù)據(jù)通道讀取slave模塊對應done信號地址空間中的done信號值,若done信號為0,master模塊則根據(jù)遠程計算機發(fā)送的數(shù)據(jù)包協(xié)議,通過寫地址通道和寫數(shù)據(jù)通道將每塊板卡的配置文件地址值和配置數(shù)據(jù)發(fā)送到slave模塊,slave模塊接收到數(shù)據(jù)后對配置數(shù)據(jù)進行解包,完成固化并返回固化完成的done信號,并將done信號寫到對應的讀地址空間中。master模塊通過讀地址通道發(fā)出寄存器地址值,讀取slave端返回的done信號為1,停止發(fā)送對應板卡的配置文件。
1.4? FLASH控制模塊設計
FPGA與FLASH之間的數(shù)據(jù)傳輸采用串行SPI接口[8?10]。時鐘由FPGA 控制,在時鐘移位脈沖下,數(shù)據(jù)按位傳輸,高位(MSB)在前,低位(LSB)在后;SPI接口有兩根單向數(shù)據(jù)線,為全雙工通信,目前應用中的數(shù)據(jù)速率可達幾Mb/s的水平,能滿足本設計傳輸速率的需要。在向FLASH中寫配置文件時,由XC7Z015通過模擬開關TS3L301DGG選通XC7Z015到N25Q128芯片通路,并通過片選信號選中目標FLASH,此時由XC7Z015通過SPI接口向N25Q128中寫入數(shù)據(jù);當從FLASH中啟動已經(jīng)固化的程序時,通過模擬開關選通XC7K325T到N25Q128芯片通路,實現(xiàn)由上位機軟件控制程序加載。主控芯片XC7Z015、被配置芯片XC7K325T、存儲元件N25Q128之間的連接原理圖如圖4所示。
在對FLASH進行寫操作時,必須嚴格按照FLASH的時序控制信號進行。在FLASH上電后,首先對FLASH進行初始化操作,將指定區(qū)域進行擦除操作,主板FPGA將ARM端寫入FPGA地址的配置文件寫入數(shù)據(jù)緩存隊列(First Input First Output,F(xiàn)IFO)中,根據(jù)數(shù)據(jù)包協(xié)議,設置FIFO位寬為32,為防止FIFO溢出,設置FIFO的深度為8 192。當主板FPGA檢測到對應主板配置文件的FIFO非空時,開始按照數(shù)據(jù)手冊中的時序圖通過SPI接口向FLASH中寫入配置數(shù)據(jù)。
N25Q128的寫時序圖如圖5所示,首先拉低片選信號CS,在時鐘上升沿將指令寫入FLASH,在指令之后是24位的首地址,地址發(fā)送完成后開始寫入數(shù)據(jù),頁面編程一次最多能夠輸入256個字節(jié),大于256個字節(jié)時,保留最后輸入的數(shù)據(jù)。在輸入不全為0的首地址后,從首地址開始寫入數(shù)據(jù),直到該頁的最后,接著從下一頁的起始地址進行寫入,寫入數(shù)據(jù)完成后拉高片選信號。
在對FLASH進行讀操作時,N25Q128的讀時序圖如圖6所示,首先拉低片選信號CS,在時鐘上升沿向FLASH中寫入讀數(shù)據(jù)指令,讀數(shù)據(jù)指令寫完成后寫入24位的首地址,在寫入地址完成后,F(xiàn)LASH中的數(shù)據(jù)將按照輸入的首地址輸出數(shù)據(jù)。首地址數(shù)據(jù)輸出完成后地址自動增加,指向下一個地址,繼續(xù)輸出數(shù)據(jù),輸出數(shù)據(jù)完成后,拉高片選信號,讀FLASH完成。
2? 軟件設計
遠程計算機作為人機交互界面,承擔著連接網(wǎng)絡服務器,查詢和修改IP地址,選擇固化文件,復位、模擬上電,顯示下載進度和狀態(tài)信息等功能。開始固化時,遠程計算機根據(jù)軟件接口協(xié)議向下位機發(fā)送數(shù)據(jù)包,數(shù)據(jù)包中包含設備號、命令字、聯(lián)網(wǎng)模式、參數(shù)類型、工作模式、通道號、參數(shù)包長度、CRC校驗、參數(shù)包等內(nèi)容,每次發(fā)送配置文件的有效數(shù)據(jù)的長度為20 KB,經(jīng)實驗測得每次發(fā)包的間隔為15 ms。每當下位機接收到一個完整的配置文件后,向遠程計算機返回一個對應的完成指令,并且根據(jù)指令內(nèi)容打印下載進度。固化完成后,通過遠程計算機軟件發(fā)送模擬上電指令,由XC7Z015芯片控制從FLASH中加載程序。
2.1? 軟件接口協(xié)議
數(shù)據(jù)幀格式定義如圖7所示。
參數(shù)包具體數(shù)據(jù):第一個4 B為數(shù)據(jù)的包號;第二個4 B為參數(shù)包的校驗和;第三個4 B為參數(shù)包中有效數(shù)據(jù)長度,參數(shù)包大小以B為單位。
2.2? 下載和啟動程序
固化的過程,根據(jù)以下步驟進行:
1) 遠程計算機發(fā)送命令字和配置文件,發(fā)送命令字數(shù)據(jù)包、文件長度、文件CRC校驗到下位機,若下位機返回的數(shù)據(jù)長度、文件長度和CRC校驗成功,則上位機將配置文件下載到下位機,每個數(shù)據(jù)包的大小為20 KB;若校驗失敗則嘗試重新發(fā)送失敗指令。
2) 下位機將接收到來自遠程計算機發(fā)送的數(shù)據(jù)包進行解包,數(shù)據(jù)包的幀格式中包含配置文件對應的板卡號,并將配置數(shù)據(jù)進行存儲。
3) 下位機接收配置數(shù)據(jù)完成后檢測信號采集傳輸主板的FPGA端發(fā)送過來的done標志,若done標志為0,則根據(jù)不同的板卡號通過AXI接口向主板的PL層的邏輯單元地址中寫入配置文件,每包數(shù)據(jù)大小為32 bit。
4) 采集傳輸主板側(cè)的FPGA在地址中讀取該板卡的配置文件,對其解包后根據(jù)包格式中的FLASH號將配置文件固化到對應的FLASH中。同時將地址中對應信號處理板的配置文件取出,通過LVDS協(xié)議并行轉(zhuǎn)發(fā)至每塊信號處理板中,由信號處理板中的XC7Z015芯片對其解包,根據(jù)包格式中的FLASH號將固化文件寫入FLASH。
5) 當FPGA檢測到固化數(shù)據(jù)長度和文件長度一致時,向下位機返回done標志為1,此時下位機停止發(fā)送配置文件,并向遠程計算機返回固化完成信號,打印下載進度。
固化完成后,啟動FLASH中的程序需要對板卡進行掉電重啟或者由軟件控制對被配置芯片進行模擬上電。考慮到設備投放地點環(huán)境較為復雜且距離較遠,不方便研究人員的操作,所以采用軟件控制,由遠程計算機發(fā)送復位協(xié)議到下位機,下位機對數(shù)據(jù)包進行解包,通過XC7Z015芯片控制對其進行模擬上電,實現(xiàn)程序的在線加載,并且在加載的過程中不影響接收機正常工作。程序下載流程圖如圖8所示。
2.3? 多機箱并行固化
由于導航信號處理機箱可能處于全球不同的地理位置,分布范圍較大且數(shù)量較多,每次操控單個機箱會耗費科研人員大量的精力,致使其工作效率降低。因此,多機箱通過交換機同時并行固化的方案將會極大降低人力成本,提升工作效率。
ZYNQ的寄存器共有三個區(qū):Bank0,Bank1,Bank2,其中Bank0是ZYNQ的本地寄存器空間0x4000_0000~0x4000_0FFF。該分區(qū)用于對SPI FLASH的固化操作,在Bank0未被使用的地址空間中寫入每個機箱的初始IP地址。使用上位機連接機箱后,通過發(fā)送對應的修改IP指令,為每個機箱配置不同的IP地址。修改IP完成后,將多個機箱通過交換機連接到上位機后,即可同時為每個機箱發(fā)送配置文件,進行多機箱并行固化。
遠程計算機界面如圖9所示。
3? 系統(tǒng)測試
將boot.bin文件通過JTAG固化到信號采集傳輸主板和信號處理板中,固化完成后掉電重啟系統(tǒng)。將多個機箱通過交換機連接到遠程計算機,為每臺機箱配置不同的IP地址,并為待配置芯片選擇對應的配置文件,然后開始固化。系統(tǒng)測試時,為FPGA選擇的配置文件大小為28 MB,為DSP選擇的配置文件大小為3 MB。在串行測試的情況下,每個FPGA固化所用時間大約為10 min 25 s,每個DSP固化所用時間大約為2 min 14 s,整個機箱固化總共需要176 min左右,如果對多個機箱進行固化時,耗時非常多,將極大降低開發(fā)人員的工作效率。而在并行測試的情況下,由于各個芯片同時開始固化,固化所用時間與最大固化文件的大小以及下載文件時間有關,所以實際固化多個機箱時只需要大約11 min,并且固化過程中板卡內(nèi)原有的閃燈測試程序繼續(xù)運行。固化完成后,通過遠程計算機對各個板卡進行復位,然后對每個被固化的芯片進行模擬上電,遠程計算機界面更新芯片狀態(tài)顯示已經(jīng)固化,板卡上的閃燈已經(jīng)按照新的程序閃爍。
系統(tǒng)測試時間對比如表1所示。
4? 結(jié)? 語
本文設計開發(fā)一種在Linux系統(tǒng)下,利用上位機軟件、FPGA和以太網(wǎng)通信組成一種遠程程序并行固化系統(tǒng),對設備中的FLASH進行固化更新。與目前文獻中出現(xiàn)的在線并行固化FLASH方式有較大的技術突破,主要體現(xiàn)在以下幾點:
1) 在線并行固化。采用集ARM與FPGA結(jié)合的ZYNQ芯片,ARM與FPGA通過AXI總線協(xié)議,在使用時更靈活且數(shù)據(jù)傳輸速率更高。并且經(jīng)由ARM芯片直接將每個板卡的配置文件寫入到FPGA端不同的地址中,并且通過主板上的FPGA將不同地址中的配置文件通過LVDS總線協(xié)議分發(fā)到不同的板卡中,由每塊板卡上的FPGA芯片去控制FLASH讀寫。而通過FPGA檢測板卡號的方式首先需要在硬件上將控制板卡號的幾個引腳拉高或拉低,占用了過多的引腳資源,在開發(fā)此芯片的其他功能時可能會產(chǎn)生引腳沖突。
2) 啟動程序的時間可控。在FPGA的程序設計中,添加了復位模塊和模擬上電模塊。通過檢測接收到的數(shù)據(jù)進行解析,識別到復位協(xié)議或模擬上電指令時,通過FPGA發(fā)出相應的操作。并且在固化的過程中,芯片中的原有程序正常運行,使得接收機在升級過程中始終能夠正常工作。
3) 查詢和修改IP功能。地面的導航信號接收機分布在全球各地,并且在一個基站內(nèi)需要很多個機箱對數(shù)據(jù)進行接收處理。即使使用并行固化的方式,單獨為每個接收機進行升級需要的人力資源和時間也是十分龐大的。而查詢和修改IP的功能即可快速查詢基站內(nèi)的每個機箱配置的IP地址,并且為這些機箱配置不同的IP地址,然后將所有機箱通過交換機經(jīng)由以太網(wǎng)連接至遠程計算機,就能同時對接收機基站內(nèi)的機箱進行固化升級,節(jié)省大量的時間。
本系統(tǒng)已實際應用于導航信號接收機的升級,目前系統(tǒng)運行穩(wěn)定,多次對接收機機箱升級未出現(xiàn)異常情況。
參考文獻
[1] 龔行梁,周強,趙天恩,等.CAN總線實現(xiàn)的ZYNQ?7000程序在線升級方法 [J].單片機與嵌入式系統(tǒng)應用,2018(11):63?66.
[2] 林天靜,阮翔,劉春.基于FLASH控制器的FPGA在線加載功能設計[J].電子技術應用,2019,45(1):88?91.
[3] 夏凌云.嵌入式Linux通信軟件開發(fā)中的設計模式[J].數(shù)字通信世界,2017(11):67?68.
[4] 陳文偉,于卓智,張葉峰.基于Linux系統(tǒng)的智慧安全型專網(wǎng)無線通信模塊設計[J].電子設計工程,2019,27(5):121?126.
[5] 鄭述堂.基于以太網(wǎng)傳輸?shù)腇PGA在線配置[C]//全國第五屆信號和智能信息處理與應用學術會議??ǖ谝粌裕?銀川:計算機工程與應用雜志社,2011:246?248.
[6] 汪灝,張學森.一種基于串行方式的FPGA遠程加載電路[J].電子科學技術,2016,3(2):171?173.
[7] 張學森,李宏.一種遠程配置FPGA的設計方法[J].中國科技信息,2010(14):95?96.
[8] 陳炳成.基于FPGA的SPI FLASH控制器的設計與實現(xiàn)[J].電子世界,2013(12):137.
[9] 張立為,鐘慧敏.實現(xiàn)基于FPGA的SPI FLASH控制器設計[J].微計算機信息,2010,26(17):124?126.
[10] 李春雨,夏敏磊.基于CPLD的SPI FLASH程序在線加載方案[J].自動化與儀器儀表,2015(12):140?141.