引言
隨著應(yīng)用的不斷普及和深入,在設(shè)計(jì)嵌入式系統(tǒng)時(shí),往往需要同時(shí)優(yōu)化眾多因素,如成本、功率、尺寸、性能、靈活性、產(chǎn)品上市時(shí)間、設(shè)計(jì)開(kāi)發(fā)周期,以及可靠性等。Xilinx 公司推出的嵌入式處理器設(shè)計(jì)平臺(tái)Virtex-II Pro和Virtex-4系列器件可以滿(mǎn)足上述要求,其高性能的設(shè)計(jì)工具為設(shè)計(jì)者提供了完善的軟硬件協(xié)同設(shè)計(jì)能力。本文以Virtex-II Pro P20 芯片內(nèi)嵌POWERPC405硬核為處理器,選用目前廣泛使用的VxWorks操作系統(tǒng),闡述了內(nèi)嵌PowerPC嵌入式設(shè)計(jì)的過(guò)程和要點(diǎn),詳細(xì)介紹了TCP/IP實(shí)時(shí)傳輸?shù)恼麄(gè)設(shè)計(jì)過(guò)程,實(shí)驗(yàn)結(jié)果表明這種構(gòu)架模式具有很好的應(yīng)用前景。
基于FPGA片上PowerPC
的嵌入式系統(tǒng)開(kāi)發(fā)
隨著嵌入式技術(shù)的發(fā)展,針對(duì)當(dāng)前嵌入式處理器的應(yīng)用,Xilinx公司推出了兩款基于FPGA的32位嵌入式處理器內(nèi)核。一種是采用先進(jìn)IP植入技術(shù)實(shí)現(xiàn)的嵌入在Virtex-II Pro和Virtex-4器件中的POWERPC405處理器內(nèi)核(這是業(yè)界目前唯一的嵌入式硬核),另一種是MicroBlaze 32位嵌入式處理器軟核。硬核的好處是能夠提供更快的數(shù)據(jù)處理能力,而軟核則具有更好的靈活性,在目標(biāo)器件中可以進(jìn)行任意配置。由于硬核在速度和資源上具有優(yōu)勢(shì),因此本文采用了POWERPC405處理器,它支持復(fù)雜嵌入式的應(yīng)用模式。由于同時(shí)需要嵌入式RTOS VxWorks,而FPGA內(nèi)部的BlockRAM往往不能滿(mǎn)足提供較大存儲(chǔ)空間的要求,因而一般要由外部的存儲(chǔ)器陣列實(shí)現(xiàn)。
該體系結(jié)構(gòu)主要應(yīng)用于需要RTOS支持的數(shù)據(jù)處理、軟件、控制等實(shí)時(shí)系統(tǒng)以及以FPGA為核心的復(fù)雜應(yīng)用中。Virtex-II Pro系列器件采用IBM CoreConnect總線技術(shù),該總線包括:處理器局部總線(PLB)、片上外設(shè)總線(OPB)和設(shè)備控制寄存器總線(DCR)。PLB總線為片內(nèi)的高速數(shù)據(jù)通道,通常連接高速外設(shè)、DMA存儲(chǔ)控制器等,OPB總線則通常用于連接速率較低的片上外設(shè),二者通過(guò)總線橋接器與處理器總線連接,從而保證PLB總線的高速特性。DCR總線用于實(shí)現(xiàn)POWERPC405的通用寄存器與邏輯設(shè)備控制寄存器的數(shù)據(jù)通信。
針對(duì)基于POWERPC405的平臺(tái)FPGA設(shè)計(jì),Xilinx公司推出了完整的軟硬件協(xié)同設(shè)計(jì)工具EDK (Embedded Development Kit),它是一個(gè)專(zhuān)用于FPGA內(nèi)部32位嵌入式處理器的集成化開(kāi)發(fā)工具包,并提供硬件和軟件協(xié)同設(shè)計(jì)的能力,從而極大地縮短了設(shè)計(jì)周期。在軟硬件協(xié)同設(shè)計(jì)開(kāi)發(fā)平臺(tái)上,嵌入式軟件工程師仍然可以獨(dú)立地進(jìn)行軟件設(shè)計(jì),硬件邏輯工程師也就可以繼續(xù)采用過(guò)去的設(shè)計(jì)方法。
在實(shí)際的軟硬件協(xié)同開(kāi)發(fā)時(shí),如果不使用嵌入式RTOS,POWERPC405可以起到類(lèi)似單片機(jī)的作用,軟件開(kāi)發(fā)就變得相對(duì)簡(jiǎn)單。而在一些大型項(xiàng)目的開(kāi)發(fā)過(guò)程中,嵌入式RTOS往往是必需的,因此,研究嵌入式RTOS應(yīng)用開(kāi)發(fā)及其BSP的移植具有關(guān)鍵意義。
基于POWERPC405的
VxWorks下的TCP/IP通信
整體系統(tǒng)設(shè)計(jì)??
VxWorks提供了豐富而標(biāo)準(zhǔn)的socket編程接口,可以方便地實(shí)現(xiàn)TCP/IP通信,同時(shí),其多任務(wù)機(jī)制可以高效地完成實(shí)時(shí)任務(wù)的產(chǎn)生、調(diào)度、資源分配機(jī)制。本文在Virtex-II Pro開(kāi)發(fā)平臺(tái)上利用POWERPC405內(nèi)嵌處理器和PC機(jī)進(jìn)行TCP/IP通信,在底層使用100Mbps以太網(wǎng)作為傳輸媒介,實(shí)現(xiàn)了Vxworks嵌入式系統(tǒng)控制的文件實(shí)時(shí)傳輸。
可以利用EDK中的BaseSystem BuilderWizard來(lái)快速構(gòu)建基于POWERPC405的系統(tǒng)。首先設(shè)定參考時(shí)鐘頻率、處理器時(shí)鐘、總線時(shí)鐘,如果在設(shè)計(jì)中包含有100M網(wǎng)口,那么總線時(shí)鐘必須選擇100M以上的頻率。然后選取相應(yīng)的外設(shè), RS232串口、100M以太網(wǎng)口、SDRAM等,其中plb_bram_if_cntrl外設(shè)是必選的,該控制器完成對(duì)BlockRAM的控制,保持CPU處于一個(gè)確定的狀態(tài)。系統(tǒng)設(shè)計(jì)架構(gòu)如圖3所示,這里用到了EDK內(nèi)帶的Ethernet MAC LogiCore(圖中的EMAC)。
BSP開(kāi)發(fā)和移植
嵌入式操作系統(tǒng)開(kāi)發(fā)中一項(xiàng)非常重要的任務(wù),就是BSP (板級(jí)支持包)的開(kāi)發(fā)。這是一項(xiàng)非常復(fù)雜而繁瑣的工作,Xilinx公司提供的EDK套件,可以在很大程度上減輕開(kāi)發(fā)者的工作。EDK中的BSP生成器(BSPgen)可以根據(jù)不同的微處理器、外設(shè)和RTOS組合自動(dòng)產(chǎn)生用戶(hù)可裁剪的BSP。它包含了系統(tǒng)所必需的支持軟件,包括Boot代碼、設(shè)備驅(qū)動(dòng)和RTOS的初始化。利用BSPgen可以把Xilinx器件驅(qū)動(dòng)打包到BSP的子目錄下,并且把Xilinx器件驅(qū)動(dòng)與VxWorks及其Tornado集成開(kāi)發(fā)環(huán)境無(wú)縫集成,充分減少開(kāi)發(fā)周期。
但是,BSPgen生成的BSP只是一個(gè)固定的BSP模板文件,不能自動(dòng)設(shè)置RAM/ROM的存儲(chǔ)器映射,不支持用戶(hù)通過(guò)BSPgen流程自定義的核/驅(qū)動(dòng),不能自動(dòng)集成總線錯(cuò)誤檢測(cè),而且,Caches在缺省情況下被禁止的。
對(duì)于BSP開(kāi)發(fā)人員來(lái)講,借助EDK的BSPgen,還必須要做以下幾項(xiàng)工作:
1) 準(zhǔn)確定義RAM/ROM邊界地址,修改configure.h和makefile文件(兩者的地址定義必須相匹配);
2) 增加不能與VxWorks無(wú)縫集成的其他器件的驅(qū)動(dòng)文件,如總線錯(cuò)誤檢測(cè)及報(bào)告、關(guān)鍵性中斷、GPIO接口、I2C接口、SPI接口等;
3) 配置以太網(wǎng)參數(shù),設(shè)置缺省的IP地址、MAC地址(sysNet.c文件中);
4) 配置內(nèi)核服務(wù)選項(xiàng),禁止/使能Cache和RAM,設(shè)置TCP/UDP/IP參數(shù)等;
5) 增加總線錯(cuò)誤檢測(cè)報(bào)告和關(guān)鍵中斷支持文件。
經(jīng)過(guò)以上修改之后,將BSPgen產(chǎn)生的BSP放在Tornado的安裝目錄…\target\config下,在Tornado集成環(huán)境下生成Bootloader,然后就可以進(jìn)行一般的嵌入式操作系統(tǒng)開(kāi)發(fā)過(guò)程了。在這里,對(duì)BSP的修改只有config.h和makefile文件的RAM/ROM地址定義,修改如下:
#define ROM_BASE_ADRS?? 0xff800000?????????
?? #define ROM_TEXT_ADRS?? (ROM_BASE_ADRS)????
?? #define ROM_WARM_ADRS?? (ROM_TEXT_ADRS+8)??
?? #define ROM_SIZE??????? 0x00400000?????????
?? #define RAM_HIGH_ADRS?? 0x00200000?????????
?? #define RAM_LOW_ADRS??? 0x00100000???????
TCP/IP通信實(shí)驗(yàn)
本文建立的實(shí)驗(yàn)環(huán)境包括:一塊Virtex-II Pro開(kāi)發(fā)板DS-BD-2VP20-FF1152(客戶(hù)端),一臺(tái)Pentium4計(jì)算機(jī)主機(jī)(服務(wù)器端),一根RS232串口線、網(wǎng)線,parallel IV下載線;赥CP/IP的Socket應(yīng)用框架原理如圖4所示,經(jīng)過(guò)實(shí)際測(cè)試得知,網(wǎng)絡(luò)吞吐效率可超過(guò)30%。????????
客戶(hù)端程序:
sFd=socket (AF_INET, SOCK_STREAM,0);
optval = 60000;
setsockopt (sFd, SOL_SOCKET-p.htm" target="_blank" title="SOCKET貨源和PDF資料">SOCKET, SO_SNDBUF, (char *)&optval, sizeof (optval));
sockAddrSize=sizeof (struct sockaddr_in);
bzero((char *)&serverAddr , sockAddrSize);
serverAddr.sin_family=AF_INET; serverAddr.sin_len=(u_char) sockAddrSize;
serverAddr.sin_port=htons (SERVER_PORT_NUM);
serverAddr.sin_addr.s_addr = inet_addr ("128.0.43.102");
connect(sFd, (struct sockaddr *)&serverAddr,sockAddrSize);
send (sFd ,(char *)&myrequest. message, REQUEST_MSG_SIZE,0);
服務(wù)器端的程序可以由VC類(lèi)庫(kù)來(lái)實(shí)現(xiàn),這里就不再給出。
結(jié)語(yǔ)
開(kāi)發(fā)基于FPGA的嵌入式系統(tǒng)是邁向最終SoC的必由之路,傳統(tǒng)的FPGA廠商紛紛涉足嵌入式領(lǐng)域,F(xiàn)PGA所具有的低成本、低功耗、小尺寸、高性能、開(kāi)發(fā)周期短等優(yōu)勢(shì),必將使其在當(dāng)今嵌入式開(kāi)發(fā)的熱潮中具有廣闊的應(yīng)用前景