楊振雷 劉承敏 青先國 朱宏亮 包 超 蔣天植 喻 恒 李 進(jìn) 羅庭芳 袁 航 單 偉
(中國核動力研究設(shè)計院核反應(yīng)堆系統(tǒng)設(shè)計技術(shù)重點實驗室成都610213)
隨著核能行業(yè)的快速發(fā)展,核儀控系統(tǒng)復(fù)雜度逐漸提高,數(shù)據(jù)傳輸量也迅速增長,對數(shù)據(jù)傳輸提出了較高要求。傳統(tǒng)核儀控系統(tǒng)通常采用控制器局域網(wǎng)絡(luò)(Controller Area Network,CAN)或外圍設(shè)備互連(Peripheral Component Interconnect,PCI)等數(shù)據(jù)總線進(jìn)行數(shù)據(jù)傳輸,CAN總線具有實時性強、開發(fā)周期短、穩(wěn)定性高的優(yōu)勢,已經(jīng)成為計算機控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線。但CAN總線數(shù)據(jù)通信速率最高只有1 Mbps,在一定程度上已經(jīng)難以滿足數(shù)據(jù)傳輸需求;PCI總線結(jié)構(gòu)非常復(fù)雜,最大傳輸速率也不超過133 Mbps。在現(xiàn)有的核儀控系統(tǒng)中,工業(yè)以太網(wǎng)逐漸得到廣泛的應(yīng)用,例如分布式控制系統(tǒng)(Distributed Control System,DCS)、堆外核測量系統(tǒng)、輻射監(jiān)測系統(tǒng)等均開始采用工業(yè)以太網(wǎng)技術(shù),商用的核儀控系統(tǒng)主要以百兆以太網(wǎng)為主。隨著以太網(wǎng)技術(shù)的發(fā)展和普及,將千兆以太網(wǎng)技術(shù)已成為當(dāng)前核儀控系統(tǒng)研究的熱點和趨勢[1-2]。相對于傳統(tǒng)的數(shù)據(jù)通信模式,千兆以太網(wǎng)技術(shù)在數(shù)據(jù)傳輸速度、傳輸距離、組網(wǎng)架構(gòu)等方面均有較大的技術(shù)優(yōu)勢[3-4]。
目前,嵌入式千兆以太網(wǎng)硬件方案有多種實現(xiàn)方法[5-9],例如基于單片機、ARM(Advanced RISC Machine)平臺、DSP(Digital Signal Processing)平臺和FPGA(Field Programmable Gate Array)平臺等。國內(nèi)外眾多高校和研究機構(gòu)在大科學(xué)裝置中均采用了嵌入式以太網(wǎng)解決方案,歐洲核子研究組織的Gnemmi等[10]基于FPGA實現(xiàn)了多種以太網(wǎng)硬件方案,在大型強子對撞機(Large Hadron Collider,LHC)強輻照環(huán)境下開展傳輸系統(tǒng)可靠性研究;中國科學(xué)技術(shù)大學(xué)的吳旭等[11]在大型高海拔空氣簇射觀測站(Large High Altitude Air Shower Observatory,LHAASO)設(shè)計了一套基于Xilinx公司Virtex-5系列的千兆以太網(wǎng)數(shù)據(jù)傳輸系統(tǒng),數(shù)據(jù)傳輸速率可達(dá)237 Mbps,滿足工程測量需求;中國科學(xué)院上海應(yīng)用物理研究所的周大勇等[12]在上海光源(Shanghai Synchrotron Radiation Facility,SSRF)控制系統(tǒng)中采用以太網(wǎng)技術(shù)使設(shè)備控制器直接連接至控制網(wǎng)絡(luò),簡化了控制系統(tǒng)結(jié)構(gòu),同時便于系統(tǒng)維護(hù)和升級??梢姡度胧揭蕴W(wǎng)硬件方案已經(jīng)廣泛應(yīng)用于國內(nèi)外大科學(xué)裝置的科學(xué)研究與工程應(yīng)用中。
隨著半導(dǎo)體技術(shù)的發(fā)展,可編程邏輯器件制造商Altera(現(xiàn)被Intel收購)和Xilinx均推出了SoC(System on Chip)器件,SoC器件將ARM處理器的軟件可編程性與FPGA的硬件可編程性進(jìn)行了有效集成,既能實現(xiàn)硬件加速與數(shù)據(jù)處理功能,又集成了多種硬核以及混合信號處理功能。本文以Xilinx公司Zynq-7000型SoC作為開發(fā)平臺,充分利用ARM和FPGA集成的優(yōu)勢,設(shè)計了一套用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)千兆以太網(wǎng)傳輸系統(tǒng)架構(gòu),然后采用ModelSim仿真工具對系統(tǒng)功能進(jìn)行了仿真驗證,最后基于Xilinx的開發(fā)板ZC706對系統(tǒng)方案進(jìn)行了具體實現(xiàn)和功能性能驗證,并給出了最終的實際測試結(jié)果。
Xilinx公司的Zynq-7000是第一代可擴展處理平臺,作為一款可編程SoC器件,將ARM處理系統(tǒng)(Process System,PS)和FPGA可 編 程 邏 輯(Programmable Logic,PL)進(jìn)行有效集成。具體而言,Zynq內(nèi)部包含一個雙核ARM Cortex-A9處理子系統(tǒng)和28 nm工藝的可編程邏輯子系統(tǒng),PS和PL之間 采 用 了ARM的AXI(Advanced eXtensible Interface)總線進(jìn)行數(shù)據(jù)交互,共包含AXI_ACP(AXI Accelerator Coherency Port)總線、4個AXI_HP(AXI High Performance Port)高 性 能 接 口、4個AXI_GP(AXI General Purpose Port)通用接口。另外,PS部分集成了多種常用的外設(shè)接口。SoC器件的產(chǎn)生,使得嵌入式系統(tǒng)的結(jié)構(gòu)更為簡捷和靈活,并在一定程度上提高了系統(tǒng)的可靠性和性能。
基于Zynq-7000的千兆以太網(wǎng)硬件方案有多種實現(xiàn)方式。Xilinx推薦了三種千兆以太網(wǎng)實現(xiàn)方式[13],如圖1所示。
1)方案一:PS部分實現(xiàn)方式
Zynq-7000的ARM中集成了兩個數(shù)據(jù)鏈路層MAC(Media Access Control)硬 核GEM(Gigabit Ethernet MAC)。因此,物理層采用外置Marvell公司的PHY(Physical)芯片,數(shù)據(jù)鏈路層直接使用其中一個硬核GEM0,協(xié)議層采用Linux以太網(wǎng)驅(qū)動實現(xiàn),對外以太網(wǎng)物理接口采用RJ45連接器實現(xiàn)。
2)方案二:PS部分GEM硬核和PL部分PHY實現(xiàn)方式
PL部分采用Xilinx提供的1000 BASE-X PCSPMA IP核實現(xiàn)物理層功能,PS部分采用ARM的另一個GEM1硬核實現(xiàn)數(shù)據(jù)鏈路層功能,協(xié)議層采用Linux以太網(wǎng)驅(qū)動實現(xiàn)。由于1000 BASE-X PCSPMA IP核 采 用Xilinx的 高 速GTX(Gigabit Transceiver)接口,因此對外以太網(wǎng)物理接口采用SFP(Small Form-factor Pluggable)光纖接口,也可以采用SFP轉(zhuǎn)RJ45接口實現(xiàn)。
3)方案三:PL部分Ethernet IP核和PL部分PHY實現(xiàn)方式
PL部分采用Xilinx提供的1000 BASE-X PCSPMA IP核實現(xiàn)物理層功能,PL部分采用Xilinx提供的AXI-Ethernet IP核實現(xiàn)數(shù)據(jù)鏈路層功能,協(xié)議層采用Linux以太網(wǎng)驅(qū)動實現(xiàn)。與第二種實現(xiàn)方式類似,對外以太網(wǎng)物理接口既可以采用SFP光纖接口,也可以采用SFP轉(zhuǎn)RJ45接口實現(xiàn)。
以上三種方法通過不同的組合方式實現(xiàn)以太網(wǎng)功能,能夠滿足大多數(shù)應(yīng)用場合需求。但是這三種方法均采用Linux以太網(wǎng)驅(qū)動作為協(xié)議層的實現(xiàn),過多占用ARM的運行資源,并且未能充分利用SoC器件可編程邏輯部分的優(yōu)勢。因此,本文參考國內(nèi)外廠商以太網(wǎng)傳輸系統(tǒng)的研制經(jīng)驗[14-15],提出了一種新的千兆以太網(wǎng)傳輸系統(tǒng)架構(gòu),協(xié)議層采用UDP面向非連接的傳輸協(xié)議,以滿足現(xiàn)有項目提出的傳輸速度大于等于650 Mbps的實際需求。
本文設(shè)計的系統(tǒng)方案如圖2所示,在PL部分主要實現(xiàn)三部分功能:UDP模塊、MAC模塊、PHY模塊。UDP模塊主要實現(xiàn)UDP協(xié)議層功能,具體包括UDP接收和發(fā)送功能、數(shù)據(jù)幀解析功能、地址解析協(xié)議功能(Address Resolution Protocol,ARP)、網(wǎng)際報文控制協(xié)議功能(Internet Control Message Protocol,ICMP)以 及 數(shù) 據(jù) 存 儲DMA(Direct Memory Access)功能;MAC模塊主要實現(xiàn)以太網(wǎng)數(shù)據(jù)鏈路層的功能,并且實現(xiàn)管理數(shù)據(jù)輸入輸出接口(Management Data Input/Output,MDIO)功能,以及對PHY的配置功能。PHY模塊,主要實現(xiàn)以太網(wǎng)物理層的功能,本部分采用Xilinx的1000 BASE-X PCS-PMA IP核實現(xiàn)。PS部分,通過32位GP總線對UDP模塊、MAC進(jìn)行配置和控制,例如IP(Internet Protocol)地址、MAC地址、地址掩碼的設(shè)置以及內(nèi)存(Double Data Rate,DDR)地址讀寫的控制等;通過64位HP總線實現(xiàn)UDP接收數(shù)據(jù)和發(fā)送數(shù)據(jù)到DDR的緩存功能。
UDP協(xié)議層邏輯框圖如圖3所示,主要包含數(shù)據(jù)幀解析模塊、UDP發(fā)送模塊、UDP接收模塊、ARP模塊、ICMP模塊、仲裁模塊以及DMA模塊。
2.2.1 數(shù)據(jù)幀解析模塊
數(shù)據(jù)幀解析模塊主要實現(xiàn)MAC幀解析的功能,通過數(shù)據(jù)有效信號對MAC幀字節(jié)計數(shù),當(dāng)MAC幀起始信號有效時,開始計數(shù);當(dāng)MAC幀結(jié)束信號有效時,結(jié)束計數(shù);然后,按照以太網(wǎng)V2標(biāo)準(zhǔn)對MAC幀內(nèi)容逐字解析,判斷幀類型是否是IP數(shù)據(jù)報或者ARP協(xié)議幀;最后,再對IP數(shù)據(jù)報進(jìn)行解析,過濾傳輸給本地的有效信息并解析幀攜帶的關(guān)鍵信息,例如源IP地址、目的IP地址、IP數(shù)據(jù)報長度等。
圖2 以太網(wǎng)傳輸系統(tǒng)頂層系統(tǒng)框圖Fig.2 Top system diagram of Ethernet transmission system
圖3 UDP協(xié)議層結(jié)構(gòu)圖Fig.3 Framework of UDP protocol
以太網(wǎng)V2標(biāo)準(zhǔn)MAC幀格式如圖4所示,通過對MAC幀內(nèi)容進(jìn)行解析,按照幀字節(jié)計數(shù)(包計數(shù)大于等于6且小于等于11)得到源物理地址。按照幀字節(jié)計數(shù)判斷數(shù)據(jù)報類型,若包計數(shù)等于13且數(shù)據(jù)類型碼為0x0800,則幀類型為IP數(shù)據(jù)報;若包計數(shù)等于13且數(shù)據(jù)類型碼為0x0806,則幀類型為ARP協(xié)議。若幀類型為IP數(shù)據(jù)報,本模塊需要根據(jù)字節(jié)計數(shù),檢查IP數(shù)據(jù)報中的IP地址是否與本地IP地址匹配,若匹配,則繼續(xù)根據(jù)IP數(shù)據(jù)報字節(jié)計數(shù)獲取IP數(shù)據(jù)報包頭長度、源IP地址和目的IP地址等信息;若不匹配,則丟棄該幀。
2.2.2 ARP模塊
ARP模塊主要用于檢測ARP請求幀以及生成ARP應(yīng)答幀。本模塊首先檢測MAC幀幀類型字段,若幀類型字段為0x04,表明為ARP幀;再檢測是否為ARP請求信號,若操作碼字段opcode為0x01,表明為ARP請求幀;再檢測IP地址是否為本地IP地址,若與本地IP匹配,則為有效的ARP請求幀,按照圖5所示的ARP協(xié)議幀格式生成ARP應(yīng)答幀。為了盡快查找到IP地址到MAC地址的映射關(guān)系,本模塊設(shè)計了ARP緩存區(qū),存放一定時間周期內(nèi)的IP地址與MAC地址的映射表,并保持動態(tài)更新。
圖4 MAC幀格式圖Fig.4 Diagram of MAC frame format
圖5 ARP協(xié)議幀格式圖Fig.5 Diagram of ARP frame format
2.2.3 ICMP模塊
ICMP模塊主要實現(xiàn)ICMP請求包的檢測功能以及生成ICMP應(yīng)答包。與ARP模塊處理類似,本模塊首先檢測輸入MAC幀的協(xié)議類型字段,若輸入信號中協(xié)議類型是ICMP協(xié)議,則繼續(xù)檢測該幀總字節(jié)計數(shù),若幀總字節(jié)計數(shù)小于等于0x200,則繼續(xù)檢測該ICMP幀是否為ICMP請求幀,若是ICMP請求幀,則為有效ICMP請求包。按照圖6所示的格式生成ICMP應(yīng)答包。這里對ICMP請求報與ICMP應(yīng)答報經(jīng)對比發(fā)現(xiàn),將ICMP請求包的MAC幀首部MAC地址互換,IP首部IP地址互換,ICMP報文中協(xié)議類型由0x08變?yōu)?x00,ICMP報文中校驗和減少0x08,便能夠生成ICMP報文應(yīng)答包。
圖6 ICMP報文格式圖Fig.6 Diagram of ICMP frame format
2.2.4 UDP接收模塊
UDP接收模塊主要實現(xiàn)UDP數(shù)據(jù)幀有效性檢測以及UDP數(shù)據(jù)的接收功能。具體實現(xiàn)過程如下:
1)UDP校驗和計算。在UDP首部前面增加12字節(jié)的偽首部,分別為4字節(jié)的源IP地址、4字節(jié)的目的IP地址、1字節(jié)(字節(jié)內(nèi)容為0)、1字節(jié)(字節(jié)內(nèi)容為6)、2字節(jié)的UDP長度,然后對偽首部、UDP首部、UDP數(shù)據(jù)部分按照二進(jìn)制反碼運算求和,同樣,若UDP數(shù)據(jù)個數(shù)為奇數(shù),需填充全0字節(jié)構(gòu)成偶數(shù)進(jìn)行計算,最后,對計算出的結(jié)果求反碼進(jìn)而得到UDP的校驗和。
2)UDP數(shù)據(jù)幀有效性檢測。根據(jù)數(shù)據(jù)解析模塊解析的內(nèi)容,依次判斷接收到的IP數(shù)據(jù)報內(nèi)容是否是UDP協(xié)議、目的端口號與本地端口是否匹配,然后再檢測UDP校驗和是否正確。如果以上內(nèi)容均不正確,判斷幀為無效幀,丟棄處理。
3)接收數(shù)據(jù)。當(dāng)檢測到有效幀后,去除IP數(shù)據(jù)報首部、UDP首部,便可得到UDP的有效數(shù)據(jù)部分。
2.2.5 UDP發(fā)送模塊
UDP發(fā)送模塊主要實現(xiàn)IP校驗和計算、UDP校驗和計算、數(shù)據(jù)組幀以及數(shù)據(jù)發(fā)送功能。具體實現(xiàn)流程如下:
1)將發(fā)送數(shù)據(jù)進(jìn)行緩存。將發(fā)送數(shù)據(jù)寫入緩存,當(dāng)緩存數(shù)據(jù)量達(dá)到一定的數(shù)據(jù)量時,將緩存數(shù)據(jù)讀出。
2)計算IP首部校驗和。IP首部校驗只針對IP數(shù)據(jù)報的首部進(jìn)行校驗。IP數(shù)據(jù)報校驗的基本單元為2字節(jié)的數(shù)據(jù),所有的2字節(jié)數(shù)據(jù)進(jìn)行反碼算術(shù)運算求和,最后得出的結(jié)果再取反碼得到IP首部校驗和。
3)計算UDP校驗和。在UDP數(shù)據(jù)報首部前面增加12字節(jié)偽首部,然后對偽首部、UDP首部、UDP數(shù)據(jù)進(jìn)行反碼算術(shù)運算求和,對計算出的結(jié)果再求反碼得到UDP首部校驗。
4)MAC幀封裝。按照MAC幀的標(biāo)準(zhǔn)格式生成MAC幀頭、IP首部和TCP首部,最后結(jié)合UDP數(shù)據(jù)區(qū),形成一個完整的MAC幀發(fā)送出去。
2.2.6 DMA數(shù)據(jù)存儲實現(xiàn)方式
DMA數(shù)據(jù)存儲模塊主要實現(xiàn)DDR讀寫功能。為了實現(xiàn)對DDR的快速讀寫,本模塊按照AXI4的讀寫時序進(jìn)行設(shè)計。當(dāng)UDP接收數(shù)據(jù)緩存到一定數(shù)據(jù)量時,AXI請求信號置高,AXI讀寫信號置高,表明將要執(zhí)行寫操作,DMA模塊從FPGA內(nèi)部緩存的相應(yīng)地址讀取規(guī)定長度的數(shù)據(jù)寫入到DDR相應(yīng)地址空間中。當(dāng)執(zhí)行UDP發(fā)送操作時,AXI請求信號置高,AXI讀寫信號置低,表明將要執(zhí)行讀操作,DMA模塊從DDR中相應(yīng)地址讀取規(guī)定長度的數(shù)據(jù)寫入到FPGA內(nèi)部緩存中,然后通過UDP發(fā)送模塊發(fā)送。
數(shù)據(jù)鏈路層的設(shè)計結(jié)構(gòu)圖如圖7所示,主要包括MAC接收幀解析模塊、MAC發(fā)送幀封裝模塊、循環(huán)冗余校驗(Cyclic Redundancy Check,CRC)模塊、GMII(Gigabit Medium Independent Interface)接口模塊以及PHY配置模塊。MAC發(fā)送幀封裝模塊,通過解析物理層向數(shù)據(jù)鏈路層交互的GMII比特流,將數(shù)據(jù)鏈路層數(shù)據(jù)封裝成GMII數(shù)據(jù)幀格式;MAC接收幀解析模塊,針對接收方向的GMII比特流進(jìn)行解析,從而得到MAC幀數(shù)據(jù)。CRC校驗?zāi)K,主要實現(xiàn)接收方向MAC幀內(nèi)容的正確性檢測功能和發(fā)送方向的CRC校驗值計算功能;GMII接口模塊,依照IEEE802.3標(biāo)準(zhǔn),實現(xiàn)MAC幀、GMII幀格式的轉(zhuǎn)換;PHY配置模塊,通過MDIO接口實現(xiàn)對PHY層的配置功能。
圖7 數(shù)據(jù)鏈路層結(jié)構(gòu)圖Fig.7 Structure diagram of data link layer
為了對設(shè)計方案進(jìn)行驗證,本文采用ModelSim進(jìn)行了功能仿真。ModelSim是Mentor Graphics子公司Model Technology的產(chǎn)品,是邏輯設(shè)計重要的仿真工具之一。本文設(shè)計了圖8所示的仿真驗證框圖,主要包括數(shù)據(jù)生成模塊、數(shù)據(jù)檢查模塊、兩個同樣的UDP模塊和兩個同樣的數(shù)據(jù)鏈路層模塊,這樣對UDP的發(fā)送模塊和接收模塊以及數(shù)據(jù)鏈路層模塊都能進(jìn)行完整的驗證。
圖8 仿真驗證結(jié)構(gòu)圖Fig.8 Block diagram of simulation verification
首先設(shè)置發(fā)送側(cè)和接收側(cè)的MAC地址、IP地址等,這里發(fā)送側(cè)MAC地址設(shè)置為0x000102030405,IP地址設(shè)置為192.168.1.1,端口號設(shè)置為0x5678;接收側(cè)MAC地址設(shè)置為0x001122334455,IP地址設(shè)置為192.168.1.2,端口號設(shè)置為0x1234。然后,數(shù)據(jù)生成模塊生成累加數(shù)據(jù)并啟動發(fā)送,為了便于觀察,發(fā)送幀長度設(shè)置為16字節(jié);最后,對接收側(cè)的數(shù)據(jù)進(jìn)行檢查。若接收到的數(shù)據(jù)與發(fā)送的數(shù)據(jù)匹配,則表明方案合理。圖9為ModelSim的仿真波形圖,通過仿真結(jié)果可以看出,UDP發(fā)送的數(shù)據(jù)均能夠完整接收到,表明整個設(shè)計方案在功能上是可行的。
仿真驗證完成以后,本文基于Xilinx的ZC706開發(fā)板進(jìn)行了實際驗證,對實際使用環(huán)境中的UDP協(xié)議棧的可靠性進(jìn)行了驗證。
圖9 UDP發(fā)送和接收過程仿真波形圖Fig.9 Simulation waveform of UDP sending and receiving process
開發(fā)板的IP地址設(shè)置為192.168.10.9,MAC地址設(shè)置為0x000102030406,端口號設(shè)置為0x9119;工控機的IP地址設(shè)計為192.168.10.66,MAC地址為工控機的自身地址,端口號設(shè)置為0x1024。本文在SoC內(nèi)部設(shè)計了數(shù)據(jù)生成模塊不斷地產(chǎn)生累加數(shù)據(jù),并且通過設(shè)置數(shù)據(jù)產(chǎn)生的時間間隔來改變生成數(shù)據(jù)的速度,通過調(diào)整UDP數(shù)據(jù)包的大小對系統(tǒng)的傳輸速度進(jìn)行了測試。
在測試傳輸速度前,首先通過工控機對開發(fā)板進(jìn)行了PING操作,如圖10所示,從圖10可以看出,工控機與開發(fā)板網(wǎng)絡(luò)已經(jīng)連通。然后,對系統(tǒng)傳輸速度進(jìn)行了測試,圖11為不同UDP數(shù)據(jù)包情況下實際的數(shù)據(jù)傳輸速度。測試結(jié)果發(fā)現(xiàn),當(dāng)UDP數(shù)據(jù)包大小等于1 024字節(jié)時,數(shù)據(jù)傳輸速度約為830 Mbps,并且穩(wěn)定性較好;當(dāng)UDP數(shù)據(jù)包大小等于512字節(jié)時,數(shù)據(jù)傳輸速度約為870 Mbps,并且穩(wěn)定性較好;當(dāng)UDP數(shù)據(jù)包大小等于256字節(jié)時,數(shù)據(jù)傳輸速度約為750 Mbps,穩(wěn)定性較差,當(dāng)增加數(shù)據(jù)生成模塊內(nèi)數(shù)據(jù)產(chǎn)生時間間隔,即減小數(shù)據(jù)量,系統(tǒng)穩(wěn)定性變好。
圖10 ARP和PING驗證結(jié)果Fig.10 Verification results of ARP and PING protocol
圖11 不同UDP包大小的實際測試結(jié)果(a)256字節(jié),(b)512字節(jié),(c)1 024字節(jié)Fig.11 Actual test results of different UDP packet sizes(a)256 bytes,(b)512 bytes,(c)1 024 bytes
本文基于Xilinx的SoC器 件Zynq-7000為研究對象,實現(xiàn)了一種新的UDP千兆以太網(wǎng)傳輸系統(tǒng)架構(gòu),對千兆以太網(wǎng)傳輸系統(tǒng)實現(xiàn)方式進(jìn)行了詳細(xì)描述,并對系統(tǒng)方案進(jìn)行了功能仿真,最后在Xilinx ZC706開發(fā)板上進(jìn)行了性能測試。測試結(jié)果表明:本文提出的UDP千兆網(wǎng)以太網(wǎng)傳輸系統(tǒng)架構(gòu)具有較強的通用性,傳輸速度最高能夠達(dá)到870 Mbps,能夠滿足絕大多數(shù)核儀控系統(tǒng)的實際需求。