杜 超, 陳濟民(華北計算技術研究所專裝技術研發部,北京100083)
隨著微電子技術的發展,芯片的集成度越來越高,片上系統(SoC)的發展已經是必然趨勢。SoC具有可擴展性好,成本低,設計周期短,可靠性高,功耗低等優點。SoC也為各種網絡產品的研發提供了新的思路[1-4]。由于SoC具有良好的可重配置性,可很方便地更改配置和屬性,利用該技術設計出的產品具有很好的靈活性和安全性。在沒有引入統一的路由控制機制以及沒有統一的TCP/IP協議支持的測控網中連通性差、靈活性弱,這就使網絡應用模式受到限制,更無法支持各種上層應用。本文介紹一種基于SoC及IP核技術的專用嵌入式網關的設計與實現,以實現在HDLC鏈路上進行IP分組的傳輸并和以太網實現路由交換,可有效地解決廣域測控網的互連互通性,并且系統的設計也可以方便部署各種上層應用。
網關以一個Xilinx Virtex-4 Fx100芯片[5-7]為核心,自主開發了所需的系列IP核,并設計相應的外圍電路。XilinxVirtex-4 Fx100芯片內部有兩個PowerPC 405 CPU核(分別稱為PPC/01和PPC/02)和4個以太網MAC核。2個PowerPC處理器核分別承擔著不同的工作。其中,PPC/01主要負責路由信息的維護,以及與用戶的交互;PPC/02主要負責調度交換結構在各端口之間轉發IP包,實現ARP協議,維護映射表,并且負責查找轉發表和映射表。一個正確的數據包的處理過程如圖1所示。
進入系統的鏈路層幀被 MAC/HDLC輸入輸出處理部件剝去鏈路層頭,進行正確性校驗,正確的包放入輸入端口的相應緩沖區,并向PPC/02發出接收完成中斷,請求PPC/02處理。校驗錯誤或者輸入緩沖區滿導致阻塞時,接收端口將校驗錯誤的IP頭和一部分負載放入輸入端ICMP緩沖區,并產生中斷來通知PPC/02處理。
對于輸入的IP包,PPC/02收到中斷信號之后,會查找轉發表,找到下一跳的IP地址和輸出端口號;然后查找映射表,查找下一跳的MAC地址,查找到的目的MAC地址被放入輸出端口的寄存器內。然后PPC/02調度交換部件執行交換,把IP包交換到相應的輸出端口。輸出端口將此IP包和目的MAC地址一起組裝成鏈路層數據幀發送出去。

圖1 系統工作原理
如果這個IP包是送往本網關的RIP協議數據包,就通過交換結構把數據包交換PPC/01的輸入緩沖區,然后通過中斷告訴PPC/01有數據到達,PPC/01收到中斷后從自己的輸入緩沖區中讀取數據報,并根據RIP包來維護路由信息。
對于輸入的ARP包,PPC/02要么根據ARP包的內容來更新映射表,要么生成ARP響應包,放入輸出端口的相應緩沖區,由輸出端口發送出去。
用戶則通過PPC/01提供的人機交互接口,對網關的相關參數進行配置,也可以獲取網關運行的狀態信息。
系統劃分為8個模塊:PPC/01處理器,PPC/02處理器,MAC端口部件,HDLC端口部件,快速交換部件,轉發引擎部件,地址映射部件和雙機通信部件,如圖2所示。圖中的Port_PPC01和Port_PPC02分別代表PPC/01和PPC/02的輸入/輸出緩沖區。這兩個緩沖區是交換結構和兩個CPU核之間交換數據的通路。各模塊功能簡述如下:
(1)PPC/01。PPC/01上運行Linux操作系統和Zebra路由軟件,負責建立和維護路由表,轉發表以及配置管理工作。PPC/01也分析PPC/02通過雙機通信送來的狀態信息,并根據狀態信息的含義進行必要的處理,比如被通知從端口 Port_PPC01的接收緩沖區中讀取數據。另外,它提供一個人機交互接口,使用戶可以在靜態、動態運行的條件下對網關進行配置。各種上層應用也可以部署在PPC/01上。
(2)PPC/02。PPC/02運行Xilkernel微內核操作系統,負責對輸入的包進行分析,根據包的類型和目的地址來調度交換結構,將包交換到合適的目的端口。PPC/02也負責實現ARP協議,維護映射表。
(3)MAC端口部件。有4個MAC端口部件。MAC端口對外直接連接到以太網,對內與交換結構連接。它是以太網數據幀輸入輸出的硬件實現部分。它把接收到的以太網幀進行處理,放入合適的輸入緩沖區,也負責把輸出緩沖區中的IP包裝配成幀發送出去。
(4)HDLC端口部件。有4個HDLC端口部件。HDLC端口是一個簡化HDLC收發端口,實現的功能和MAC端口類似,負責HDLC幀的收發。
(5)快速交換部件。快速交換部件是整個系統數據流動的中心部件。主要職責是將各個端口輸入緩沖區內的IP分組快速地交換到正確的目的端口的輸出緩沖區。快速交換部件采用總線式交換,它所交換的數據都是IP包,即第三層交換。

圖2 系統硬件結構
(6)轉發引擎部件。轉發引擎部件的功能是根據輸入的目的IP地址得到其最長匹配目的網絡地址或目的主機IP地址在路由表中的索引。
(7)地址映射部件。地址映射部件根據輸入的下一跳IP地址得到匹配的MAC地址。
(8)雙機通信部件。雙機通信部件負責實現兩個CPU核之間的通信,在兩個CPU核之間交換控制和狀態信息。雙機通信由兩部分組成,共享存儲器和中斷控制器。兩個處理器都通過它們的OCM總線連接到一個雙口RAM,共享存儲器被劃分成兩個單向緩沖區,兩個CPU核分別只對其中一個可寫,對另一個可讀。每個處理器都有一個中斷接口,通過中斷告知對方有數據到達,或者向對方請求數據。
按照系統的功能劃分,軟件的結構也分為 PPC/01和PPC/02兩部分,如圖3所示。PPC/01上運行著系統支撐子系統,配置管理子系統和路由子系統。PPC/02上運行轉發子系統。各子系統的功能如下:
(1)轉發子系統。轉發子系統在Xilkernel微內核操作系統上實現,主要職責是負責包的快速轉發,調度交換結構在各端口之間交換IP包。主要包括管理控制模塊、IP協議處理模塊、ARP協議處理模塊、ICMP協議處理模塊,雙機通信模塊以及各驅動模塊。
(2)系統支撐子系統。系統支撐子系統運行在嵌入式Linux操作系統上,它為路由子系統和配置管理子系統提供了一個平臺,并且也是其它各種應用部署的平臺。支撐子系統是PPC/01與系統其它部分協調和交互的橋梁,支撐子系統向上連接路由子系統,向下與轉發子系統連接,實現 PPC/01與PPC/02的通信。為了把網關的硬件結構和Linux操作系統融合起來,需要對Linux的TCP/IP協議棧進行改造,后面會介紹。
(3)路由子系統。路由子系統負責維護路由表,并根據路由表來更新轉發表。
(4)配置管理子系統。配置管理子系統是網關運行過程中用戶對其進行配置和管理的接口。用戶可以通過配置管理子系統來添加、刪除靜態路由,調整路徑的Metric值,選擇路由協議等,還可以通過配置管理子系統獲得系統運行的狀態信息,以及各種統計信息。
上面提到的MAC端口部件,HDLC端口部件,快速交換部件,轉發引擎部件,地址映射部件和雙機通信部件,在本系統中均采用了IP核技術進行實現,IP核是系統研發的核心,也是整個系統的基石,IP核設計的好壞直接影響到整個系統的集成、調試工作。另外,系統支撐子系統需要對Linux TCP/IP協議棧進行改造,也是系統實現的難點之一。
HDLCIP核負責HDLC幀的收發。接收時,HDLCIP核把輸入的幀去掉鏈路層頭部之后,放進IP分組輸入緩沖區,對IP分組首部進行校驗、TTL-1、首部校驗錯的IP分組丟棄、首部的再校驗、并將校驗結果重寫入校驗和字段,然后向PPC/02發出中斷請求,通知PPC/02將此IP包交換到其它端口;發送過程則不需要程序的干預,IP分組輸出緩沖區中的IP包被硬件自動裝配成幀發送出去。
HDLCIP核由端口緩沖結構和HDLC收發器組成。端口緩沖結構對數據進行緩沖,按照協議對數據的流向進行控制,完成與交換結構和程序的交互。HDLC端口的緩沖區包括:HDLC幀輸入/輸出緩沖區,IP分組交換輸入/輸出緩沖區,IP分組首部緩沖區,輸入/輸出端ICMP分組緩沖區。HDLC收發器為單通道收發器,它主要由發送模塊、接收模塊和控制模塊組成。HDLC收發器以全雙工方式工作。

圖3 系統軟件結構
通過鏈路協議IP核的設計,實現了具有自主知識產權的HDLC協議控制器,并進行了優化處理,提高了其實時性和抗干擾能力。
快速交換IP核的作用就是根據轉發子系統分析出的IP分組轉發結果,快速完成IP分組從輸入端口到輸出端口的移動。
快速交換IP核主要由輸入隊列、輸出隊列、交換選路結構和調度器組成,如圖4所示。其中的關鍵部件為調度器和交換選路結構。
調度器采用狀態機設計方法和適當的調度算法,是整個交換結構數據交換的控制樞紐,它負責根據各個輸入、輸出端口的狀態和所有數據通路的狀態,做出正確、高效、公平的決策,調度每個端口的各個輸入IP分組如何快速的通過交換結構到達輸出端口。交換選路結構則是根據調度器的調度命令具體的完成各個IP分組的快速交換。通過快速交換IP核的設計,實現了一個以交換結構為中心的數據分組交換平臺,可以在其之上快速方便地衍生出更多或功能更復雜的設計,為今后的產品設計奠定了基礎。
Linux TCP/IP協議棧改造是實現系統支撐子系統的關鍵內容。Linux是開放源代碼的操作系統,Linux TCP/IP協議棧本身的功能是很成熟強大的[8-15],功能十分全面。通過對協議棧進行改造,然后重新編譯內核,來得到實際需要的協議棧。
Linux TCP/IP協議棧的包處理分為4層:鏈路層(以太網幀)→網絡層(IP包)→傳輸層(TCP,UDP包)→應用層。需要改造的部分在鏈路層和網絡層,傳輸層以上則不需要修改。
對于鏈路層的改造是由于 PPC/01物理上是通過 Port_PPC01端口收發數據的,而Port_PPC01端口與交換結構相連,交換結構交換的都是IP包,所以PPC/01收發的也都是IP包。這與Linux TCP/IP協議棧原本進出的都是鏈路層幀是完全不一樣的。需要把Linux TCP/IP協議棧的鏈路層替換成實際的鏈路層。由于PPC/01負責維護路由信息,所以它必須得了解網關的輸入輸出端口,通過建立8個虛擬網絡設備,來與物理上的4個MAC端口和4個HDLC端口相對應,可以把底層的端口映射到操作系統內核。這8個虛擬網絡設備邏輯上相當于鏈路層,但實際上,它們收發的是IP包。對虛擬網絡設備編寫的驅動程序實際上是操作Port_PPC01端口進行數據收發。
對于IP層的改造主要基于執行效率的考慮,剪掉不需要執行的代碼。比如,PPC/01沒有鄰居的概念,不需要處理ARP包,這些都是由PPC/02來實現的;PPC/01也不轉發數據包,它只通過交換結構那里收發RIP包,以及一些ICMP包。
使用網絡分析儀Smartbit來對網關進行4項測試:最大包轉發速率、背板交換能力、延遲和最大吞吐量。前3項的測試結果如表1所示。分別單獨測試了轉發子系統和背板的延遲。
分別單獨測試了背板和轉發子系統的最大吞吐量,得到的最大吞吐量和包長的關系如圖5所示。

圖5 最大吞吐量和包長的關系,x軸代表包長(字節),y軸代表最大吞吐量(百分比)
從上面的數據可以看出,網關的最大包轉發速率達到了每秒7萬包,基本滿足了設計要求和應用環境的需要。整個系統的最大吞吐量受到了轉發子系統的制約,所以提高轉發子系統的運行效率是整個系統后期優化工作的一個重要方面。
基于SoC技術來時實現嵌入式網關系統是對SoC技術和嵌入式網關實現技術的探索。系統的功能模塊劃分本著軟硬件協同設計的原則,盡量做到劃分合理,針對本次設計的不足,可以在不對系統設計做出大的改變的情況下,對系統的模塊進行升級,來提高系統的性能。后續工作除了優化現有模塊的功能之外,還可以考慮加入安全模塊,SNMP管理模塊,以豐富網關的功能。
[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的嵌入式系統設計技術[J].航空計算技術,2008,38(2):123-126.
[5]江崇科,黃智剛,張軍,等.嵌入式網關的設計與實現[J].計算機工程與設計,2006,27(1):43-46.
[6]鮑興川.TCP/IP通信技術在XilinxFPGA上的實現[J].水利水文自動化,2007(2):20-23.
[7]余紅娟,潘松.FPGA技術的應用與發展[J].杭州電子科技大學學報,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設備驅動程序的構建方法[J].計算機科學,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.