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