基于RapidIO的雙主機(jī)節(jié)點(diǎn)嵌入式系統(tǒng)互聯(lián)設(shè)計(jì)
(2)STATUS rioMapInb(UINT32 lstart,UINT32rstart,UINT32 size,UINT32 flags)rioMapInb映射大小為size的本地地址lstart到RapidIO空間地址rstart;
本文引用地址:http://butianyuan.cn/article/201609/305086.htm(3)STATUS rioMapOutb4(UINT32 lstart,UINT32rstart,UINT32 size,UINT32 tid0,UINT32 tid1,UINT32tid2,UINT32 tid3,UINT32 flags)
rioMapOutb一次只能映射一個(gè)外部節(jié)點(diǎn)的內(nèi)存空間,為了提升軟件效率,使用rioMapOutb4接口一次性對4個(gè)外部節(jié)點(diǎn)進(jìn)行映射。
2.3 網(wǎng)絡(luò)通信
RapidIO的網(wǎng)絡(luò)通信主要有消息、門鈴、Nread和Nwrite等方式。軟件中使用的函數(shù)接口如下:
(1)void rioSendMsg(BYTE localPort,BYTEmailBox,BYTE dstID,BYTE*msgPtr,WORD len)rioSendMsg函數(shù)接口用來在兩個(gè)處理部件之間發(fā)送消息,loealPort為本地RapidIO端口號,mailBox為郵箱號,dstID為目標(biāo)RapidIO ID號,msgPtr為消息內(nèi)容數(shù)組指針,len為消息長度。
(2)void rioSendDoorbell(BYTE localport,BYTEdstPortID,WORD data)rioSendDoorbell函數(shù)接口發(fā)送門鈴信息,門鈴信息一般用于處理器間的中斷。Localport為端口號,dstPortID為目標(biāo)端口號,data為16位門鈴信息。
(3)DWORD rioDmaNread(BYTE chan,DWORDlocaladr,DWORD rioaddr,DWORD bytecnt)應(yīng)用程序調(diào)用rioDmaNread接口進(jìn)行Nread操作,rioDmaNread接口調(diào)用DMA控制器直接從RapidIO空間讀取數(shù)據(jù)塊到本地內(nèi)存空間。
(4)DWORD rioDmaNwrite(BYTE chan,DWORDlocaladdr,DWORD rioaddr,DWORD bytecnt)應(yīng)用程序調(diào)用rioDmaNwrite接口進(jìn)行Nwrite操作,rioDmaNwrite接口調(diào)用DMA控制器直接將本地內(nèi)存空間的數(shù)據(jù)塊寫到RapidIO空間上。
(5)DWORD rioDmaTransfer(BYTE ehan,DWORDsouraddr,DWORD desaddr,DWORD datasize,DWORDphyNextDescPtr)rioDmaTransfer接口實(shí)現(xiàn)DMA傳輸功能,該接口使用了DMA中斷功能,有阻塞,當(dāng)DMA沒有完成時(shí)不會(huì)退出。
2.4 Rapidio網(wǎng)絡(luò)故障恢復(fù)
在實(shí)際應(yīng)用中,RapidIO網(wǎng)絡(luò)上的節(jié)點(diǎn)可能出現(xiàn)故障,需進(jìn)行重啟操作。重啟后的節(jié)點(diǎn),其硬件配置均回到最初狀態(tài),RapidIO部分功能(節(jié)點(diǎn)ID等)需要進(jìn)行重新初始化,因此需進(jìn)行RapidIO網(wǎng)絡(luò)的故障恢復(fù)。
RapidIO網(wǎng)絡(luò)的故障恢復(fù)具有以下3種基礎(chǔ)形式:
(1)普通節(jié)點(diǎn)的故障恢復(fù)。主節(jié)點(diǎn)或從節(jié)點(diǎn)進(jìn)行一次RapidIO網(wǎng)絡(luò)的初始化即可恢復(fù)普通節(jié)點(diǎn)的RapidIO網(wǎng)絡(luò)故障。
(2)從節(jié)點(diǎn)的故障恢復(fù)。需要主節(jié)點(diǎn)進(jìn)行一次RapidIO網(wǎng)絡(luò)的初始化。
(3)主節(jié)點(diǎn)的故障恢復(fù)。主節(jié)點(diǎn)自動(dòng)恢復(fù)后從節(jié)點(diǎn)進(jìn)行一次RapidIO網(wǎng)絡(luò)的初始化。
在某些情況下,由于芯片上RapidIO控制器的問題,主節(jié)點(diǎn)無法進(jìn)行自身的自動(dòng)恢復(fù)。因此,在故障恢復(fù)的第3種基礎(chǔ)形式中,僅能使用從節(jié)點(diǎn)進(jìn)行一次RapidIO網(wǎng)絡(luò)的初始化這種方式恢復(fù)主節(jié)點(diǎn)的故障。在這種情況下,主節(jié)點(diǎn)和從節(jié)點(diǎn)之間需要具有通信機(jī)制,使得主節(jié)點(diǎn)能夠?qū)⑵浒l(fā)生故障的事件通知給從節(jié)點(diǎn),從而觸發(fā)從節(jié)點(diǎn)進(jìn)行一次RapidIO網(wǎng)絡(luò)的初始化,完成主節(jié)點(diǎn)的故障恢復(fù)。主節(jié)點(diǎn)和從節(jié)點(diǎn)之間需要具有通信機(jī)制,由于主節(jié)點(diǎn)和從節(jié)點(diǎn)同屬于一塊板卡,且之間具有互相的中斷觸發(fā)功能,因此使用中斷觸發(fā)方式完成主節(jié)點(diǎn)和從節(jié)點(diǎn)之間的故障通知。
3 系統(tǒng)驗(yàn)證
完成系統(tǒng)和驅(qū)動(dòng)軟件的設(shè)計(jì)后,在具體應(yīng)用環(huán)境中對系統(tǒng)的功能和性能進(jìn)行驗(yàn)證。
3.1 功能驗(yàn)證
系統(tǒng)采用主從方式初始化,系統(tǒng)上電后,兩個(gè)CPU各自調(diào)用初始化函數(shù)進(jìn)行系統(tǒng)初始化,先運(yùn)行的CPU自動(dòng)設(shè)置為主節(jié)點(diǎn),后運(yùn)行的CPU和網(wǎng)絡(luò)上的其他設(shè)備為從節(jié)點(diǎn),主節(jié)點(diǎn)通過網(wǎng)絡(luò)枚舉發(fā)現(xiàn)系統(tǒng)中的其他從節(jié)點(diǎn),從而完成網(wǎng)絡(luò)配置。系統(tǒng)驗(yàn)證了如下功能:
(1)RapidIO網(wǎng)絡(luò)動(dòng)態(tài)接入和故障恢復(fù)功能,RapidIO網(wǎng)絡(luò)能夠動(dòng)態(tài)接入其他網(wǎng)絡(luò)節(jié)點(diǎn)并且完成對新接入節(jié)點(diǎn)的網(wǎng)絡(luò)配置,同時(shí)系統(tǒng)具備故障恢復(fù)功能。
(2)傳輸1.25 Gbit·s-1、25 Gbit·s-1、3.125Gbit·s-1,3種速率時(shí)的高速RapidIO信號,3種工作速度可通過軟件動(dòng)態(tài)配置。
3.2 性能驗(yàn)證
為了驗(yàn)證網(wǎng)絡(luò)傳輸性能,選取RapidIO網(wǎng)絡(luò)中的兩個(gè)主機(jī)節(jié)點(diǎn)進(jìn)行通信功能測試。RapidIO端口工作在4x模式下,速率為3.125Gbit·s-1,測試傳輸不同大小的包時(shí)Nread和Nwrite的傳輸帶寬,實(shí)際的傳輸帶寬如表1所示。
從表中可看出,RapidIO實(shí)際的傳輸速率和理論傳輸速率之間有一定的差距。當(dāng)單包數(shù)據(jù)為128 Byte時(shí),數(shù)據(jù)傳輸速率比較低。隨著包的大小增加,傳輸速率也在增加,但是速率增長趨勢變緩。當(dāng)單包數(shù)據(jù)為4kB時(shí),RapidIO的傳輸速率是最高的,此時(shí)NWRITE的傳輸帶寬為720.5 Mbit·s-1,NREAD的傳輸帶寬為716.8/Mbit·s-1。
4 結(jié)束語
RapidIO是一種高效、穩(wěn)定、低成本的系統(tǒng)互聯(lián)總線,為新一代高性能嵌入式系統(tǒng)互聯(lián)提供了良好的解決方案。本文介紹了一種基于RapidIO的具有雙主機(jī)節(jié)點(diǎn)的嵌入式系統(tǒng)互聯(lián)設(shè)計(jì)與實(shí)現(xiàn)方案,系統(tǒng)中兩塊PowerPC主控制器采用主從方式工作,并通過TSI578交換機(jī)連接外部的其他系統(tǒng),該設(shè)計(jì)性能穩(wěn)定可靠,能夠滿足并行分布式系統(tǒng)的高速數(shù)據(jù)傳輸需求,具有廣泛的應(yīng)用前景。
評論