文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)11-0027-03
傳統(tǒng)的并行總線架構(gòu)多采用VME標(biāo)準(zhǔn),,但共享總線會造成頻繁等待和沖突,,大大降低了系統(tǒng)運(yùn)行效率,不適合大規(guī)模并行數(shù)據(jù)處理系統(tǒng),。隨著現(xiàn)代雷達(dá),、圖像等信號處理應(yīng)用對信號帶寬和數(shù)據(jù)傳輸速率要求的不斷提升,基于VPX串行總線標(biāo)準(zhǔn)的通用信號處理器占有較大的優(yōu)勢[1-3],。本文首先介紹了基于VPX總線架構(gòu)的系統(tǒng)設(shè)計(jì),,著重介紹了信號處理卡VPX6-460的硬件組成,并采用VxWorks實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn)了多處理器間的高速數(shù)據(jù)通信,。
1 系統(tǒng)整體設(shè)計(jì)
VPX定制機(jī)箱采用新型的高速串行總線標(biāo)準(zhǔn)VITA46,,相對于VME總線架構(gòu)而言,具有更大的數(shù)據(jù)吞吐能力和交換能力,、更好的散熱性能和更高功率的插槽,,充分滿足了信號處理系統(tǒng)對帶寬和運(yùn)算處理能力的要求[4-5]。圖1所示為系統(tǒng)的基本框圖,。整個(gè)系統(tǒng)主要由多通道信號采集卡,、多通道數(shù)據(jù)回收卡、信號處理卡以及高性能服務(wù)器等組成,。系統(tǒng)以千兆以太網(wǎng)作為平臺間的網(wǎng)絡(luò)互連標(biāo)準(zhǔn),,并使用串行RapidIO和PCIe作為底板總線交換網(wǎng)絡(luò)互連協(xié)議。VPX載板和模塊化的信號采集子卡組成了系統(tǒng)的前端數(shù)據(jù)采集部分,,VPX載板擁有的多個(gè)高速串行接口可以將采集到的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)流,,傳送給后端的信號處理板進(jìn)行復(fù)雜的后端處理[6]。
2 硬件設(shè)計(jì)
在整個(gè)VPX機(jī)箱中,,嵌入式信號處理卡VPX6-460是一款多CPU并行處理器信號處理卡,,其內(nèi)部組成結(jié)構(gòu)如圖2所示,。板上載有4塊雙核PowerPC 8641D處理器,共有8個(gè)e600處理器核,,每個(gè)處理器配有512 MB的同步動(dòng)態(tài)隨機(jī)存儲器DDR2SDRAM,,還配有512 MB具有寫保護(hù)的Flash和NVRAM。板上的千兆以太網(wǎng)交換機(jī)用來配置每個(gè)處理器的狀態(tài),;4個(gè)處理器間通過串行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ì)
信號處理器的硬件部分構(gòu)成了系統(tǒng)框架和硬件平臺,而軟件部分則用于實(shí)現(xiàn)各種功能,,是整個(gè)系統(tǒng)的“靈魂”,。VPX6-460是典型的“通用處理器平臺+嵌入式操作系統(tǒng)”結(jié)構(gòu),選用的操作系統(tǒng)是美國Wind River公司最新研發(fā)的VxWorks6.8,,主機(jī)上的開發(fā)環(huán)境是基于Eclipse軟件架構(gòu)設(shè)計(jì)的Workbench3.1,,通過串口和網(wǎng)絡(luò)接口實(shí)現(xiàn)主機(jī)與目標(biāo)機(jī)間的交叉編譯和交叉調(diào)試。VxWorks實(shí)時(shí)操作系統(tǒng)提供了專門的系統(tǒng)調(diào)用函數(shù)接口來連接中斷向量和中斷服務(wù)程序,,內(nèi)核可以自動(dòng)提供有關(guān)中斷處理中所需要的堆棧切換以及寄存器保護(hù),、回復(fù)等功能。VxWorks6.8 提供的內(nèi)部處理器通信IPC(Inter Pro-cessor Communication)函數(shù)庫Rel2.4.7支持多處理器間的通信,,適用于底層串行RapidIO和以太網(wǎng)的鏈接,,提供與連接無關(guān)的編程接口,從而簡化了多處理器通信的程序設(shè)計(jì),,提高了程序的可移植性,。
VPX6-460的各個(gè)處理器之間主要采用直接內(nèi)存訪問DMA(Direct Memory Access)通信機(jī)制,可以同時(shí)傳輸批量數(shù)據(jù),。當(dāng)DMA控制器接收到來自輸入/輸出口的DMA請求時(shí),,CPU就會轉(zhuǎn)讓總線控制權(quán)給DMA控制器,在完成數(shù)據(jù)傳輸后,,DMA控制器會歸還總線控制權(quán),。整個(gè)傳輸過程由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ù)寫入到目標(biāo)處理器上,,由目標(biāo)處理器的新建緩存區(qū)存儲接收數(shù)據(jù),接收端口為AB_ B0_BlkPort,,緩存區(qū)名也為buffer_ab,,使用相同緩存名可以實(shí)現(xiàn)數(shù)據(jù)共享。由于DMA寫操作是異步實(shí)現(xiàn)的,,即無論DMA請求是否已被執(zhí)行,,msgBlkWrite( )都會立即返回,因此本地處理器需要調(diào)用函數(shù)callBack( )返回寫操作的完成時(shí)間和狀態(tài)等信息,。同時(shí),,在完成數(shù)據(jù)傳輸時(shí),DMA控制器要釋放總線控制權(quán),,通過發(fā)送端口的寫中斷服務(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;
} /*打開發(fā)送緩存區(qū),,返回輸出端口地址,能允許的最大
DMA請求數(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)先級*/
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);
/*寫函數(shù)包括了本地處理器需要返回調(diào)用的參數(shù)信息,,
同時(shí)含有寫中斷函數(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;
} /*寫中斷服務(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ù)的通用信號處理平臺設(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)軟件開發(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)化測試工具的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,,2012,31(1):4-6.