當(dāng)前,,SoC向著面積更小、速度更高的方向發(fā)展,,百兆網(wǎng)通信已不能滿足人們的生產(chǎn)和工作需要,,用千兆網(wǎng)通信成為工作中迫切的要求。用FPGA實(shí)現(xiàn)千兆網(wǎng)的通信,,有二種模式可以選擇:其一,,編寫一個(gè)IP軟核;其二,,用FPGA內(nèi)嵌的MAC內(nèi)核,。方法一的靈活性大,但要實(shí)現(xiàn)并不容易,,因此,,賽靈公司將其歸為收費(fèi)IP;方法二中,,MAC的三態(tài)可配置特性為實(shí)現(xiàn)千兆網(wǎng)通信提供了可能,。本設(shè)計(jì)就是基于此內(nèi)嵌的Ethernet MAC模塊,在Vx-Works操作系統(tǒng)下成功實(shí)現(xiàn)了千兆網(wǎng)的通信,。
1 Virtex4 FX系列FPGA中內(nèi)嵌的千兆通信硬核架構(gòu)
Virtex4 FX系列FPGA中內(nèi)嵌了多個(gè)用于千兆通信的硬核,。以XC4VFX20為例,如圖1所示,,它通過一個(gè)主機(jī)接口連接了2個(gè)EMAC核,。2個(gè)EMAC可以一起使用,也可以只使用其中的一個(gè)。
Virtex4中嵌入的Ethernet MAC硬核主要特點(diǎn):
◆支持半雙工和(或)全雙工操作,;
◆設(shè)計(jì)符合IEEE 802.3-2002標(biāo)準(zhǔn),;
◆支持3種操作模式:1 Gb/s、100 Mb/s,、10 Mb/s,;
◆支持MII、GMII,、RGMII,、SGMII通信方式;
◆為不限長度的VLAN幀和JUMBO幀提供技術(shù)支持,;
◆提供了可選的網(wǎng)絡(luò)管理特性,,包括基于每個(gè)分組的統(tǒng)計(jì)數(shù)據(jù)矢量和流程控制。
通過一個(gè)與處理器無關(guān)的接口,,可以對(duì)TEMAC核進(jìn)行配置和監(jiān)控,,其為用戶選擇適合其應(yīng)用的理想處理器提供了附加的靈活性。
在1 Gb模式下,,TEMAC支持千兆位級(jí)媒體獨(dú)立接口(GMII)和降低千兆位級(jí)媒體獨(dú)立接口(RGMII),。GMII是一個(gè)運(yùn)行頻率為125 MHz的字節(jié)寬并行SDR接口,而RGMII是一個(gè)運(yùn)行頻率為25 MHz的半位元組并行DDR接口,,可以提供的總帶寬為1 Gb/s,。而且,在100 Mb/s和10 Mb/s模式下,,TEMAC均支持MII接口,。MII接口是4位寬,在100 Mb/s模式下其工作頻率為25 MHz,。在10 Mb/s模式下,,MII接口的工作頻率為2.5 MHz。
由于Virtex4中嵌入了Ethernet MAC硬核,,同時(shí),,F(xiàn)X系列還嵌入了PowerPC,這樣,,就可以用PowerPC控制Ethernet MAC實(shí)現(xiàn)千兆網(wǎng)的通信,。
2 VxWorks下BSP的移植
VxWorks 操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)。它采用微內(nèi)核的結(jié)構(gòu),,具有支持多種處理器,、豐富的網(wǎng)絡(luò)協(xié)議、良好的兼容性和裁剪性等特點(diǎn),,同時(shí)具有程序動(dòng)態(tài)鏈接和下載的功能,。自從20世紀(jì)80年代問世以來,,以其不斷推出的升級(jí)版本、高性能內(nèi)核以及友好的用戶開發(fā)環(huán)境,,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域逐漸占據(jù)一席之地,,尤其以成功應(yīng)用于火星探測車和愛國者導(dǎo)彈等高科技產(chǎn)品而聞名。VxWorks的板級(jí)支持包BSP (Board Support Package)是介于底層硬件和上層軟件之間的底層軟件開發(fā)包,,主要功能是屏蔽硬件,,提供操作系統(tǒng)的驅(qū)動(dòng)。具體功能包括:
◆單板硬件初始化,,主要是CPU的初始化,為整個(gè)軟件系統(tǒng)提供底層硬件支持,;
◆為操作系統(tǒng)提供設(shè)備驅(qū)動(dòng)和系統(tǒng)中斷服務(wù)程序,;
◆定制操作系統(tǒng)的功能,為軟件系統(tǒng)提供一個(gè)實(shí)時(shí)多任務(wù)的運(yùn)行環(huán)境,;
◆初始化操作系統(tǒng),,為操作系統(tǒng)的正常運(yùn)行做準(zhǔn)備。
在嵌入式系統(tǒng)設(shè)計(jì)中,,BSP的開發(fā)是一項(xiàng)非常復(fù)雜而繁瑣的工作,,Xilinx公司提供的EDK套件,可以在很大程度上減輕開發(fā)者的工作負(fù)擔(dān),。EDK中的 BSP生成器(BSPgen)可以根據(jù)不同的微處理器,、外設(shè)和RTOS組合自動(dòng)產(chǎn)生用戶可裁剪的BSP。它包含了系統(tǒng)所必需的支持軟件,,包括Boot代碼,、設(shè)備驅(qū)動(dòng)和RTOS的初始化。利用BSPgen可以把Xilinx器件驅(qū)動(dòng)打包到BSP的子目錄下,,并且把Xilinx器件驅(qū)動(dòng)與VxWorks及其 Tornado集成開發(fā)環(huán)境無縫集成,,充分縮短開發(fā)周期。
但是,,BSPgen生成的BSP只是一個(gè)固定的BSP模板,,并不能正確地反映RAM/ROM的存儲(chǔ)器映射,不支持用戶通過BSPgen流程自定義的核/驅(qū)動(dòng)等,。因此還需要對(duì)BSPgen產(chǎn)生的BSP進(jìn)行修改,。
對(duì)BSP開發(fā)人員來講,借助EDK的BSPgen,,還必須要做以下幾項(xiàng)工作:
?、傩薷腸onfig.h和Makefile中的RAM、ROM地址及串口速率,;
?、谛薷膕ysSerial.c,對(duì)串口進(jìn)行正確的設(shè)置;
?、墼黾硬荒芘cVxWorks無縫集成的器件的驅(qū)動(dòng)文件,,關(guān)鍵性中斷、GPIO接口等,;
?、芘渲胹ysNet.c中的以太網(wǎng)參數(shù),設(shè)置MAC地址,;
?、莞鶕?jù)EDK中的配置,禁止或使能Cache,;
?、扌薷膕ysL ib.c,以顯示正確的信息,;
?、咴O(shè)置主機(jī)IP地址。
經(jīng)過以上修改之后,,將新的BSP放在Tornado的安裝目錄Tornado_root\target\config下,。根據(jù)這個(gè)BSP,在Tornado集成環(huán)境下生成一個(gè)新的VxWorks工程,,然后就可以進(jìn)行一般的嵌入式操作系統(tǒng)開發(fā)了,。
EDK中RAM和ROM的地址映射如表1所列。
若為表1所列的工程,,則在config.h和Makfile文件中要進(jìn)行如下修改:
sysNet.c中通過以下語句定義了網(wǎng)絡(luò)的MAC地址,,必須根據(jù)真實(shí)的MAC地址進(jìn)行修改,如本文的MAC地址:00:0A:35:01:88:25
sysSerial.c對(duì)串口進(jìn)行初始化,,因?yàn)橐_地指定串口ID,,sysLib.c中可以顯示VxWorks鏡像的信息,因此也要進(jìn)行相應(yīng)的修改,,如將
通過對(duì)EDK下牛成的BSP的修改,,并在Tornado集成環(huán)境下生成正確的VxWorks鏡像后,可以將其下載到FPGA中,。觀察串口的輸出是否正確,,可以進(jìn)行相應(yīng)的調(diào)試工作,以確定BSP的移植是正確的,。
3 UDP服務(wù)器/客戶端程序
對(duì)VxWorks BSP進(jìn)行正確的配置和修改后,,在useAppInit.c中書寫自己的UDP服務(wù)器端程序。本設(shè)計(jì)用基于socket的UDP通信,。
網(wǎng)絡(luò)通信一般可通過socket實(shí)現(xiàn),。socket編程均采用客戶機(jī)/服務(wù)器模式,,VxWorks提供了標(biāo)準(zhǔn)的BSDsocket調(diào)用,支持UDP協(xié)議,。UDP協(xié)議即數(shù)據(jù)傳輸協(xié)議,,它允許創(chuàng)建和維護(hù)與遠(yuǎn)程計(jì)算機(jī)的連接,使其彼此可以進(jìn)行數(shù)據(jù)傳輸,。通信過程如圖2所示,。
服務(wù)器首先調(diào)用socket()建立一個(gè)套接字socket,然后調(diào)用bind()將套接字與一個(gè)本地網(wǎng)絡(luò)地址(IP地址和端口號(hào))捆綁在一起,,以保證客戶端正確識(shí)別,。接著服務(wù)器再調(diào)用listen()使套接字處于被動(dòng)的準(zhǔn)備接收狀態(tài),同時(shí)規(guī)定它的請(qǐng)求隊(duì)列長度,,隨后調(diào)用accept()來接收客戶連接,。服務(wù)器進(jìn)程隨即進(jìn)入阻塞狀態(tài)??蛻襞c服務(wù)器的關(guān)系是不對(duì)稱的。服務(wù)器先啟動(dòng),。然后在某時(shí)刻客戶主動(dòng)發(fā)出請(qǐng)求,,服務(wù)器被動(dòng)應(yīng)答。
客戶端程序首先調(diào)用socket(),,這個(gè)函數(shù)產(chǎn)生用于與各分系統(tǒng)連接的套接口,,并為每個(gè)套接口返回一個(gè)ID號(hào)。然后初始化一個(gè)套接口結(jié)構(gòu)體,,為其賦上該 ID號(hào)以及服務(wù)端的IP地址和端口號(hào),,并將其作為函數(shù)connect()的參數(shù).調(diào)用connect()函數(shù)主動(dòng)去連接服務(wù)端。
當(dāng)服務(wù)端與客戶端建立連接之后,,就可以發(fā)送(write)和接收(read)數(shù)據(jù),。部分代碼如下:
客戶端應(yīng)用程序在Windows下用VC實(shí)現(xiàn),代碼略,。
4 實(shí)驗(yàn)結(jié)果
結(jié)合工程實(shí)際開發(fā)的順序,,分2步對(duì)VxWorks下千兆網(wǎng)通信進(jìn)行測試:
第1步,在usrAppInit.c中打印hello the world,,若出現(xiàn)圖3所示窗口,,則證明VxWorks內(nèi)核已正確加載,以及BSP移植的正確性,。程序跑到用戶編寫的usrAppInit.c,。
第2步,對(duì)編寫的UDP服務(wù)器/客戶端進(jìn)行測試,,結(jié)果如表2所列,。
5 結(jié) 論
由于FPGA中嵌入了PowerPC處理器及用于千兆網(wǎng)通信的Ethernet MAC,,這樣,為利用FPGA實(shí)現(xiàn)高速網(wǎng)絡(luò)通信奠定了基礎(chǔ),。本文在VxWorks操作系統(tǒng)下實(shí)現(xiàn)了UDP的千兆網(wǎng)通信,,實(shí)測速度達(dá)到294.68 Mb/s,吞吐量達(dá)到近30%,。