文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)11-0027-03
傳統(tǒng)的并行總線架構(gòu)多采用VME標(biāo)準(zhǔn),但共享總線會(huì)造成頻繁等待和沖突,大大降低了系統(tǒng)運(yùn)行效率,不適合大規(guī)模并行數(shù)據(jù)處理系統(tǒng)。隨著現(xiàn)代雷達(dá)、圖像等信號(hào)處理應(yīng)用對(duì)信號(hào)帶寬和數(shù)據(jù)傳輸速率要求的不斷提升,基于VPX串行總線標(biāo)準(zhǔn)的通用信號(hào)處理器占有較大的優(yōu)勢(shì)[1-3]。本文首先介紹了基于VPX總線架構(gòu)的系統(tǒng)設(shè)計(jì),著重介紹了信號(hào)處理卡VPX6-460的硬件組成,并采用VxWorks實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn)了多處理器間的高速數(shù)據(jù)通信。
1 系統(tǒng)整體設(shè)計(jì)
VPX定制機(jī)箱采用新型的高速串行總線標(biāo)準(zhǔn)VITA46,相對(duì)于VME總線架構(gòu)而言,具有更大的數(shù)據(jù)吞吐能力和交換能力、更好的散熱性能和更高功率的插槽,充分滿足了信號(hào)處理系統(tǒng)對(duì)帶寬和運(yùn)算處理能力的要求[4-5]。圖1所示為系統(tǒng)的基本框圖。整個(gè)系統(tǒng)主要由多通道信號(hào)采集卡、多通道數(shù)據(jù)回收卡、信號(hào)處理卡以及高性能服務(wù)器等組成。系統(tǒng)以千兆以太網(wǎng)作為平臺(tái)間的網(wǎng)絡(luò)互連標(biāo)準(zhǔn),并使用串行RapidIO和PCIe作為底板總線交換網(wǎng)絡(luò)互連協(xié)議。VPX載板和模塊化的信號(hào)采集子卡組成了系統(tǒng)的前端數(shù)據(jù)采集部分,VPX載板擁有的多個(gè)高速串行接口可以將采集到的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)流,傳送給后端的信號(hào)處理板進(jìn)行復(fù)雜的后端處理[6]。
2 硬件設(shè)計(jì)
在整個(gè)VPX機(jī)箱中,嵌入式信號(hào)處理卡VPX6-460是一款多CPU并行處理器信號(hào)處理卡,其內(nèi)部組成結(jié)構(gòu)如圖2所示。板上載有4塊雙核PowerPC 8641D處理器,共有8個(gè)e600處理器核,每個(gè)處理器配有512 MB的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器DDR2SDRAM,還配有512 MB具有寫(xiě)保護(hù)的Flash和NVRAM。板上的千兆以太網(wǎng)交換機(jī)用來(lái)配置每個(gè)處理器的狀態(tài);4個(gè)處理器間通過(guò)串行RapidIO交換器實(shí)現(xiàn)串行數(shù)據(jù)互連,每個(gè)處理器的數(shù)據(jù)輸入/輸出速率都可達(dá)到雙向12 Gb/s,同時(shí)有4路串行RapidIO連接到背板,可連接4個(gè)處理板,支持16個(gè)處理器間的全速數(shù)據(jù)交換;板上的XMC/PMC插座支持8路PCIe連接,可用于擴(kuò)張外部的輸入/輸出接口。
3 軟件設(shè)計(jì)
信號(hào)處理器的硬件部分構(gòu)成了系統(tǒng)框架和硬件平臺(tái),而軟件部分則用于實(shí)現(xiàn)各種功能,是整個(gè)系統(tǒng)的“靈魂”。VPX6-460是典型的“通用處理器平臺(tái)+嵌入式操作系統(tǒng)”結(jié)構(gòu),選用的操作系統(tǒng)是美國(guó)Wind River公司最新研發(fā)的VxWorks6.8,主機(jī)上的開(kāi)發(fā)環(huán)境是基于Eclipse軟件架構(gòu)設(shè)計(jì)的Workbench3.1,通過(guò)串口和網(wǎng)絡(luò)接口實(shí)現(xiàn)主機(jī)與目標(biāo)機(jī)間的交叉編譯和交叉調(diào)試。VxWorks實(shí)時(shí)操作系統(tǒng)提供了專門(mén)的系統(tǒng)調(diào)用函數(shù)接口來(lái)連接中斷向量和中斷服務(wù)程序,內(nèi)核可以自動(dòng)提供有關(guān)中斷處理中所需要的堆棧切換以及寄存器保護(hù)、回復(fù)等功能。VxWorks6.8 提供的內(nèi)部處理器通信IPC(Inter Pro-cessor Communication)函數(shù)庫(kù)Rel2.4.7支持多處理器間的通信,適用于底層串行RapidIO和以太網(wǎng)的鏈接,提供與連接無(wú)關(guān)的編程接口,從而簡(jiǎn)化了多處理器通信的程序設(shè)計(jì),提高了程序的可移植性。
VPX6-460的各個(gè)處理器之間主要采用直接內(nèi)存訪問(wèn)DMA(Direct Memory Access)通信機(jī)制,可以同時(shí)傳輸批量數(shù)據(jù)。當(dāng)DMA控制器接收到來(lái)自輸入/輸出口的DMA請(qǐng)求時(shí),CPU就會(huì)轉(zhuǎn)讓總線控制權(quán)給DMA控制器,在完成數(shù)據(jù)傳輸后,DMA控制器會(huì)歸還總線控制權(quán)。整個(gè)傳輸過(guò)程由DMA控制器負(fù)責(zé)而不需要CPU的參與,有效地減少了CPU的占用時(shí)間,大大提高了系統(tǒng)性能[7-8]。圖3所示為VPX6-460上兩個(gè)處理器間通信的基本原理框圖。
在本地處理器上創(chuàng)建由指針A0_sender指向的緩存區(qū)buffer_ab,相應(yīng)的發(fā)送端口為AB_ A0_BlkPort,由函數(shù)msgBlkWrite( )將成片數(shù)據(jù)寫(xiě)入到目標(biāo)處理器上,由目標(biāo)處理器的新建緩存區(qū)存儲(chǔ)接收數(shù)據(jù),接收端口為AB_ B0_BlkPort,緩存區(qū)名也為buffer_ab,使用相同緩存名可以實(shí)現(xiàn)數(shù)據(jù)共享。由于DMA寫(xiě)操作是異步實(shí)現(xiàn)的,即無(wú)論DMA請(qǐng)求是否已被執(zhí)行,msgBlkWrite( )都會(huì)立即返回,因此本地處理器需要調(diào)用函數(shù)callBack( )返回寫(xiě)操作的完成時(shí)間和狀態(tài)等信息。同時(shí),在完成數(shù)據(jù)傳輸時(shí),DMA控制器要釋放總線控制權(quán),通過(guò)發(fā)送端口的寫(xiě)中斷服務(wù)程序告知本地處理器已完成數(shù)據(jù)傳輸,接收端口以讀中斷服務(wù)程序告知目標(biāo)處理器已完成數(shù)據(jù)接收。部分程序如下:
msgBlkPort AB_A0_BlkPort;
msgBlkStatsInfo AB_A0_BlkInfo;
AB_A0_BlkPort=msgBlkOpen(BUFAB_NAME,8,0);
if (AB_A0_BlkPort==0)
{
printf(“start_test: msgBlkOpen() failed”);
return -1;
} /*打開(kāi)發(fā)送緩存區(qū),返回輸出端口地址,能允許的最大
DMA請(qǐng)求數(shù)為8 */
status=msgBlkIoctl(AB_A0_Port,MSGIOCTL_FLOELVLV_
PRIORITY,MSGIOCTL_FLOWLVLV_HIGH);
if (status!=0)
{
printf(“Error invalid priority flow setting\n”);
} /*設(shè)置數(shù)據(jù)傳輸?shù)膬?yōu)先級(jí)*/
while(1)
{
msgBlkIoctl(AB_A0_BlkPort,MSGIOCTL_GET_STATS,(long)
&AB_A0_blk Info);
if (AB_A0_BlkInfo.isconnected!=0)
{
printf (“start_test:\”%s” connected to proc 0 x%x, length %
ld\n”, AB_A0_BlkInfo.name, AB_A0_ BlkInfo.peerProc,
AB_A0_BlkInfo.size);
break;
}
else
taskDelay(1);
} /*設(shè)置端口信息,判斷發(fā)送端口是否已正確連接到目標(biāo)
處理器*/
AB_msgBlkWriteInProgress=1;
status=msgBlkWrite(AB_A0_BlkPort,A0_sender,Buffer_size,0,
MSGBLK_OPTION_SIGNAL,0,A0_msgBlkWriteDoneISR,0);
/*寫(xiě)函數(shù)包括了本地處理器需要返回調(diào)用的參數(shù)信息,
同時(shí)含有寫(xiě)中斷函數(shù)信息*/
if (status)
{
printf(“start_test: msgBlkWrite() returned 0x%x \n”, status);
return -1;
} /*將本地緩存數(shù)據(jù)正確傳送到目標(biāo)處理器上,實(shí)現(xiàn)了處
理器間的數(shù)據(jù)傳輸*/
while(AB_msgBlkWriteInProgress)
taskDelay(1);
printf(“Data transferred ”);
msgBlkClose(AB_A0_BlkPort);
return 1;
static void A0_msgBlkWriteDoneISR (msgBlkP ort port, void
*pParam, long status)
{
AB_msgBlkWriteInProgress=0;
} /*寫(xiě)中斷服務(wù)子程序,告知本地處理器已完成數(shù)據(jù)傳輸*/
int B0_receive(void)
{
int i,j;
int status;
msgBlkPort AB_B0_BlkPort;
msgBlkPort BC_B0_BlkPort;
msgBlkInfo BC_B0_BlkInfo;
if (NULL==B0_receiver)
{
B0_receiver=cacheDmaMalloc(BUFFER_SIZE);
if (!B0_receiver)
{
printf(“B0_receive:cacheDmaMalloc(0x%x)\n failed”,
BUFFER_SIZE);
return -1;
} /*在目標(biāo)處理器上建立接收緩存區(qū)*/
AB_B0_BlkPort=msgBlkCreate(BUFAB_NAME,B0_receiver,
BUFFER_SIZE,MSGBLK_OPTION_SIGNAL);
/*接收緩存區(qū)與發(fā)送緩存區(qū)有相同的緩存區(qū)名“buffer_ab”,
以實(shí)現(xiàn)數(shù)據(jù)共享*/
if (AB_B0_BlkPort==0)
{
printf (“B0_receive:msgBlkCreate() failed\n”);
return -1;
}
AB_msgBlkReadInProgress=1;
msgBlkSigConnect(AB_B0_BlkPort,B0_msgBlkReadDoneISR,
(void*)0x1234);
msgBlkSigEnable(AB_B0_BlkPort);
/*確認(rèn)接收端口已連接到目標(biāo)處理器,
并由讀中斷服務(wù)子程序告知已正確完成接收*/
本文在介紹了VPX6-460硬件組成的基礎(chǔ)上,結(jié)合VxWorks操作系統(tǒng)的特點(diǎn)以及系統(tǒng)所支持的通信機(jī)制,詳細(xì)分析了不同處理器間的數(shù)據(jù)傳輸方式,并給出了具體的軟件實(shí)現(xiàn)方法。該程序的高度可移植性使其具有很高的應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 杜文鳳,王博文.基于嵌入式的實(shí)時(shí)通信協(xié)議棧研究與設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,(39)1:29-31.
[2] 劉昊昱.一種基于VxWorks技術(shù)的通用信號(hào)處理平臺(tái)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2003,(29)6:13-15.
[3] 宋秀蘭,吳曉波.多處理器通信設(shè)計(jì)[J].浙江工業(yè)大學(xué)學(xué)報(bào),2010,38(4):426-429.
[4] 廖明燕.基于MSP430的多處理器通用技術(shù)研究[J].微處理機(jī),2006,2(1):86-91.
[5] 何先波,李薇.嵌入式系統(tǒng)軟件開(kāi)發(fā)技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2011.
[6] 史鴻聲.基于PowerPC的雷達(dá)通用處理器設(shè)計(jì)[J].雷達(dá)科學(xué)與技術(shù),2011,9(2):140-144.
[7] 李世光,孟強(qiáng)強(qiáng).基于多串口的熱量表系數(shù)修正軟件的設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2012,31(18):1-4.
[8] 翁省輝,喻武龍.Liunx下SANE Driver自動(dòng)化測(cè)試工具的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(1):4-6.