杜 超, 陳濟(jì)民(華北計(jì)算技術(shù)研究所專(zhuān)裝技術(shù)研發(fā)部,北京100083)
隨著微電子技術(shù)的發(fā)展,芯片的集成度越來(lái)越高,片上系統(tǒng)(SoC)的發(fā)展已經(jīng)是必然趨勢(shì)。SoC具有可擴(kuò)展性好,成本低,設(shè)計(jì)周期短,可靠性高,功耗低等優(yōu)點(diǎn)。SoC也為各種網(wǎng)絡(luò)產(chǎn)品的研發(fā)提供了新的思路[1-4]。由于SoC具有良好的可重配置性,可很方便地更改配置和屬性,利用該技術(shù)設(shè)計(jì)出的產(chǎn)品具有很好的靈活性和安全性。在沒(méi)有引入統(tǒng)一的路由控制機(jī)制以及沒(méi)有統(tǒng)一的TCP/IP協(xié)議支持的測(cè)控網(wǎng)中連通性差、靈活性弱,這就使網(wǎng)絡(luò)應(yīng)用模式受到限制,更無(wú)法支持各種上層應(yīng)用。本文介紹一種基于SoC及IP核技術(shù)的專(zhuān)用嵌入式網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn),以實(shí)現(xiàn)在HDLC鏈路上進(jìn)行IP分組的傳輸并和以太網(wǎng)實(shí)現(xiàn)路由交換,可有效地解決廣域測(cè)控網(wǎng)的互連互通性,并且系統(tǒng)的設(shè)計(jì)也可以方便部署各種上層應(yīng)用。
網(wǎng)關(guān)以一個(gè)Xilinx Virtex-4 Fx100芯片[5-7]為核心,自主開(kāi)發(fā)了所需的系列IP核,并設(shè)計(jì)相應(yīng)的外圍電路。XilinxVirtex-4 Fx100芯片內(nèi)部有兩個(gè)PowerPC 405 CPU核(分別稱(chēng)為PPC/01和PPC/02)和4個(gè)以太網(wǎng)MAC核。2個(gè)PowerPC處理器核分別承擔(dān)著不同的工作。其中,PPC/01主要負(fù)責(zé)路由信息的維護(hù),以及與用戶(hù)的交互;PPC/02主要負(fù)責(zé)調(diào)度交換結(jié)構(gòu)在各端口之間轉(zhuǎn)發(fā)IP包,實(shí)現(xiàn)ARP協(xié)議,維護(hù)映射表,并且負(fù)責(zé)查找轉(zhuǎn)發(fā)表和映射表。一個(gè)正確的數(shù)據(jù)包的處理過(guò)程如圖1所示。
進(jìn)入系統(tǒng)的鏈路層幀被 MAC/HDLC輸入輸出處理部件剝?nèi)ユ溌穼宇^,進(jìn)行正確性校驗(yàn),正確的包放入輸入端口的相應(yīng)緩沖區(qū),并向PPC/02發(fā)出接收完成中斷,請(qǐng)求PPC/02處理。校驗(yàn)錯(cuò)誤或者輸入緩沖區(qū)滿(mǎn)導(dǎo)致阻塞時(shí),接收端口將校驗(yàn)錯(cuò)誤的IP頭和一部分負(fù)載放入輸入端ICMP緩沖區(qū),并產(chǎn)生中斷來(lái)通知PPC/02處理。
對(duì)于輸入的IP包,PPC/02收到中斷信號(hào)之后,會(huì)查找轉(zhuǎn)發(fā)表,找到下一跳的IP地址和輸出端口號(hào);然后查找映射表,查找下一跳的MAC地址,查找到的目的MAC地址被放入輸出端口的寄存器內(nèi)。然后PPC/02調(diào)度交換部件執(zhí)行交換,把IP包交換到相應(yīng)的輸出端口。輸出端口將此IP包和目的MAC地址一起組裝成鏈路層數(shù)據(jù)幀發(fā)送出去。
圖1 系統(tǒng)工作原理
如果這個(gè)IP包是送往本網(wǎng)關(guān)的RIP協(xié)議數(shù)據(jù)包,就通過(guò)交換結(jié)構(gòu)把數(shù)據(jù)包交換PPC/01的輸入緩沖區(qū),然后通過(guò)中斷告訴PPC/01有數(shù)據(jù)到達(dá),PPC/01收到中斷后從自己的輸入緩沖區(qū)中讀取數(shù)據(jù)報(bào),并根據(jù)RIP包來(lái)維護(hù)路由信息。
對(duì)于輸入的ARP包,PPC/02要么根據(jù)ARP包的內(nèi)容來(lái)更新映射表,要么生成ARP響應(yīng)包,放入輸出端口的相應(yīng)緩沖區(qū),由輸出端口發(fā)送出去。
用戶(hù)則通過(guò)PPC/01提供的人機(jī)交互接口,對(duì)網(wǎng)關(guān)的相關(guān)參數(shù)進(jìn)行配置,也可以獲取網(wǎng)關(guān)運(yùn)行的狀態(tài)信息。
系統(tǒng)劃分為8個(gè)模塊:PPC/01處理器,PPC/02處理器,MAC端口部件,HDLC端口部件,快速交換部件,轉(zhuǎn)發(fā)引擎部件,地址映射部件和雙機(jī)通信部件,如圖2所示。圖中的Port_PPC01和Port_PPC02分別代表PPC/01和PPC/02的輸入/輸出緩沖區(qū)。這兩個(gè)緩沖區(qū)是交換結(jié)構(gòu)和兩個(gè)CPU核之間交換數(shù)據(jù)的通路。各模塊功能簡(jiǎn)述如下:
(1)PPC/01。PPC/01上運(yùn)行Linux操作系統(tǒng)和Zebra路由軟件,負(fù)責(zé)建立和維護(hù)路由表,轉(zhuǎn)發(fā)表以及配置管理工作。PPC/01也分析PPC/02通過(guò)雙機(jī)通信送來(lái)的狀態(tài)信息,并根據(jù)狀態(tài)信息的含義進(jìn)行必要的處理,比如被通知從端口 Port_PPC01的接收緩沖區(qū)中讀取數(shù)據(jù)。另外,它提供一個(gè)人機(jī)交互接口,使用戶(hù)可以在靜態(tài)、動(dòng)態(tài)運(yùn)行的條件下對(duì)網(wǎng)關(guān)進(jìn)行配置。各種上層應(yīng)用也可以部署在PPC/01上。
(2)PPC/02。PPC/02運(yùn)行Xilkernel微內(nèi)核操作系統(tǒng),負(fù)責(zé)對(duì)輸入的包進(jìn)行分析,根據(jù)包的類(lèi)型和目的地址來(lái)調(diào)度交換結(jié)構(gòu),將包交換到合適的目的端口。PPC/02也負(fù)責(zé)實(shí)現(xiàn)ARP協(xié)議,維護(hù)映射表。
(3)MAC端口部件。有4個(gè)MAC端口部件。MAC端口對(duì)外直接連接到以太網(wǎng),對(duì)內(nèi)與交換結(jié)構(gòu)連接。它是以太網(wǎng)數(shù)據(jù)幀輸入輸出的硬件實(shí)現(xiàn)部分。它把接收到的以太網(wǎng)幀進(jìn)行處理,放入合適的輸入緩沖區(qū),也負(fù)責(zé)把輸出緩沖區(qū)中的IP包裝配成幀發(fā)送出去。
(4)HDLC端口部件。有4個(gè)HDLC端口部件。HDLC端口是一個(gè)簡(jiǎn)化HDLC收發(fā)端口,實(shí)現(xiàn)的功能和MAC端口類(lèi)似,負(fù)責(zé)HDLC幀的收發(fā)。
(5)快速交換部件??焖俳粨Q部件是整個(gè)系統(tǒng)數(shù)據(jù)流動(dòng)的中心部件。主要職責(zé)是將各個(gè)端口輸入緩沖區(qū)內(nèi)的IP分組快速地交換到正確的目的端口的輸出緩沖區(qū)。快速交換部件采用總線(xiàn)式交換,它所交換的數(shù)據(jù)都是IP包,即第三層交換。
圖2 系統(tǒng)硬件結(jié)構(gòu)
(6)轉(zhuǎn)發(fā)引擎部件。轉(zhuǎn)發(fā)引擎部件的功能是根據(jù)輸入的目的IP地址得到其最長(zhǎng)匹配目的網(wǎng)絡(luò)地址或目的主機(jī)IP地址在路由表中的索引。
(7)地址映射部件。地址映射部件根據(jù)輸入的下一跳IP地址得到匹配的MAC地址。
(8)雙機(jī)通信部件。雙機(jī)通信部件負(fù)責(zé)實(shí)現(xiàn)兩個(gè)CPU核之間的通信,在兩個(gè)CPU核之間交換控制和狀態(tài)信息。雙機(jī)通信由兩部分組成,共享存儲(chǔ)器和中斷控制器。兩個(gè)處理器都通過(guò)它們的OCM總線(xiàn)連接到一個(gè)雙口RAM,共享存儲(chǔ)器被劃分成兩個(gè)單向緩沖區(qū),兩個(gè)CPU核分別只對(duì)其中一個(gè)可寫(xiě),對(duì)另一個(gè)可讀。每個(gè)處理器都有一個(gè)中斷接口,通過(guò)中斷告知對(duì)方有數(shù)據(jù)到達(dá),或者向?qū)Ψ秸?qǐng)求數(shù)據(jù)。
按照系統(tǒng)的功能劃分,軟件的結(jié)構(gòu)也分為 PPC/01和PPC/02兩部分,如圖3所示。PPC/01上運(yùn)行著系統(tǒng)支撐子系統(tǒng),配置管理子系統(tǒng)和路由子系統(tǒng)。PPC/02上運(yùn)行轉(zhuǎn)發(fā)子系統(tǒng)。各子系統(tǒng)的功能如下:
(1)轉(zhuǎn)發(fā)子系統(tǒng)。轉(zhuǎn)發(fā)子系統(tǒng)在Xilkernel微內(nèi)核操作系統(tǒng)上實(shí)現(xiàn),主要職責(zé)是負(fù)責(zé)包的快速轉(zhuǎn)發(fā),調(diào)度交換結(jié)構(gòu)在各端口之間交換IP包。主要包括管理控制模塊、IP協(xié)議處理模塊、ARP協(xié)議處理模塊、ICMP協(xié)議處理模塊,雙機(jī)通信模塊以及各驅(qū)動(dòng)模塊。
(2)系統(tǒng)支撐子系統(tǒng)。系統(tǒng)支撐子系統(tǒng)運(yùn)行在嵌入式Linux操作系統(tǒng)上,它為路由子系統(tǒng)和配置管理子系統(tǒng)提供了一個(gè)平臺(tái),并且也是其它各種應(yīng)用部署的平臺(tái)。支撐子系統(tǒng)是PPC/01與系統(tǒng)其它部分協(xié)調(diào)和交互的橋梁,支撐子系統(tǒng)向上連接路由子系統(tǒng),向下與轉(zhuǎn)發(fā)子系統(tǒng)連接,實(shí)現(xiàn) PPC/01與PPC/02的通信。為了把網(wǎng)關(guān)的硬件結(jié)構(gòu)和Linux操作系統(tǒng)融合起來(lái),需要對(duì)Linux的TCP/IP協(xié)議棧進(jìn)行改造,后面會(huì)介紹。
(3)路由子系統(tǒng)。路由子系統(tǒng)負(fù)責(zé)維護(hù)路由表,并根據(jù)路由表來(lái)更新轉(zhuǎn)發(fā)表。
(4)配置管理子系統(tǒng)。配置管理子系統(tǒng)是網(wǎng)關(guān)運(yùn)行過(guò)程中用戶(hù)對(duì)其進(jìn)行配置和管理的接口。用戶(hù)可以通過(guò)配置管理子系統(tǒng)來(lái)添加、刪除靜態(tài)路由,調(diào)整路徑的Metric值,選擇路由協(xié)議等,還可以通過(guò)配置管理子系統(tǒng)獲得系統(tǒng)運(yùn)行的狀態(tài)信息,以及各種統(tǒng)計(jì)信息。
上面提到的MAC端口部件,HDLC端口部件,快速交換部件,轉(zhuǎn)發(fā)引擎部件,地址映射部件和雙機(jī)通信部件,在本系統(tǒng)中均采用了IP核技術(shù)進(jìn)行實(shí)現(xiàn),IP核是系統(tǒng)研發(fā)的核心,也是整個(gè)系統(tǒng)的基石,IP核設(shè)計(jì)的好壞直接影響到整個(gè)系統(tǒng)的集成、調(diào)試工作。另外,系統(tǒng)支撐子系統(tǒng)需要對(duì)Linux TCP/IP協(xié)議棧進(jìn)行改造,也是系統(tǒng)實(shí)現(xiàn)的難點(diǎn)之一。
HDLCIP核負(fù)責(zé)HDLC幀的收發(fā)。接收時(shí),HDLCIP核把輸入的幀去掉鏈路層頭部之后,放進(jìn)IP分組輸入緩沖區(qū),對(duì)IP分組首部進(jìn)行校驗(yàn)、TTL-1、首部校驗(yàn)錯(cuò)的IP分組丟棄、首部的再校驗(yàn)、并將校驗(yàn)結(jié)果重寫(xiě)入校驗(yàn)和字段,然后向PPC/02發(fā)出中斷請(qǐng)求,通知PPC/02將此IP包交換到其它端口;發(fā)送過(guò)程則不需要程序的干預(yù),IP分組輸出緩沖區(qū)中的IP包被硬件自動(dòng)裝配成幀發(fā)送出去。
HDLCIP核由端口緩沖結(jié)構(gòu)和HDLC收發(fā)器組成。端口緩沖結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行緩沖,按照協(xié)議對(duì)數(shù)據(jù)的流向進(jìn)行控制,完成與交換結(jié)構(gòu)和程序的交互。HDLC端口的緩沖區(qū)包括:HDLC幀輸入/輸出緩沖區(qū),IP分組交換輸入/輸出緩沖區(qū),IP分組首部緩沖區(qū),輸入/輸出端ICMP分組緩沖區(qū)。HDLC收發(fā)器為單通道收發(fā)器,它主要由發(fā)送模塊、接收模塊和控制模塊組成。HDLC收發(fā)器以全雙工方式工作。
圖3 系統(tǒng)軟件結(jié)構(gòu)
通過(guò)鏈路協(xié)議IP核的設(shè)計(jì),實(shí)現(xiàn)了具有自主知識(shí)產(chǎn)權(quán)的HDLC協(xié)議控制器,并進(jìn)行了優(yōu)化處理,提高了其實(shí)時(shí)性和抗干擾能力。
快速交換IP核的作用就是根據(jù)轉(zhuǎn)發(fā)子系統(tǒng)分析出的IP分組轉(zhuǎn)發(fā)結(jié)果,快速完成IP分組從輸入端口到輸出端口的移動(dòng)。
快速交換IP核主要由輸入隊(duì)列、輸出隊(duì)列、交換選路結(jié)構(gòu)和調(diào)度器組成,如圖4所示。其中的關(guān)鍵部件為調(diào)度器和交換選路結(jié)構(gòu)。
調(diào)度器采用狀態(tài)機(jī)設(shè)計(jì)方法和適當(dāng)?shù)恼{(diào)度算法,是整個(gè)交換結(jié)構(gòu)數(shù)據(jù)交換的控制樞紐,它負(fù)責(zé)根據(jù)各個(gè)輸入、輸出端口的狀態(tài)和所有數(shù)據(jù)通路的狀態(tài),做出正確、高效、公平的決策,調(diào)度每個(gè)端口的各個(gè)輸入IP分組如何快速的通過(guò)交換結(jié)構(gòu)到達(dá)輸出端口。交換選路結(jié)構(gòu)則是根據(jù)調(diào)度器的調(diào)度命令具體的完成各個(gè)IP分組的快速交換。通過(guò)快速交換IP核的設(shè)計(jì),實(shí)現(xiàn)了一個(gè)以交換結(jié)構(gòu)為中心的數(shù)據(jù)分組交換平臺(tái),可以在其之上快速方便地衍生出更多或功能更復(fù)雜的設(shè)計(jì),為今后的產(chǎn)品設(shè)計(jì)奠定了基礎(chǔ)。
Linux TCP/IP協(xié)議棧改造是實(shí)現(xiàn)系統(tǒng)支撐子系統(tǒng)的關(guān)鍵內(nèi)容。Linux是開(kāi)放源代碼的操作系統(tǒng),Linux TCP/IP協(xié)議棧本身的功能是很成熟強(qiáng)大的[8-15],功能十分全面。通過(guò)對(duì)協(xié)議棧進(jìn)行改造,然后重新編譯內(nèi)核,來(lái)得到實(shí)際需要的協(xié)議棧。
Linux TCP/IP協(xié)議棧的包處理分為4層:鏈路層(以太網(wǎng)幀)→網(wǎng)絡(luò)層(IP包)→傳輸層(TCP,UDP包)→應(yīng)用層。需要改造的部分在鏈路層和網(wǎng)絡(luò)層,傳輸層以上則不需要修改。
對(duì)于鏈路層的改造是由于 PPC/01物理上是通過(guò) Port_PPC01端口收發(fā)數(shù)據(jù)的,而Port_PPC01端口與交換結(jié)構(gòu)相連,交換結(jié)構(gòu)交換的都是IP包,所以PPC/01收發(fā)的也都是IP包。這與Linux TCP/IP協(xié)議棧原本進(jìn)出的都是鏈路層幀是完全不一樣的。需要把Linux TCP/IP協(xié)議棧的鏈路層替換成實(shí)際的鏈路層。由于PPC/01負(fù)責(zé)維護(hù)路由信息,所以它必須得了解網(wǎng)關(guān)的輸入輸出端口,通過(guò)建立8個(gè)虛擬網(wǎng)絡(luò)設(shè)備,來(lái)與物理上的4個(gè)MAC端口和4個(gè)HDLC端口相對(duì)應(yīng),可以把底層的端口映射到操作系統(tǒng)內(nèi)核。這8個(gè)虛擬網(wǎng)絡(luò)設(shè)備邏輯上相當(dāng)于鏈路層,但實(shí)際上,它們收發(fā)的是IP包。對(duì)虛擬網(wǎng)絡(luò)設(shè)備編寫(xiě)的驅(qū)動(dòng)程序?qū)嶋H上是操作Port_PPC01端口進(jìn)行數(shù)據(jù)收發(fā)。
對(duì)于IP層的改造主要基于執(zhí)行效率的考慮,剪掉不需要執(zhí)行的代碼。比如,PPC/01沒(méi)有鄰居的概念,不需要處理ARP包,這些都是由PPC/02來(lái)實(shí)現(xiàn)的;PPC/01也不轉(zhuǎn)發(fā)數(shù)據(jù)包,它只通過(guò)交換結(jié)構(gòu)那里收發(fā)RIP包,以及一些ICMP包。
使用網(wǎng)絡(luò)分析儀Smartbit來(lái)對(duì)網(wǎng)關(guān)進(jìn)行4項(xiàng)測(cè)試:最大包轉(zhuǎn)發(fā)速率、背板交換能力、延遲和最大吞吐量。前3項(xiàng)的測(cè)試結(jié)果如表1所示。分別單獨(dú)測(cè)試了轉(zhuǎn)發(fā)子系統(tǒng)和背板的延遲。
分別單獨(dú)測(cè)試了背板和轉(zhuǎn)發(fā)子系統(tǒng)的最大吞吐量,得到的最大吞吐量和包長(zhǎng)的關(guān)系如圖5所示。
圖5 最大吞吐量和包長(zhǎng)的關(guān)系,x軸代表包長(zhǎng)(字節(jié)),y軸代表最大吞吐量(百分比)
從上面的數(shù)據(jù)可以看出,網(wǎng)關(guān)的最大包轉(zhuǎn)發(fā)速率達(dá)到了每秒7萬(wàn)包,基本滿(mǎn)足了設(shè)計(jì)要求和應(yīng)用環(huán)境的需要。整個(gè)系統(tǒng)的最大吞吐量受到了轉(zhuǎn)發(fā)子系統(tǒng)的制約,所以提高轉(zhuǎn)發(fā)子系統(tǒng)的運(yùn)行效率是整個(gè)系統(tǒng)后期優(yōu)化工作的一個(gè)重要方面。
基于SoC技術(shù)來(lái)時(shí)實(shí)現(xiàn)嵌入式網(wǎng)關(guān)系統(tǒng)是對(duì)SoC技術(shù)和嵌入式網(wǎng)關(guān)實(shí)現(xiàn)技術(shù)的探索。系統(tǒng)的功能模塊劃分本著軟硬件協(xié)同設(shè)計(jì)的原則,盡量做到劃分合理,針對(duì)本次設(shè)計(jì)的不足,可以在不對(duì)系統(tǒng)設(shè)計(jì)做出大的改變的情況下,對(duì)系統(tǒng)的模塊進(jìn)行升級(jí),來(lái)提高系統(tǒng)的性能。后續(xù)工作除了優(yōu)化現(xiàn)有模塊的功能之外,還可以考慮加入安全模塊,SNMP管理模塊,以豐富網(wǎng)關(guān)的功能。
[1]XIONG Guang-ze,ZHAN Jin-yu.Survey on techniques of SoC hardware/software co-design[J].Journal of Computer Applications,2006,26(4):757-760.
[2]LI Dong-na,CAO Yang,ZHANG Qi,et al.Performance evaluation method ofmulti-task inSoC hardware/softwarecodesign[J].Application Research of Computers,2005,22(6):52-57.
[3]MIAOSheng,DAIGuang-zhong,LIU Hang,et al.Researchonintellectual property core protection in SoC design[J].Application Research of Computers,2007,24(2):113-115.
[4]李鍵,李鵬,張磊.基于SOPC的嵌入式系統(tǒng)設(shè)計(jì)技術(shù)[J].航空計(jì)算技術(shù),2008,38(2):123-126.
[5]江崇科,黃智剛,張軍,等.嵌入式網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27(1):43-46.
[6]鮑興川.TCP/IP通信技術(shù)在XilinxFPGA上的實(shí)現(xiàn)[J].水利水文自動(dòng)化,2007(2):20-23.
[7]余紅娟,潘松.FPGA技術(shù)的應(yīng)用與發(fā)展[J].杭州電子科技大學(xué)學(xué)報(bào),2006,26(3):17-20.
[8]XIE Chang-sheng,LIU Zhi-bing.Research on Linux memory management[J].Application Research of Computers,2005,22(3):58-60.
[9]lessandro Rubini.Linux device driver[M].2rd ed.USA:O'Reilly,2001.
[10]XU Hong-zhe,PENG Xiao-hui,LI Yue,et al.Research of a framework of embedded network protocol stack and its application[J].Journal of Computer Applications,2008,28(4):846-848.
[11]Christian Benvenuti.Understanding Linux network kernel[M].USA:O'Reilly,2005.
[12]WANG Xing-jie,LI Yun,JIANG Hao,et al.Research of embedded cross development technology based on Linux[J].Application Research of Computers,2008,25(1):206-209.
[13]陳年.嵌入式Linux設(shè)備驅(qū)動(dòng)程序的構(gòu)建方法[J].計(jì)算機(jī)科學(xué),2006,33(12):172-174.
[14]LI Jin,GE Jing-guo.Analyses of mutual exclusion mechanism in Linux[J].Application Research of Computers,2005,22(8):72-75.
[15]JIANG Zhi-jian,YANG Wen-chao,WANG Wen-sheng.Realtime communication over ethernet based on Linux[J].Application Research of Computers,2005,22(2):222-224.
計(jì)算機(jī)工程與設(shè)計(jì)2011年9期