趙 赟
(中國船舶重工集團公司第七二三研究所,江蘇 揚州 225101)
隨著現(xiàn)代艦船電子設(shè)備的高度集成化,相關(guān)的分機板卡也越來越多。傳統(tǒng)的USB-JTAG調(diào)試方式通信有效距離短,在艦船現(xiàn)場調(diào)試FPGA時,由于內(nèi)外部環(huán)境復(fù)雜,調(diào)試人員可能需要攀爬,或者擁擠在狹小空間內(nèi),同時多塊板卡對應(yīng)單獨的調(diào)試電纜,調(diào)試不同板卡還需要不停插拔,給調(diào)試工作帶來極大不便。
針對此現(xiàn)象,本文基于Xilinx公司提出的XVC協(xié)議[1],設(shè)計了一種PTMP以太網(wǎng)調(diào)試模塊,它通過高速背板同各個板卡連接,以Xilinx公司推出的Zynq7000芯片為處理芯片,以Realtek公司的RTL8305NB-CG交換芯片作為網(wǎng)絡(luò)橋接,調(diào)試人員通過單個以太網(wǎng)口就能調(diào)試所有板卡,有效調(diào)試距離為100 m,還能支持多人在艦船不同地點同時調(diào)試,大大提升了艦船現(xiàn)場調(diào)試的便捷性和安全性。
本模塊系統(tǒng)原理框圖如圖1所示,調(diào)試電腦(PC)通過以太網(wǎng)和網(wǎng)絡(luò)交換芯片相連,網(wǎng)絡(luò)交換芯片將數(shù)據(jù)包分發(fā)到各個Zynq7000芯片,Zynq7000的處理系統(tǒng)(PS)部分接收到調(diào)試PC的以太網(wǎng)數(shù)據(jù)包后通過AXI4-Lite總線發(fā)送到可編程邏輯(PL)部分,PL部分將其解析并轉(zhuǎn)化為聯(lián)合測試工作組(JTAG)時序信號發(fā)送至需要調(diào)試的FPGA芯片,完成調(diào)試工作。
圖1 系統(tǒng)原理框圖
本文選用Zynq7000系列芯片作為模塊的處理芯片,該芯片是Xilinx公司推出的片上系統(tǒng)(Soc)解決方案,該方案將ARM公司Cortex-A9和FPGA集成在一個芯片上,通過內(nèi)部總線連接,從而讓內(nèi)部通信速度大大提升。它分為PS和PL兩大部分,PS部分包括2個ARM Cortex-A9處理器、AXI總線、內(nèi)部存儲器、外部存儲器及外設(shè)接口(這些外設(shè)包括USB總線、以太網(wǎng)接口、SD卡接口、I2C總線接口、CAN總線接口、串口、GPIO等等);而PL部分則包括Xilinx 7系列的FPGA[2],Zynq7000的具體架構(gòu)如圖2所示。
圖2 Zynq7000芯片內(nèi)部結(jié)構(gòu)框圖
Zynq7000作為Xilinx首款將ARM Cortex-A和7系列FPGA集成的Soc,其優(yōu)勢在于ARM處理器和FPGA之間的高速通信,而AXI(Advanced Extensible Interface)總線就是連接這兩者的高速通道。AXI屬于ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture),是一種高性能的片內(nèi)總線,AMBA-AXI協(xié)議主要用用于高帶寬、低延遲的系統(tǒng)設(shè)計,描述主從設(shè)備之間的數(shù)據(jù)傳輸方式[3]。主設(shè)備和從設(shè)備之間用握手信號建立連接。當(dāng)從設(shè)備準(zhǔn)備要接收數(shù)據(jù)時,會向主設(shè)備發(fā)送READY信號。而當(dāng)主設(shè)備的數(shù)據(jù)準(zhǔn)備好后,會發(fā)出和維持一個VALID信號,表示數(shù)據(jù)有效,VALID和READY信號都有效的時候,握手完成,主從設(shè)備之間開始傳輸數(shù)據(jù)。
Zynq7 000支持AXI4-Lite、AXI4和AXI4-Stream 3種總線模式,表1列舉了3種AXI總線的特性。
表1 3種AXI總線比較
本模塊的設(shè)計需求是將以太網(wǎng)數(shù)據(jù)包轉(zhuǎn)化為JTAG命令,用于調(diào)試和下載FPGA,屬于低速應(yīng)用,而 AXI-Lite總線結(jié)構(gòu)簡單,適合這種小批量、簡單控制的場合,所以本模塊使用AXI4-Lite總線來傳輸ARM和FPGA之間的數(shù)據(jù)。
本模塊為Zynq7000設(shè)計的以太網(wǎng)接口,為簡化的千兆比特介質(zhì)獨立接口(RGMII),該接口由IEEE 802.3-2000定義,支持10/100/1 000 Mbps傳輸速率,同時采用4位數(shù)據(jù)接口,有效減少了芯片接口管腳數(shù)目,通過Zynq7000 PS部分設(shè)計了支持AXI4-Lite總線的以太網(wǎng)MAC架構(gòu)[4]。
為了交換對應(yīng)不同板卡的以太網(wǎng)數(shù)據(jù)包,本模塊還在PC機和Zynq7000芯片設(shè)計了一個網(wǎng)絡(luò)交換模塊,該模塊的核心芯片選用了Realtek公司的RTL8305NB-CG芯片,它有5個端口,每個端口有獨立的媒體訪問控制地址(MAC)和物理層接口(PHY),支持10/100 M以太網(wǎng)交換,從調(diào)試PC發(fā)送的以太網(wǎng)數(shù)據(jù)包會通過接入端口向所有端口廣播,而對應(yīng)的Zynq7000芯片收到廣播信息后,會根據(jù)對應(yīng)信息選擇接收還是丟棄所收到的以太網(wǎng)數(shù)據(jù)包[5],從而完成本模塊設(shè)計的PTMP功能。
本模塊軟件是基于Xilinx XVC協(xié)議設(shè)計,XVC協(xié)議是Xilinx公司推出的基于TCP/IP的虛擬線纜協(xié)議,允許用戶不使用傳統(tǒng)的USB線纜,而是通過以太網(wǎng)來遠(yuǎn)程訪問FPGA的JTAG接口并對其進行調(diào)試,支持多種平臺。
本模塊的網(wǎng)絡(luò)硬件接口為RGMII接口,同時通過Lwip協(xié)議實現(xiàn)以太網(wǎng)連接,Lwip協(xié)議是一種TCP/IP協(xié)議的小型化實現(xiàn),最初由Adam Dunkels在瑞典計算機科學(xué)研究所的計算機和網(wǎng)絡(luò)架構(gòu)(CNA)實驗室編寫。它實現(xiàn)的重點是在保持TCP/IP協(xié)議的主要功能情況下同時減少硬件RAM使用。這使得Lwip適用于小容量RAM或者ROM的嵌入式系統(tǒng)。現(xiàn)在Lwip已被移植到多個平臺和操作系統(tǒng),無需底層操作系統(tǒng)都可以運行[6]。
Zynq7000通過Xilinx Vivado軟件的軟件開發(fā)工具(SDK)來實現(xiàn)Lwip協(xié)議,在Vivado軟件中通過一個知識產(chǎn)權(quán)(IP)核集成工具完成基于Zynq的硬件平臺設(shè)計,在搭建好硬件平臺后直接發(fā)送到SDK,然后再通過該平臺加載軟件程序。
本文基于Zynq7000芯片設(shè)計的軟件流程圖如圖3所示。
Processing_system7_0k模塊為Zynq7000的PS部分,首先負(fù)責(zé)所有外設(shè)驅(qū)動編寫,包括以太網(wǎng)、串口、DDR等,在設(shè)備啟動后首先將外設(shè)初始化,然后開始通過RGMII網(wǎng)口接收由調(diào)試PC發(fā)送的XVC協(xié)議以太網(wǎng)數(shù)據(jù)包,該數(shù)據(jù)包主要由以下3種命令組成:
l getinfo:
l shift:[number of bits][TMS vector][TDI vector]
l settck:[period in nanoseconds]
其中,getinfo命令檢索XVC服務(wù)的版本和TMS及TDI信號位移的最大指針長度,目前Xilinx使用的XVC服務(wù)為v1.0,TMS和TDI的最大指針長度和軟件應(yīng)用定義的緩存深度有關(guān),本模塊定義的最大長度為2 048,所以getinfo命令返回的字符串為xvcServer_v1.0∶2048 。
shift命令是XVC協(xié)議的主要命令,它由三部分組成,共6個字節(jié),前4個字節(jié)指示TMS和TDI的指針長度,后面2個字節(jié)則是發(fā)送的TMS和TDI數(shù)據(jù),該指令會返回同TMS指針向量同樣長度的TDO指針,代表從JTAG接口返回的全部TDO數(shù)據(jù)[7]。
圖3 系統(tǒng)軟件流程圖
settck命令主要用來設(shè)置TCK信號的時鐘周期,基本單位為ns,具體通過ASCII碼來定義。比如十進制100 對應(yīng)的ASCII字符為D,將settck命令值設(shè)為D(即設(shè)置TCK信號的周期為100ns[8])。
另外2個模塊rst_processing_system7_0_100 M負(fù)責(zé)軟件模塊的復(fù)位,而processing_system7_0_axi_periph模塊則在解析PC機通過XVC服務(wù)發(fā)送的以太網(wǎng)包后,將解析過的命令通過AXI4-Lite總線寫入PL部分的寄存器,然后通過axi_jtag_0模塊轉(zhuǎn)換為JTAG時序連接到目標(biāo)FPGA,從而完成調(diào)試。
本文的測試環(huán)境軟件為Xilinx Vivado軟件,打開Vivado軟件進入硬件管理界面,在TCL控制臺輸入指令,連接目標(biāo)FPGA對應(yīng)的IP地址,連接成功后開始對目標(biāo)FPGA進行下載調(diào)試。如圖4所示,通過Vivado軟件的現(xiàn)場測試,將一個5 M的bit文件在線加載進FPGA所需時間為20 s左右,而通過Bpi模式燒錄mcs文件進入對應(yīng)Flash時間大約為25 min。和傳統(tǒng)JTAG相比,調(diào)試下載速度基本一致,但對于現(xiàn)實設(shè)備上的板卡調(diào)試而言,該方法更加靈活方便。
圖4 目標(biāo)FPGA連接成功
在本模塊中,調(diào)試PC通過網(wǎng)絡(luò)交換芯片,利用單網(wǎng)口可以訪問所有板卡對應(yīng)的Zynq7000芯片,通過XVC協(xié)議將以太網(wǎng)數(shù)據(jù)包解析為JTAG命令,從而完成調(diào)試板載FPGA的目的。在實際設(shè)備應(yīng)用中,僅需要一個交換芯片模塊,而將Zynq7000芯片集成在各塊板卡上,用來代替?zhèn)鹘y(tǒng)的上電控制芯片。