1、引言
傳統(tǒng)的測(cè)控網(wǎng)是將具有各種功能的儀器通過(guò)諸如VXI、CAN等專用總線連接起來(lái)構(gòu)成一套完整的測(cè)控系統(tǒng)。現(xiàn)在看來(lái),傳統(tǒng)的測(cè)控網(wǎng)主要具有四個(gè)方面的不足:一、數(shù)據(jù)傳輸速率有限;二、傳輸距離有限;三、設(shè)備數(shù)量有限;四、成本高昂。傳統(tǒng)的測(cè)控網(wǎng)已經(jīng)很難滿足人們對(duì)大數(shù)據(jù)量,遠(yuǎn)距離和低成本的要求。隨著Internet技術(shù)的發(fā)展和普及,通過(guò)將儀器接入Internet,儀器將測(cè)量的數(shù)據(jù)封裝成IP包的形式進(jìn)行傳輸,不僅能夠解決傳統(tǒng)測(cè)控網(wǎng)的不足,而且可以共享網(wǎng)絡(luò)技術(shù)發(fā)展帶來(lái)的便利,跨越地域的限制,實(shí)現(xiàn)測(cè)量數(shù)據(jù)的共享。本文主要討論多路千兆以太網(wǎng)信號(hào)中IP數(shù)據(jù)收發(fā)的設(shè)計(jì)與實(shí)現(xiàn),詳細(xì)介紹了MAC接收控制器的設(shè)計(jì),為儀器接入網(wǎng)絡(luò),組建高速的網(wǎng)絡(luò)化測(cè)控系統(tǒng)提供了一種經(jīng)濟(jì)高效的測(cè)試數(shù)據(jù)傳輸手段。
2、系統(tǒng)功能及介紹
系統(tǒng)框圖如圖1所示:
本系統(tǒng)主要采用Altera公司的StratixII系列FPGA芯片EP2S30為主處理芯片,通過(guò)Vitesse公司的PHY芯片VSC8224及相關(guān)的外圍電路組成,實(shí)現(xiàn)了8路千兆以太網(wǎng)電信號(hào)中IP數(shù)據(jù)收發(fā)的功能。VSC8224主要實(shí)現(xiàn)物理層上的比特流和鏈路層上的數(shù)據(jù)相互轉(zhuǎn)換。IP數(shù)據(jù)接收和輸出部分由EP2S30通過(guò)VHDL程序來(lái)實(shí)現(xiàn)。EP2S30在整個(gè)系統(tǒng)中起著核心作用,它將2片VSC8224送來(lái)的數(shù)據(jù)進(jìn)行重組,將MAC幀中的IP數(shù)據(jù)提取出來(lái),保存在緩沖存儲(chǔ)器中,最后將8路數(shù)據(jù)依次從IP通道輸出給另外的設(shè)備,同時(shí)EP2S30也接收其它設(shè)備送來(lái)的IP數(shù)據(jù),然后封裝成MAC幀通過(guò)VSC8224發(fā)送到以太網(wǎng)上。EP2S30也控制LED陣列來(lái)指示當(dāng)前各個(gè)網(wǎng)口的連接狀態(tài)及系統(tǒng)工作狀態(tài)。
3、系統(tǒng)硬件設(shè)計(jì)
EP2S30是Altera公司推出的StratixII系列FPGA中的一款,它具有非常豐富的I/O資源,支持多種電平標(biāo)準(zhǔn),它內(nèi)部資源豐富,可以實(shí)現(xiàn)復(fù)雜的應(yīng)用,特別是它內(nèi)部集成了M512/M4K/MRAM三種片上RAM,而且數(shù)量眾多,可以將它們配置成單口/雙口/FIFO等多種存儲(chǔ)器,特別適合大數(shù)據(jù)量的存儲(chǔ)轉(zhuǎn)發(fā)。
VSC8224是Vitesse公司推出的具有4個(gè)口的低功耗、支持10/100/1000BASE-T和1000BASE-X的高性能以太網(wǎng)PHY芯片。VSC8224支持最新的RGMII V2.0標(biāo)準(zhǔn),這為PCB板設(shè)計(jì)提供了極大的便利,無(wú)須考慮非常嚴(yán)格的延時(shí)要求。圖1中2片VSC8224與FPGA之間的連接就是采用的RGMII接口的方式。VSC8224有3種配置方式可供選擇,這里使用EEPROM(AT24C16)對(duì)它進(jìn)行配置,先將配置內(nèi)容通過(guò)編程器固化到EEPROM中,VSC8224在上電或者復(fù)位之后自動(dòng)從EEPROM中讀取出配置數(shù)據(jù)來(lái)自己進(jìn)行配置。FPGA通過(guò)2線的SMI串行管理接口對(duì)VSC8224內(nèi)部的狀態(tài)寄存器進(jìn)行訪問(wèn),讀出VSC8224的工作狀態(tài),以確定進(jìn)一步的操作。FPGA通過(guò)VSC8244的2線的串行LED狀態(tài)輸出口來(lái)讀出4個(gè)端口的狀態(tài),然后通過(guò)驅(qū)動(dòng)器驅(qū)動(dòng)發(fā)光二極管發(fā)光,這為設(shè)計(jì)提供了極大的靈活性,可以控制發(fā)光二極管顯示多種狀態(tài)。
4、 MAC控制器的VHDL實(shí)現(xiàn)
本系統(tǒng)采用VHDL實(shí)現(xiàn)MAC控制器和IP數(shù)據(jù)的接收與輸出。MAC幀的格式如圖2所示:
從MAC幀格式,可以看出,在接收的過(guò)程中只要我們找到了先導(dǎo)碼和分界符后就可以根據(jù)MAC幀格式得到整個(gè)MAC幀,進(jìn)而根據(jù)長(zhǎng)度/類型來(lái)判斷此MAC幀的內(nèi)容,從而獲得MAC幀中的IP數(shù)據(jù)。發(fā)送IP數(shù)據(jù)的過(guò)程是接收IP數(shù)據(jù)的逆過(guò)程,只要按照MAC幀的格式將IP數(shù)據(jù)封裝在一個(gè)MAC幀中,再通過(guò)PHY芯片依次發(fā)送出去就能實(shí)現(xiàn)IP數(shù)據(jù)的傳輸。
FPGA主要實(shí)現(xiàn)MAC幀的收發(fā)、MAC幀的組裝和分解、IP數(shù)據(jù)的收發(fā)功能,利用VHDL模塊化設(shè)計(jì)的優(yōu)點(diǎn),只要實(shí)現(xiàn)1路的功能,另外7路就能很容易實(shí)現(xiàn)了。本文主要介紹MAC接收控制器的設(shè)計(jì),這里利用VHDL設(shè)計(jì)如圖3所示的MAC接收控制器。
如圖3所示,根據(jù)RGMII接口規(guī)范,RXCLK為VSC8224從接收數(shù)據(jù)中提取的125MHz接收時(shí)鐘,RXD[3:0]和RXCTL在RXCLK的上下沿都有效,RxSt為RXCTL在RXCLK上下沿的與,RXD數(shù)據(jù)相當(dāng)于一個(gè)4bit×125MHz的DDR信號(hào),為了便于后期處理,將數(shù)據(jù)組合成一個(gè)8bit×125MHz的信號(hào)。這一部分由圖3中的數(shù)據(jù)組合模塊組成。
為了實(shí)現(xiàn)MAC巨幀的處理,充分利用FPGA資源,實(shí)現(xiàn)異步數(shù)據(jù)的同步輸出,為每一路千兆以太網(wǎng)都生成了一個(gè)16K字節(jié)的雙口RAM作為緩沖器,雙口RAM的輸入是8比特,輸出為16比特的數(shù)據(jù),同時(shí)輸入時(shí)鐘是各路提取的125MHz的時(shí)鐘,輸出為同源時(shí)鐘產(chǎn)生的160MHz時(shí)鐘,這樣能夠?qū)崿F(xiàn)了異步信號(hào)的同步輸出。
IP數(shù)據(jù)的提取和存儲(chǔ)由接收控制器來(lái)實(shí)現(xiàn),IP數(shù)據(jù)的輸出由輸出控制器來(lái)實(shí)現(xiàn)。下面就分別介紹這兩種控制器。
4.1 接收控制器
接收控制器主要是由一個(gè)寫(xiě)地址控制器和一個(gè)有限狀態(tài)機(jī)組成。
寫(xiě)地址控制器主要控制3個(gè)信號(hào),一個(gè)是14bit的寫(xiě)地址寄存器WrAddr,一個(gè)是14bit的寫(xiě)起始地址寄存器Haddr和一個(gè)寫(xiě)使能WrEnable信號(hào)。在每次寫(xiě)一幀數(shù)據(jù)之前都將寫(xiě)起始地址寄存器的值賦給寫(xiě)地址寄存器。在每幀數(shù)據(jù)CRC校驗(yàn)正確之后,修改Haddr的值為當(dāng)前WrAddr的值加1,如果CRC校驗(yàn)有誤則不修改Haddr的值,則下一幀從原來(lái)的地址開(kāi)始,覆蓋上一幀接收錯(cuò)誤的數(shù)據(jù)。由于雙口RAM的輸入是8bit,輸出為16bit,而且IP數(shù)據(jù)總長(zhǎng)度可能為奇數(shù)也可能為偶數(shù),為了便于后面的數(shù)據(jù)輸出,Haddr的值始終應(yīng)該為偶數(shù),當(dāng)CRC校驗(yàn)無(wú)誤后,如果IP數(shù)據(jù)包的長(zhǎng)度為奇數(shù),應(yīng)將Haddr自動(dòng)加上1變?yōu)榕紨?shù),作為下一次寫(xiě)地址的起始地址。WrAddr在達(dá)到0x3FFF之后自動(dòng)回到0x0000繼續(xù)遞增。
根據(jù)MAC幀格式,接收狀態(tài)機(jī)分別設(shè)置了9個(gè)狀態(tài):idle, preamble, sfd, destaddr, souaddr, typ_len, payload, padding, fcs。當(dāng)RxSt為0時(shí),接收狀態(tài)機(jī)始終處于idle狀態(tài)。當(dāng)RxSt為1時(shí),接收狀態(tài)機(jī)開(kāi)始監(jiān)視RxData上的數(shù)據(jù),如果為0x55,則由idle態(tài)進(jìn)入preamble態(tài),如果滿足7個(gè)連續(xù)的0x55,則進(jìn)入sfd狀態(tài),否則返回idle狀態(tài)。在sfd狀態(tài)下,如果此時(shí)RxData上的數(shù)據(jù)為0xD5,則進(jìn)入下一個(gè)狀態(tài),否則返回到idle狀態(tài)。在destaddr和souaddr狀態(tài)下,接收控制器可以獲得目的MAC地址和源MAC地址。在typ_len狀態(tài)下,接收控制器可以獲得該MAC幀的類型或長(zhǎng)度,由于該系統(tǒng)主要是處理IP數(shù)據(jù),所以只關(guān)心類型為0x0800的IP數(shù)據(jù)和類型為0x0806的Arp請(qǐng)求幀。如果接收的類型不是0x0800或0x0806則放棄這次接收,返回到idle狀態(tài)。如果為Arp請(qǐng)求幀,在接收完后幀校驗(yàn)無(wú)誤則使能ArpEnable信號(hào),使能Arp應(yīng)答模塊發(fā)送Arp應(yīng)答幀。如果為IP數(shù)據(jù)包幀,在payload狀態(tài)下,如果destaddr狀態(tài)獲得的目的MAC地址與自身的MAC地址一致則繼續(xù)進(jìn)行接收,否則放棄這次接收。在數(shù)據(jù)接收完之后,如果總長(zhǎng)度大于46字節(jié),則進(jìn)入fcs狀態(tài),以獲得幀校驗(yàn)結(jié)果;如果長(zhǎng)度小于46字節(jié),則還要進(jìn)入padding狀態(tài),之后才能進(jìn)入fcs狀態(tài)。在fcs狀態(tài)之后,將獲得的幀校驗(yàn)結(jié)果和CRC32模塊計(jì)算獲得的結(jié)果進(jìn)行比較,以保證傳輸?shù)恼_性。
4.2 輸出控制器
與接收控制器一樣,輸出控制器也是由一個(gè)讀地址控制器和一個(gè)有限狀態(tài)機(jī)組成。
讀地址控制器有一個(gè)13bit的讀地址信號(hào)RdAddr,這個(gè)讀地址信號(hào)與寫(xiě)控制器輸出的寫(xiě)起始地址信號(hào)Haddr的高13bit進(jìn)行比較,如果相等則表明當(dāng)前雙口RAM中無(wú)新的IP數(shù)據(jù),如果不相等則表明RAM中至少有一幀新的數(shù)據(jù)。此時(shí)輸出一個(gè)DatAvailable信號(hào)給頂層模塊,頂層模塊根據(jù)各路情況,輸出一個(gè)RdEnable信號(hào)給下層模塊,下層模塊將RdAddr信號(hào)遞增以讀出RAM中的數(shù)據(jù),當(dāng)達(dá)到0x1FFF時(shí)自動(dòng)回到0x0000進(jìn)行遞增。
由于保存在RAM中的數(shù)據(jù)包括MAC幀的目的地址、源地址、類型/長(zhǎng)度和數(shù)據(jù)部分,所以輸出狀態(tài)機(jī)設(shè)置了5個(gè)狀態(tài):Ridle,Rdestaddr,Rsouaddr,Rtyp_len,Rdat。在RdEnable信號(hào)無(wú)效時(shí),狀態(tài)機(jī)始終處于Ridle狀態(tài),當(dāng)RdEnable信號(hào)有效時(shí),由Ridle狀態(tài)依次進(jìn)入Rdestaddr、Rsouaddr和Rtyp_len狀態(tài)。IPvalid用于指示IP數(shù)據(jù)有效,IPhead指示IP包的第一個(gè)字節(jié),IPtail指示IP包的最后一個(gè)字節(jié),HalfB用于指示在IP數(shù)據(jù)包為奇數(shù)時(shí),IP包輸出的最后一個(gè)16bit數(shù)據(jù)的高8bit為有效的IP數(shù)據(jù)。IPCLK為160MHz的時(shí)鐘,是由外部輸入的50MHz時(shí)鐘經(jīng)過(guò)FPGA內(nèi)部的鎖相環(huán)得到。
4.3 頂層模塊設(shè)計(jì)
頂層模塊主要是協(xié)調(diào)與控制8路模塊的工作。頂層模塊依次對(duì)每一路進(jìn)行輪詢,由于下層模塊的RAM中一旦有新的IP數(shù)據(jù)就會(huì)輸出一個(gè)DatAvailable信號(hào),從第一路到第8路依次查詢各路的DatAvailable信號(hào),如果有效則輸出一個(gè)RdEnable信號(hào)給該模塊,讀出一幀IP數(shù)據(jù)包。當(dāng)一幀IP數(shù)據(jù)包輸出后繼續(xù)進(jìn)行下一路的查詢,而不管這一路是否還有新的IP數(shù)據(jù)沒(méi)有讀出,如果還有數(shù)據(jù)沒(méi)有讀出,在下次輪詢的時(shí)候再讀出,這樣將減小因?yàn)槟骋宦芬恢闭加肐P數(shù)據(jù)輸出通道而其他路無(wú)法輸出IP數(shù)據(jù)而發(fā)生雙口RAM溢出的可能。
5 、結(jié)論
本文所設(shè)計(jì)的千兆以太網(wǎng)IP數(shù)據(jù)傳輸設(shè)備通過(guò)在現(xiàn)場(chǎng)的調(diào)試,運(yùn)行良好,狀況穩(wěn)定,誤碼率低,而且支持IP數(shù)據(jù)包長(zhǎng)達(dá)8K字節(jié)的巨幀,提高了網(wǎng)絡(luò)利用率,達(dá)到了高速測(cè)控?cái)?shù)據(jù)傳輸?shù)囊蟆T撓到y(tǒng)的研制為儀器接入網(wǎng)絡(luò),利用網(wǎng)絡(luò)來(lái)收發(fā)測(cè)試數(shù)據(jù)成為可能,為網(wǎng)絡(luò)化儀器和網(wǎng)絡(luò)化測(cè)控系統(tǒng)的發(fā)展提供了經(jīng)濟(jì)可行的高速數(shù)據(jù)傳輸手段。
本文作者創(chuàng)新點(diǎn):利用FPGA片上RAM為每一路千兆以太網(wǎng)設(shè)計(jì)了一個(gè)數(shù)據(jù)緩沖器及一個(gè)MAC接收控制器,解決了多路IP數(shù)據(jù)收發(fā)和異步數(shù)據(jù)同步輸出的問(wèn)題。
責(zé)任編輯:gt
評(píng)論