隨著嵌入式系統對信號處理性能和數據傳輸性能的不斷提高,單純依靠提高處理器性能來改善系統性能的方法已無法滿足需求。并行計算正日益成為一種增加系統處理能力的可行方向,多處理器間的數據傳輸、資源共享與同步便成了一個制約系統性能的重要環節。傳統依靠提升并行總線寬度與速率的方法已不能滿足嵌入式市場對總線帶寬的需求。因此,需新興的高性能總線互聯技術來實現系統互聯通信的更高要求。
RapidIO互連構架作為一種基于可靠性的開放式互連協議標準,以其高效率、高穩定性、低系統成本等特點,可為通信系統各器件間提供高帶寬、低延時數據傳輸的解決方案。RapidIO具備交換功能,具有完備的包交換、應答、中斷、容錯機制,可靠性高,傳輸效率高于PCIE和千兆以太網,可為芯片到芯片,板到板提供高性能的互聯,其性能可達到1~60 Gbit·s-1,能夠為新一代高性能嵌入式系統互聯提供良好的解決方案。本文討論了一種基于RapidIO的具有雙主機節點的嵌入式系統互聯設計,給出系統設計方案及驅動軟件設計,并在具體應用環境中對設計方案進行了系統驗證。
1 、系統方案
在RapidIO互聯應用中,通常不會將RapidIO端點相互直接連在一起,而是通過交換機實現端點之間的系統互聯,這樣可使系統的成本減少,并改善系統的性能。典型的RapidIO交換網絡節點分為主機節點(Host)、交換機(Switch)和端節點(End-Point)3類,每個設備由DeviceID唯一標識。系統啟動時,主機節點負責系統初始化和網絡的枚舉,在工作時,主機節點將協調和監控系統運行和錯誤恢復,同時,主機節點可看做是交換網絡中的一個端節點,負責發送和接收網絡中的數據包。交換機實現端系統的互連,且完成RapidIO包的路由和轉發。
為了實現RapidIO通信功能,主機節點需要實現RapidIO控制器,RapidIO控制器的實現主要有兩種方式,一種是通過FPGA的專用IP核來實現,這種方式受限于IP核對器件的限制,成本較高,且主機節點通常要實現數據處理與系統管理功能,單靠FPGA實現不太現實。另一種方式是通過集成有RapidIO控制器的CPU來實現,如PowerPC。PowerPC處理器功能強大,處理速度快,可以配合嵌入式操作系統完成任務的管理和調度,同時較多PowerPC處理器集成有RapidIO控制器,因此大多使用RapidIO網絡的嵌入式領域都選用PowerPC做為主機節點。
本系統采用兩片MPC8641D處理器芯片做為主控制器,Freescale生產的MPC8641D芯片內部集成了2個e600內核,每個核包含32 kB的一級指令Cache和數據Cache,以及1個1 MB的二級Cache。高集成MPC8641D能夠代替多器件,極大節省了底板制造的成本和空間。MPC8641D芯片集成了RapidIO控制器,其中1x/4x串行通道的傳輸速率可為1.25 Gbit·s-1、2.5 Gbit·s-1和3.125 Gbit·s-1,消息單元支持存儲地址寄存器最大長度4 kB的消息。
系統選用TS1578做為交換機,Tsi578交換芯片是Tundra公司的第3代RapidIO交換芯片,其支持高達80 Gbit·s-1的聚合帶寬,可獨立配置成最多8個4X端口或16個1X端口,端口的頻率可配置為1.25 Gbit·s-1、2.5 Gbit·s-1、3.125 Gbit·s-1,支持混合的速率和帶寬配置。SRIO的路由和交換是通過每個端點設備的ID號來實現的,每個端點設備都會分配一個唯一的ID號,當一個端點發出一個數據包時,在其的包頭中包含有目的終端的ID號和發送源端的ID號。Tsi578的每個端口上都有一個交換路由表,根據路由表就可決定此數據包由哪一個端口送出。
基于RapidIO的雙主機嵌入式互聯拓撲結構如圖1所示。
圖1 基于RapidIO的雙主機嵌入式互聯拓撲結構
2 、驅動軟件設計
2.1 系統主從方式初始化
在使用RapidIO進行通信前,首先要進行RapidIO系統初始化,主要包括SRIO控制器初始化、Doorbell初始化、Message初始化、DMA初始化、RapidIO交換機初始化、RapidIO網絡初始化等。
系統中采用兩塊CPU,兩塊CPU均可作為主機節點對RapidIO網絡進行配置,為了保證RapidIO網絡能夠正常初始化,需使用主從方式的RapidIO網絡初始化,初始化時由某一RapidIO節點進行主配置,實現RapidIO網絡初始化,其他節點等待網絡初始化成功后啟動各自功能。如果進行主配置的節點出現問題,未完成RapidIO網絡初始化,具有從配置功能的節點需要進行RapidIO網絡初始化,以提高RapidIO網絡初始化的魯棒性。
由于TSI578設備在重復初始化時會產生異常,為了防止主從設備同時對交換機進行初始化,設計時考慮初始化時首先判斷RIO_HOST_BASE _ID_LOCK寄存器是否已被鎖定,若已被鎖定,表明交換機已被初始化,則該節點直接跳過這一步驟。優勢在于對應用而言只需提供一個初始化接口,設計人員在進行應用編程時無需考慮主設備或從設備是否已經對交換機進行了初始化,方便了應用設計。
2.2 網絡映射
網絡映射結果將系統中所有非主機結點的RapidIO空間映射到自己的地址空間上,不同的非主機節點根據需求不同可映射不同的起始地址和映射空間。系統中使用rioMapOutb和rioMapInb接口動態配置RapidIO網絡地址映射,映射的地址長度都必須為4 kB的倍數,且地址需要對齊,映射后在此存儲空間內進行通信。軟件中使用的函數接口如下:
(1)STATUS rioMapOutb(UINT32 lstart,UINT32rstart,UINT32 size,UINT32 tid,UINT32 flags)rioMapOutb映射外部節點tid的以rstart開始的內存空間到本地lstart地址。
(2)STATUS rioMapInb(UINT32 lstart,UINT32rstart,UINT32 size,UINT32 flags)rioMapInb映射大小為size的本地地址lstart到RapidIO空間地址rstart;
(3)STATUS rioMapOutb4(UINT32 lstart,UINT32rstart,UINT32 size,UINT32 tid0,UINT32 tid1,UINT32tid2,UINT32 tid3,UINT32 flags)
rioMapOutb一次只能映射一個外部節點的內存空間,為了提升軟件效率,使用rioMapOutb4接口一次性對4個外部節點進行映射。
2.3 網絡通信
RapidIO的網絡通信主要有消息、門鈴、Nread和Nwrite等方式。軟件中使用的函數接口如下:
(1)void rioSendMsg(BYTE localPort,BYTEmailBox,BYTE dstID,BYTE*msgPtr,WORD len)rioSendMsg函數接口用來在兩個處理部件之間發送消息,loealPort為本地RapidIO端口號,mailBox為郵箱號,dstID為目標RapidIO ID號,msgPtr為消息內容數組指針,len為消息長度。
(2)void rioSendDoorbell(BYTE localport,BYTEdstPortID,WORD data)rioSendDoorbell函數接口發送門鈴信息,門鈴信息一般用于處理器間的中斷。Localport為端口號,dstPortID為目標端口號,data為16位門鈴信息。
(3)DWORD rioDmaNread(BYTE chan,DWORDlocaladr,DWORD rioaddr,DWORD bytecnt)應用程序調用rioDmaNread接口進行Nread操作,rioDmaNread接口調用DMA控制器直接從RapidIO空間讀取數據塊到本地內存空間。
(4)DWORD rioDmaNwrite(BYTE chan,DWORDlocaladdr,DWORD rioaddr,DWORD bytecnt)應用程序調用rioDmaNwrite接口進行Nwrite操作,rioDmaNwrite接口調用DMA控制器直接將本地內存空間的數據塊寫到RapidIO空間上。
(5)DWORD rioDmaTransfer(BYTE ehan,DWORDsouraddr,DWORD desaddr,DWORD datasize,DWORDphyNextDescPtr)rioDmaTransfer接口實現DMA傳輸功能,該接口使用了DMA中斷功能,有阻塞,當DMA沒有完成時不會退出。
2.4 Rapidio網絡故障恢復
在實際應用中,RapidIO網絡上的節點可能出現故障,需進行重啟操作。重啟后的節點,其硬件配置均回到最初狀態,RapidIO部分功能(節點ID等)需要進行重新初始化,因此需進行RapidIO網絡的故障恢復。
RapidIO網絡的故障恢復具有以下3種基礎形式:
(1)普通節點的故障恢復。主節點或從節點進行一次RapidIO網絡的初始化即可恢復普通節點的RapidIO網絡故障。
(2)從節點的故障恢復。需要主節點進行一次RapidIO網絡的初始化。
(3)主節點的故障恢復。主節點自動恢復后從節點進行一次RapidIO網絡的初始化。
在某些情況下,由于芯片上RapidIO控制器的問題,主節點無法進行自身的自動恢復。因此,在故障恢復的第3種基礎形式中,僅能使用從節點進行一次RapidIO網絡的初始化這種方式恢復主節點的故障。在這種情況下,主節點和從節點之間需要具有通信機制,使得主節點能夠將其發生故障的事件通知給從節點,從而觸發從節點進行一次RapidIO網絡的初始化,完成主節點的故障恢復。主節點和從節點之間需要具有通信機制,由于主節點和從節點同屬于一塊板卡,且之間具有互相的中斷觸發功能,因此使用中斷觸發方式完成主節點和從節點之間的故障通知。
3 、系統驗證
完成系統和驅動軟件的設計后,在具體應用環境中對系統的功能和性能進行驗證。
3.1 功能驗證
系統采用主從方式初始化,系統上電后,兩個CPU各自調用初始化函數進行系統初始化,先運行的CPU自動設置為主節點,后運行的CPU和網絡上的其他設備為從節點,主節點通過網絡枚舉發現系統中的其他從節點,從而完成網絡配置。系統驗證了如下功能:
(1)RapidIO網絡動態接入和故障恢復功能,RapidIO網絡能夠動態接入其他網絡節點并且完成對新接入節點的網絡配置,同時系統具備故障恢復功能。
(2)傳輸1.25 Gbit·s-1、25 Gbit·s-1、3.125Gbit·s-1,3種速率時的高速RapidIO信號,3種工作速度可通過軟件動態配置。
3.2 性能驗證
為了驗證網絡傳輸性能,選取RapidIO網絡中的兩個主機節點進行通信功能測試。RapidIO端口工作在4x模式下,速率為3.125Gbit·s-1,測試傳輸不同大小的包時Nread和Nwrite的傳輸帶寬,實際的傳輸帶寬如表1所示。
從表中可看出,RapidIO實際的傳輸速率和理論傳輸速率之間有一定的差距。當單包數據為128 Byte時,數據傳輸速率比較低。隨著包的大小增加,傳輸速率也在增加,但是速率增長趨勢變緩。當單包數據為4kB時,RapidIO的傳輸速率是最高的,此時NWRITE的傳輸帶寬為720.5 Mbit·s-1,NREAD的傳輸帶寬為716.8/Mbit·s-1。
4 、結束語
RapidIO是一種高效、穩定、低成本的系統互聯總線,為新一代高性能嵌入式系統互聯提供了良好的解決方案。本文介紹了一種基于RapidIO的具有雙主機節點的嵌入式系統互聯設計與實現方案,系統中兩塊PowerPC主控制器采用主從方式工作,并通過TSI578交換機連接外部的其他系統,該設計性能穩定可靠,能夠滿足并行分布式系統的高速數據傳輸需求,具有廣泛的應用前景。
責任編輯:gt
評論
查看更多