孟繁成,喬廬峰,陳慶華
(陸軍工程大學(xué) 通信工程學(xué)院,江蘇 南京 210007)
衛(wèi)星通信因其覆蓋廣、通信容量大、不受地理環(huán)境限制等優(yōu)點(diǎn),成為現(xiàn)代通信網(wǎng)的重要組成部分。星載交換機(jī)作為衛(wèi)星網(wǎng)中的關(guān)鍵節(jié)點(diǎn)設(shè)備,其性能將直接影響衛(wèi)星通信網(wǎng)的時(shí)延、帶寬、Qos等重要參數(shù)和指標(biāo)[1]。目前,星載交換機(jī)在結(jié)構(gòu)上通常借鑒地面網(wǎng)中的高性能交換機(jī)的一些關(guān)鍵技術(shù),同時(shí)增強(qiáng)其容錯(cuò)能力,提高其可靠性以適應(yīng)星載需求。由于目前的衛(wèi)星通信網(wǎng)絡(luò)通常采用專用的技術(shù)體制,星載交換機(jī)硬件平臺(tái)標(biāo)準(zhǔn)化水平較低,妨礙了星載交換機(jī)關(guān)鍵硬件平臺(tái)技術(shù)的發(fā)展。RapidIO是目前使用較為廣泛的高性能串行總線技術(shù),通常應(yīng)用于分布式處理單元之間進(jìn)行高速數(shù)據(jù)傳輸。RapidIO技術(shù)支持多種類型的操作模式,既有高可靠的傳輸模式,又有快速傳輸大量數(shù)據(jù)的傳輸模式;互連帶寬大,目前最大可以支持20 Gb/s的互聯(lián)帶寬[2];支持高可靠傳輸,物理層具有錯(cuò)誤檢測(cè)、流量控制和差錯(cuò)重傳的機(jī)制;標(biāo)準(zhǔn)化的水平高,有利于硬件平臺(tái)的統(tǒng)一設(shè)計(jì),可滿足未來(lái)需求。RapidIO接口目前被各類數(shù)字信號(hào)處理器、嵌入式處理器和FPGA等廣泛支持,芯片之間可以通過(guò)RapidIO交換芯片互聯(lián),形成一個(gè)完整的高性能分布式處理平臺(tái)。目前,該技術(shù)在地面通信網(wǎng)絡(luò)中被大量應(yīng)用于移動(dòng)通信基站的標(biāo)準(zhǔn)平臺(tái)設(shè)計(jì),用于實(shí)現(xiàn)分布式處理單元之間的控制和業(yè)務(wù)數(shù)據(jù)傳輸。星載交換機(jī)可以被看作一個(gè)更加復(fù)雜的、特殊的無(wú)線通信節(jié)點(diǎn),可以借鑒地面網(wǎng)基站平臺(tái)的標(biāo)準(zhǔn)化設(shè)計(jì)方法,提高其硬件平臺(tái)的性能和標(biāo)準(zhǔn)化水平。
傳統(tǒng)星載交換機(jī)的結(jié)構(gòu)如圖1所示。它由多個(gè)線卡、管理控制器、路由控制器和交換結(jié)構(gòu)組成。線卡是數(shù)據(jù)進(jìn)出交換機(jī)的入口和出口,其中的收發(fā)器模塊可進(jìn)行光-電和電-光信號(hào)變換[3]。成幀器模塊可以將接收的數(shù)據(jù)包封裝成數(shù)據(jù)幀。網(wǎng)絡(luò)處理器模塊主要進(jìn)行路由表的查找和包分類。流量管理器作為網(wǎng)絡(luò)處理器與交換結(jié)構(gòu)的連接橋梁,將來(lái)自網(wǎng)絡(luò)處理器中不同協(xié)議下的多個(gè)數(shù)據(jù)流在進(jìn)入交換結(jié)構(gòu)之前進(jìn)行處理,從而解決擁塞問(wèn)題。
圖1 傳統(tǒng)交換機(jī)
本文研究的基于RapidIO的星載交換機(jī)平臺(tái)結(jié)構(gòu)如圖2所示。基帶處理單元在完成信號(hào)接收后,將接收的數(shù)據(jù)幀發(fā)往鏈路層處理模塊。鏈路層處理模塊對(duì)接收的數(shù)據(jù)幀校驗(yàn)檢查后,根據(jù)幀的類型進(jìn)行不同處理;在IP層處理單元,業(yè)務(wù)數(shù)據(jù)幀承載的IP包被提取出來(lái)進(jìn)行IP層路由查找,形成本地使用的轉(zhuǎn)發(fā)信息,并等待進(jìn)入交換結(jié)構(gòu)。交換結(jié)構(gòu)負(fù)責(zé)接收到來(lái)的數(shù)據(jù)包,然后根據(jù)每個(gè)包攜帶的轉(zhuǎn)發(fā)信息將其交換到對(duì)應(yīng)的輸出端口。圖2的各模塊使用RapidIO技術(shù)進(jìn)行互連。不同處理單元內(nèi)部不同類型的數(shù)據(jù)幀/包根據(jù)預(yù)先確定的封裝形式進(jìn)行格式轉(zhuǎn)換和封裝操作。
圖2 基于RapidIO的星載交換機(jī)
星載交換機(jī)各模塊間的數(shù)據(jù)傳輸不僅有大容量的業(yè)務(wù)流,還有容量相對(duì)較小、種類較多的控制流[2]。業(yè)務(wù)流需要高速的傳輸模式。在RapidIO中,流寫(xiě)操作模式可以提供高效的數(shù)據(jù)遷移,傳輸效率高達(dá)95%,可以用來(lái)傳輸業(yè)務(wù)流??刂屏鲃t需要較高的可靠性,可以通過(guò)RapidIO中的NWRITE_R(需要返回相應(yīng)的寫(xiě)操作)操作模式進(jìn)行傳輸[4]。
相較于傳統(tǒng)的交換機(jī),基于RapidIO的星載交換機(jī)具有更高的帶寬,各模塊間通過(guò)RapidIO技術(shù)互連,提升了傳輸?shù)目煽啃裕档土藗鬏敃r(shí)延。它的核心是帶有RapidIO接口的大容量交換矩陣。
與傳統(tǒng)的交換矩陣相比,基于RapidIO的大容量交換矩陣同樣要支持單播、組播和廣播,支持無(wú)阻塞交換。除了端口支持RapidIO規(guī)范外,內(nèi)部電路可以采用不同類型的大容量交換矩陣的設(shè)計(jì)方法。本文采用的是大容量三級(jí)Clos結(jié)構(gòu)。與傳統(tǒng)交換矩陣不同的是,RapidIO的最大幀長(zhǎng)為256 B[4],遠(yuǎn)小于以太網(wǎng)等地面網(wǎng)絡(luò)的最大幀長(zhǎng),在前級(jí)需要對(duì)長(zhǎng)包進(jìn)行第一次分割。在交換結(jié)構(gòu)內(nèi)部,RapidIO接收的數(shù)據(jù)包需要根據(jù)大容量交換矩陣的要求將其分割為內(nèi)部信元,然后按照變長(zhǎng)調(diào)度的方法將內(nèi)部信元交換到各個(gè)輸出端口,然后在端口處進(jìn)行重組,輸出RapidIO數(shù)據(jù)包。
交換矩陣的RapidIO端口電路結(jié)構(gòu)如圖3所示,主要包含RapidIO IP核和接口處理電路兩個(gè)模塊。接口處理電路與RapidIO IP核和三級(jí)Clos交換結(jié)構(gòu)相連,主要包括以下兩個(gè)模塊。
(1)發(fā)送模塊:將三級(jí)Clos交換結(jié)構(gòu)的數(shù)據(jù)格式轉(zhuǎn)化為RapidIO IP核支持的幀格式,并將數(shù)據(jù)發(fā)送到RapidIO IP核內(nèi)。
(2)接收模塊:將RapidIO IP核從遠(yuǎn)端設(shè)備中接收到的數(shù)據(jù)進(jìn)行存儲(chǔ),并將其轉(zhuǎn)換為可在交換結(jié)構(gòu)中使用的包格式,然后將其發(fā)送到三級(jí)Clos交換結(jié)構(gòu)的輸入級(jí)中。
圖3 RapidIO端口的結(jié)構(gòu)
本設(shè)計(jì)通過(guò)在ISE上例化IP核的方式實(shí)現(xiàn)RapidIO的點(diǎn)對(duì)點(diǎn)通信功能。Xilinx FPGA中RapidIO IP核結(jié)構(gòu)如圖4所示,包括邏輯層(LOG)、緩存層(BUF)和物理層(PHY)。邏輯層主要定義了I/O端口、包格式,提供了事務(wù)在器件之間傳輸所需要的信息[5]。緩存層主要為物理層提供數(shù)據(jù)存儲(chǔ)的緩沖區(qū),用于實(shí)現(xiàn)高速、可靠的數(shù)據(jù)傳輸和流量控制功能。物理層規(guī)范包括了器件的接口細(xì)節(jié),如包的傳輸機(jī)制、包傳輸錯(cuò)誤時(shí)的處理方式、流量控制和CRC校驗(yàn)等。此外,還有獨(dú)立的時(shí)鐘模塊、復(fù)位模塊和FPGA中的GTX(RapidIO_gt_wrapper)[6]。
圖4 xilinx FPGA中RapidIO IP核的結(jié)構(gòu)
接口處理電路收到來(lái)自RapidIO內(nèi)核發(fā)送的數(shù)據(jù)包后,需要完成轉(zhuǎn)發(fā)表查找、本地頭生成和分割形成內(nèi)部信元等操作。
RapidIO的流寫(xiě)事務(wù)幀格式如圖5所示。包頭所包含的信息為發(fā)送序號(hào)(tid)、事務(wù)類型(ftype)、優(yōu)先級(jí)(prio)、幀的長(zhǎng)度(size)、源地址和目的地址(addr),這些信息是交換矩陣的前級(jí)電路生成的。RapidIO接口處理電路通過(guò)查詢RapidIO包頭信息中的目的地址,確定數(shù)據(jù)要發(fā)往的端口號(hào)(port)、端口映射(portmap)、數(shù)據(jù)是否為多播(multicast)業(yè)務(wù)。目前,實(shí)現(xiàn)的三級(jí)Clos交換結(jié)構(gòu)通常針對(duì)64 B的定長(zhǎng)信元進(jìn)行交換(如圖6所示),而RapidIO發(fā)送來(lái)的數(shù)據(jù)包長(zhǎng)度介于8~256 B,所以RapidIO接口處理電路需要將長(zhǎng)度大于64 B的數(shù)據(jù)包切割成64 B的定長(zhǎng)信元。對(duì)于長(zhǎng)度小于64 B的數(shù)據(jù)包,需要將其長(zhǎng)度補(bǔ)足至64 B。接口處理電路在完成上面的操作后,將轉(zhuǎn)換后的數(shù)據(jù)發(fā)送到三級(jí)Clos交換結(jié)構(gòu)的輸入級(jí)中。
圖5 RapidIO的流寫(xiě)事務(wù)幀格式
圖6 交換機(jī)中定長(zhǎng)信元的幀格式
圖7 為接口處理電路在接收方向的工作流程圖。接口處理電路的發(fā)送模塊會(huì)不斷對(duì)RapidIO IP核進(jìn)行檢測(cè),在檢測(cè)到RapidIO IP核發(fā)送的數(shù)據(jù)有效時(shí),接口處理電路會(huì)將接收到的數(shù)據(jù)包存儲(chǔ)至存儲(chǔ)器A(如圖3所示),并啟用計(jì)數(shù)器對(duì)數(shù)據(jù)包的包長(zhǎng)進(jìn)行計(jì)數(shù)。同時(shí),接口電路的接收模塊將從RapidIO IP核接收到的數(shù)據(jù)包中的包頭信息(如圖5所示)提取得到其優(yōu)先級(jí)和目的地址。然后,接口處理電路的發(fā)送模塊根據(jù)其目的地址查找本地的轉(zhuǎn)發(fā)表,得到其在內(nèi)部交換結(jié)構(gòu)的輸出端口號(hào)和端口映射,并將得到的信息封裝到本地頭(如圖6所示)。之后,接口處理電路的發(fā)送模塊將封裝好的本地頭存儲(chǔ)至存儲(chǔ)器C中。接口電路的接收模塊會(huì)不斷判斷接收到的數(shù)據(jù),當(dāng)接收到的數(shù)據(jù)為數(shù)據(jù)包的最后一個(gè)數(shù)據(jù)時(shí),完成對(duì)數(shù)據(jù)包包長(zhǎng)的計(jì)數(shù),并將數(shù)據(jù)包的包長(zhǎng)信息存儲(chǔ)至存儲(chǔ)器B中。當(dāng)存儲(chǔ)器B非空時(shí),接口處理電路分別讀取存儲(chǔ)器A和存儲(chǔ)器C,得到添加了本地頭后的數(shù)據(jù)包(如圖8所示),然后接口處理電路對(duì)添加了本地頭后的數(shù)據(jù)包的包長(zhǎng)進(jìn)行判斷。當(dāng)數(shù)據(jù)包的包長(zhǎng)大于64 B時(shí),電路會(huì)將數(shù)據(jù)包分割成定長(zhǎng)的64 B,當(dāng)數(shù)據(jù)包的包長(zhǎng)小于64 B時(shí),電路會(huì)將數(shù)據(jù)包補(bǔ)足至64 B。最后,電路將處理后的數(shù)據(jù)包發(fā)送到三級(jí)Clos交換結(jié)構(gòu)中。
圖7 接口處理電路在接收方向的流程
圖8 添加本地頭后的數(shù)據(jù)包
接口處理電路的發(fā)送模塊在接收到由三級(jí)Clos交換結(jié)構(gòu)發(fā)送過(guò)來(lái)的信元后,對(duì)其是否為數(shù)據(jù)幀的首信元進(jìn)行判斷。只有當(dāng)其為數(shù)據(jù)幀的首信元時(shí),才會(huì)對(duì)該信元進(jìn)行存儲(chǔ)。信元存儲(chǔ)完成后,電路不斷檢測(cè)RapidIO IP核的狀態(tài),以確定其是否可以接收數(shù)據(jù)。只有RapidIO IP核可以接收數(shù)據(jù)時(shí),電路才會(huì)讀出存儲(chǔ)器中的信元,將去掉本地頭的該信元發(fā)送至RapidIO IP核中。當(dāng)檢測(cè)到所發(fā)送的信元為數(shù)據(jù)幀的最后一個(gè)信元時(shí),發(fā)送模塊生成一個(gè)指示信號(hào)至RapidIO IP核,用于表示完成了一個(gè)數(shù)據(jù)幀的傳輸。
本設(shè)計(jì)的交換結(jié)構(gòu)采用中間級(jí)無(wú)緩存的存儲(chǔ)-空分-存儲(chǔ)(Memory-Space-Memory,MSM)三級(jí)Clos交換結(jié)構(gòu),如圖9所示。它包含4個(gè)輸入級(jí)模塊(Input Module,IM)、1個(gè)中間級(jí)模塊(Central Module,CM)和4個(gè)輸出級(jí)模塊(Output Module,OM)。
圖9 星載RapidIO交換機(jī)的整體結(jié)構(gòu)
輸入級(jí)模塊包含4個(gè)RapidIO端口、4個(gè)隊(duì)列控制器(Queue Controller,QC)和輸入級(jí)調(diào)度器。來(lái)自于RapidIO接口處理電路的內(nèi)部信元,對(duì)目的端口可能有16個(gè)不同的選擇。為了減少隊(duì)頭阻塞以提高交換結(jié)構(gòu)的吞吐量,本設(shè)計(jì)在輸入端采用虛擬輸出隊(duì)列(Virtual output queuing,VOQ)對(duì)輸入數(shù)據(jù)進(jìn)行排隊(duì)。每個(gè)VOQ中包含8個(gè)不同優(yōu)先級(jí)的隊(duì)列,可為用戶提供8個(gè)不同優(yōu)先級(jí)的服務(wù)。每個(gè)IM中使用4個(gè)隊(duì)列控制器(QC0、QC1、QC2、QC3),分別維護(hù)與4個(gè)不同OM對(duì)應(yīng)的VOQ,即QC0維護(hù)與OM0中4個(gè)輸出端口對(duì)應(yīng)的4個(gè)VOQ,QC1維護(hù)與OM1中4個(gè)輸出端口對(duì)應(yīng)的4個(gè)VOQ,以此類推。在每個(gè)QC中,使用一個(gè)存儲(chǔ)器存放這32個(gè)隊(duì)列,并采用鏈表的形式實(shí)現(xiàn)對(duì)這些邏輯隊(duì)列的控制。輸入級(jí)調(diào)度器主要用于16個(gè)輸入級(jí)隊(duì)列與4條輸出鏈路之間的迭代匹配。
CM中含有16條輸入鏈路和輸出鏈路、1個(gè)中間級(jí)調(diào)度器和1個(gè)無(wú)緩存的16×16交叉開(kāi)關(guān)矩陣(Crossbar)。其中,中間級(jí)調(diào)度器的工作是協(xié)助在各個(gè)IM中共4個(gè)輸入級(jí)調(diào)度器完成鏈路的有效分配并避免發(fā)生沖突。16×16的無(wú)緩存Crossbar用于提供從輸入級(jí)模塊到輸出級(jí)模塊的無(wú)阻塞連接,可以直接將到達(dá)的數(shù)據(jù)轉(zhuǎn)發(fā)出去。在中間級(jí)采用無(wú)緩存的Crossbar方案,可以避免信元亂序,簡(jiǎn)化控制邏輯的設(shè)計(jì)。
輸出級(jí)模塊與輸入級(jí)模塊結(jié)構(gòu)相同。
基于RapidIO的星載交換機(jī)的實(shí)現(xiàn)選用Xilinx的xc6vlx240T FPGA,開(kāi)發(fā)環(huán)境為ISE14.7,電路模塊采用Verilog HDL編程,并用Modelsim 10.2c進(jìn)行仿真分析。
圖10為接口處理電路接收模塊從RapidIO IP核中接收數(shù)據(jù)的過(guò)程。接口處理電路的接收模塊在從RapidIO IP核內(nèi)接收到數(shù)據(jù)包后,加入交換結(jié)構(gòu)中進(jìn)行交換所需的信息。圖10中的val_treq_tdata為流寫(xiě)事務(wù)的包格式,前64 bit為包頭信息。接收模塊根據(jù)流寫(xiě)事務(wù)的包頭信息來(lái)確定數(shù)據(jù)的輸出端口號(hào)(i_cell_port)是否為多播(i_cell_multicast)、優(yōu)先級(jí)(i_cell_prio)等信息,并將這些信息封裝成一個(gè)適用于交換結(jié)構(gòu)的本地頭,然后將新的包頭作為輸入(data_fifo_din)存儲(chǔ)到存儲(chǔ)器C中。
圖10 接口處理電路接收模塊的仿真結(jié)果
圖11 顯示了接口處理電路發(fā)送模塊在接收到數(shù)據(jù)后進(jìn)行存儲(chǔ)并發(fā)送到RapidIO IP核的過(guò)程。輸出級(jí)輸出的數(shù)據(jù)位寬為64 bit,電路會(huì)判斷到來(lái)的數(shù)據(jù)是否為數(shù)據(jù)幀的首個(gè)數(shù)據(jù)。當(dāng)它為首個(gè)數(shù)據(jù)時(shí),將到來(lái)的數(shù)據(jù)進(jìn)行存儲(chǔ),并將此時(shí)cell_fifo_din_的值賦給cell_fifo_din,同時(shí)將cell_fifo_wr置為高電平完成數(shù)據(jù)的存儲(chǔ)。發(fā)送模塊將輸出級(jí)發(fā)送來(lái)的數(shù)據(jù)存儲(chǔ)到存儲(chǔ)器后,需要再把數(shù)據(jù)發(fā)送到RapidIO IP核內(nèi)。當(dāng)信號(hào)cell_fifo_rd為1時(shí),表示電路的發(fā)送模塊開(kāi)始從存儲(chǔ)器中讀取數(shù)據(jù)。發(fā)送模塊在讀取出數(shù)據(jù)后發(fā)送給RapidIO IP核,完成與RapidIO IP核之間的通信。
圖11 接口處理電路發(fā)送模塊的仿真結(jié)果
如圖12所示,接口處理電路將數(shù)據(jù)發(fā)送至三級(jí)Clos交換結(jié)構(gòu)的輸入級(jí)。同時(shí),發(fā)送到三級(jí)Clos交換結(jié)構(gòu)中的還有信元的包頭信息,其中的i_cell_dlp表示數(shù)據(jù)的優(yōu)先級(jí),i_cell_portmap表示端口映射,i_cell_first表示信元是否為數(shù)據(jù)幀的首個(gè)信元,i_cell_port表示信元的輸出端口。從圖12可以看出,到來(lái)的信元為數(shù)據(jù)幀的首個(gè)信元,優(yōu)先級(jí)為0,端口映射為1,輸出端口為0。
圖12中的數(shù)據(jù)在經(jīng)過(guò)存儲(chǔ)轉(zhuǎn)發(fā)、排隊(duì)調(diào)度后,發(fā)往其對(duì)應(yīng)的輸出端口。圖13為輸出端口0的仿真圖,其中的data為三級(jí)Clos交換結(jié)構(gòu)發(fā)往接口處理電路的數(shù)據(jù)??梢钥吹剑瑘D12中輸入級(jí)中的數(shù)據(jù)i_cell_fifo_din與圖13中輸出端口0的數(shù)據(jù)data為同一數(shù)據(jù),表明交換結(jié)構(gòu)完成了數(shù)據(jù)交換,將其從對(duì)應(yīng)的目的端口輸出到了接口處理電路中。
圖12 三級(jí)clos交換結(jié)構(gòu)輸入級(jí)的仿真結(jié)果
圖13 三級(jí)clos輸出級(jí)端口0的仿真結(jié)果
本文對(duì)基于RapidIO的星載交換機(jī)關(guān)鍵硬件平臺(tái)技術(shù)進(jìn)行了研究,給出了基于RapidIO的星載交換機(jī)的硬件平臺(tái)結(jié)構(gòu),分析了RapidIO的典型總線事務(wù)與交換機(jī)設(shè)計(jì)需求之間的映射關(guān)系。在此基礎(chǔ)上,重點(diǎn)設(shè)計(jì)和分析了RapidIO交換機(jī)中的接口處理電路及其收發(fā)操作流程,給出了作為交換核心的3級(jí)Clos交換結(jié)構(gòu)的具體組成。交換機(jī)具有16個(gè)端口,單端口最大速率為5 Gb/s,交換容量為80 Gb/s。交換機(jī)采用Verilog硬件描述語(yǔ)言設(shè)計(jì)完成,采用modelsim10.2c進(jìn)行仿真分析,給出了關(guān)鍵電路的典型仿真結(jié)果。交換機(jī)在Xilinx xc6vlx240t上進(jìn)行了具體的綜合實(shí)現(xiàn),驗(yàn)證了設(shè)計(jì)的可行性。