王 璐,龔 俊
(中國兵器工業(yè)第五八研究所,四川 綿陽 621000)
隨著高性能嵌入式系統(tǒng)的不斷發(fā)展,數(shù)據(jù)傳輸能力和信號處理能力也在不斷的提高。但與處理器內(nèi)核性能的增長速率相比,總線頻率的提升仍然滯后,且兩者之間的差距在不斷擴(kuò)大。處理器性能的提升已無法滿足處理器間或處理器與外設(shè)間高速通信的需求。因此,需要新興的高性能總線互連技術(shù)來滿足系統(tǒng)互連通信的更高要求[1]。
RapidIO 是新一代高速互連技術(shù),已于2004 年被國際標(biāo)注化組織(ISO)和國際電工協(xié)會(IEC)批準(zhǔn)為ISO/IEC DIS 18372 標(biāo)準(zhǔn)。RapidIO 技術(shù)主要面向高性能嵌入式系統(tǒng)的互連通信,可在4 對差分線上實(shí)現(xiàn)10Gbps 的有效傳輸速率,而且具有比萬兆以太網(wǎng)、PCI express 更高的傳輸速率[2]。RapidIO 互連定義包括兩類技術(shù):一類是面向高性能微處理器及系統(tǒng)互連的并行接口;另一類是面向串行背板、DSP 和相關(guān)串行控制平面應(yīng)用的串行接口。
RapidIO 采用三層分級體系結(jié)構(gòu),即邏輯層、傳輸層和物理層:①邏輯層:最高層,定義了全部協(xié)議和包的格式,為端點(diǎn)器件發(fā)起和完成事務(wù)提供必要的信息;②傳輸層:中間層,定義了交換器件如何將傳輸?shù)臄?shù)據(jù)包路由到目標(biāo)器件,即定義了設(shè)備ID 路由方法;③物理層:最底層,定義了相鄰處理單元之間的電氣連接,描述器件級接口規(guī)范。例如:包傳輸機(jī)制、流量控制、電氣特性和低級錯誤管理等內(nèi)容[3]。分層結(jié)構(gòu)如圖1 所示。
串行RapidIO 的傳輸操作基于請求和響應(yīng),數(shù)據(jù)包(packet)是消息傳遞的基本通信單元。RapidIO 系統(tǒng)一般由端點(diǎn)器件和交換器件組成,每個器件由唯一的設(shè)備ID標(biāo)識。端點(diǎn)器件產(chǎn)生或接收數(shù)據(jù)包,交換器件實(shí)現(xiàn)數(shù)據(jù)包在各端點(diǎn)間的路由和傳遞,不對數(shù)據(jù)包做解析。圖2是傳輸操作的流程圖。首先由發(fā)起器件產(chǎn)生一個傳輸請求,請求包被傳輸?shù)较噜彽慕粨Q器件,通過交換器件這個請求包被完整的轉(zhuǎn)發(fā)到目標(biāo)器件。目標(biāo)器件根據(jù)請求完成相應(yīng)操作后,發(fā)送相應(yīng)的響應(yīng)包,經(jīng)過交換器件傳回到發(fā)起器件。至此一個完整的傳輸過程完成。
圖1 RapidIO 體系結(jié)構(gòu)圖Fig.1 Structure diagram of RapidIO system
圖2 RapidIO 傳輸操作流程圖Fig.2 Flow chart of RapidIO transmission
RapidIO 互連系統(tǒng)采用Freescale 公司的MPC8548 處理器作為端點(diǎn)器件,一端設(shè)置為主設(shè)備,另一端設(shè)置為從設(shè)備。采用IDT 公司的Tsi578 芯片作為交換器件,使能其中兩個端口并設(shè)置為1×模式,波特率為3.125 Gbps。RapidIO 硬件平臺互連示意圖如圖3 所示。
圖3 硬件平臺互聯(lián)圖Fig.3 Interconnection diagram of hardware platform
MPC8548 處理器內(nèi)部具有PowerPC e500 的內(nèi)核以及CPM 通信處理模塊,內(nèi)部的時鐘頻率為1GHz。除此之外,還集成了RapidIO 控制器,其中1×/4×串行通道的傳輸速率可配置為1.25Gbps、2.5Gbps 或3.125Gbps,消息單元支持存儲地址寄存器最大長度4KB 的消息[4]。
Tsi578 芯片是Tundra 公司推出的RapidIO 交換產(chǎn)品,后并入IDT 公司,該芯片基于RapidIO 1.3 規(guī)范,共有16 路串行通道,可以靈活配置為8×4 或16×1 的端口工作方式,端口數(shù)最多可以配置為16 個,芯片內(nèi)部交換帶寬達(dá)到80Gbps,提供無阻塞的全雙工交換能力。高性能的SerDes 通道可以實(shí)現(xiàn)單路1.25Gbps、2.5Gbps或3.125Gbps 的傳輸速率[5]。
本系統(tǒng)軟件采用VxWorks 嵌入式實(shí)時操作系統(tǒng)[6],由windRiver 公司研制,使用wind 內(nèi)核,具有高效的實(shí)時任務(wù)調(diào)度、中斷管理、實(shí)時的系統(tǒng)資源和任務(wù)通信等功能,內(nèi)核精簡并且可高度裁剪、高效、穩(wěn)定并具有良好的可移植性,專門用于對實(shí)時性要求較高的硬件設(shè)備。
RapidIO 總線驅(qū)動包含:本地設(shè)備初始化、網(wǎng)絡(luò)配置、消息傳遞這三個部分基本功能。
本地設(shè)備初始化首先要初始化MPC8548 處理器內(nèi)部的RapidIO 控制器和使能端口,這是進(jìn)行RapidIO 通信的基礎(chǔ)。其次要配置TLB 表,申請本地設(shè)備地址空間。最后要創(chuàng)建維護(hù)窗口,用以完成維護(hù)讀/寫操作。其中,維護(hù)窗口的建立及維護(hù)讀/寫函數(shù)實(shí)現(xiàn)如下:
(1)建立維護(hù)窗口:
STATUS rioSetupMaintenanceWindow (UINT32 rioBase,UINT16 deviceID,UINT8 hopCount,UINT32 offset, UINT32 window);
(2)維護(hù)讀操作:
STATUS rioMaintenanceRead(UINT16 targetId, UINT8 hopCount,UINT32 offset,UINT32 *data, UINT32 window);
(3)維護(hù)寫操作:
STATUS rioMaintenanceWrite(UINT16 targetId, UINT8 hopCount,UINT32 offset,UINT32 data, UINT32 window);
網(wǎng)絡(luò)枚舉與配置包含了枚舉網(wǎng)絡(luò)設(shè)備、分配設(shè)備ID、維護(hù)路由表以及地址空間映射等主要功能。
端點(diǎn)器件(主設(shè)備)在完成本地初始化后,要進(jìn)行RapidIO 網(wǎng)絡(luò)的枚舉與配置。需要查找與之相連的端點(diǎn)器件(從設(shè)備),并通過讀取制造商ID 判斷是端點(diǎn)器件或交換器件。若為端點(diǎn)器件,首先要鎖定此設(shè)備,表明主設(shè)備即將要對它進(jìn)行配置;其次要將此從設(shè)備ID 由0xFF 更新為RapidIO 網(wǎng)絡(luò)設(shè)備ID 編號;再次要更新路由表,指明主設(shè)備通過交換器件到該從設(shè)備的路徑;最后要進(jìn)行地址空間映射,為主設(shè)備訪問該從設(shè)備做好準(zhǔn)備。主要枚舉和配置流程如圖4 所示。
路由表維護(hù)函數(shù)實(shí)現(xiàn)如下:
圖4 枚舉與配置流程圖Fig.4 Flow chart of enumerate & configuration device
(1)添加路由項:
STATUS rioAddRouteEntry ( UINT16 targetId, UINT8 hopCount ,UINT16 routeDestid, UINT8 routePort) ;
(2)獲取路由項:
STATUS rioGetRouteEntry ( UINT16 targetId, UINT8 hopCount ,UINT16 routeDestid, UINT8 *routePort);
RapidIO 的消息傳遞方式主要有Doorbell、Message、Nread 和Nwrite 等方式。軟件中主要使用的函數(shù)實(shí)現(xiàn)如下:
(1)Doorbell 方式。Doorbell 消息傳遞方式適合傳遞8bit 或者16bit 的短消息,主要用于處理器間的中斷。
UINT32 rioSendDoorbell (UINT16 localPort, UINT16 destId, UINT16 data);
(2)Message 方式。Message 方式最多可傳輸4096 字節(jié)數(shù)據(jù)。這種消息傳遞方式類似于以太網(wǎng)的傳輸方式,主設(shè)備不需要知道從設(shè)備的存儲器狀況,數(shù)據(jù)存放的位置由destId 決定的郵箱號確定。郵箱號類似于以太網(wǎng)協(xié)議中的端口號。
UINT32 rioSendMessage(UINT16 mbox, UINT32 destId,void *buffer, UINT32 len);
UINT32 rioReceiveMessage(UINT16 mbox, void *buf,UINT32 len);
(3)Nread 和Nwrite 方式。此種方式可直接讀寫從設(shè)備的存儲器。數(shù)據(jù)長度在1~256 字節(jié)之間,返回的數(shù)據(jù)應(yīng)進(jìn)行對齊限制。
UINT32 rioDmaNread(UINT8 chan, UINT16 destId,UINT32 localAddr, UINT32 rioAddr, UINT32 byteCnt);
UINT32rioDmaNwrite(UINT8 chan, UINT16 destId,UINT32localAddr, UINT32rioAddr, UINT32byteCnt);
在波特率為1.25Gbps、2.5Gbps 和3.125Gbps 時,分別測算出帶寬及效率。帶寬的計算公式為:傳輸數(shù)據(jù)量/傳輸時間;效率的計算公式為:實(shí)際帶寬/理論帶寬。性能測試結(jié)果如表1 所示。
表1 性能測試結(jié)果Tab.1Theresultofperformancetest
該RapidIO 總線驅(qū)動采用采用VxWorks 嵌入式實(shí)時操作系統(tǒng),軟件設(shè)計采用模塊化設(shè)計,提高了系統(tǒng)的可靠性和可維護(hù)性,具有高效的實(shí)時任務(wù)調(diào)度、中斷管理、實(shí)時的系統(tǒng)資源和任務(wù)通信等功能,內(nèi)核精簡并且可高度裁剪、高效、穩(wěn)定并具有良好的可移植性。性能測試表明,該系統(tǒng)滿足RapiIO 高速通信需求,達(dá)到了設(shè)計要求。
[1]李鵬.基于RapidIO 的雙主機(jī)節(jié)點(diǎn)嵌入式系統(tǒng)互連設(shè)計[J].電子科技,2014,4.
[2][美]Sam Fuller,等. RapidIO 嵌入式系統(tǒng)互連[M].電子工業(yè)出版社,2006.
[3]張強(qiáng).串行RapidIO 互連系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].南京理工大學(xué),2013.
[4]Freescale Semiconductor. MPC8641 and MPC8641D Integrated Host Processor Hardware Specifications[EB/OL]. http://www.freescale.com,2009/07/2.
[5]Tundra Semiconductor Corporatiot. Tsi578TM Serial RapidlO Switch UserManual[EB/OL]. http://www.tundra.com, 2006/10/11.
[6]Wind River Systems, Ine. VxWorks Device Driver Developer' S Guide,6.4,2006,9.
[7]張娟,蘇海冰,吳欽章.基于多處理器的高速RapidIO[J].計算機(jī)工程,2014,9.