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