楊瑩1,張琴1,楊燦美2,林福江1
(1.中國科學(xué)技術(shù)大學(xué) 信息科學(xué)技術(shù)學(xué)院,安徽 合肥 230027;2.中國科學(xué)技術(shù)大學(xué) 先進(jìn)技術(shù)研究院,安徽 合肥 230027)
摘要:深入研究以太網(wǎng)組幀、傳輸?shù)姆绞揭约?a class="innerlink" href="http://theprogrammingfactory.com/tags/流量控制" title="流量控制" target="_blank">流量控制的原理,結(jié)合萬兆以太網(wǎng)介質(zhì)訪問控制(XGMAC)64 bit數(shù)據(jù)并行處理的特點(diǎn),針對PAUSE幀響應(yīng)周期長、占用硬件資源多的問題,設(shè)計(jì)了一種精簡的基于PAUSE幀的流量控制電路,在ISE中邏輯綜合與仿真。驗(yàn)證結(jié)果表明,該電路可滿足萬兆以太網(wǎng)流量控制的要求。
關(guān)鍵詞:萬兆以太網(wǎng);流量控制;XGMAC;PAUSE幀
0引言
自2002年萬兆以太網(wǎng)標(biāo)準(zhǔn)IEEE802.3ae[1]提出以來,萬兆以太網(wǎng)技術(shù)得到迅速發(fā)展與廣泛應(yīng)用,近年來逐步取代千兆以太網(wǎng)成為新一代的城域骨干網(wǎng)絡(luò)。相對于千兆以太網(wǎng)MAC層的125 MHz時(shí)鐘頻率與8 bit數(shù)據(jù)處理位寬,萬兆以太網(wǎng)介質(zhì)訪問控制(10 Gigabit Ethernet Media Access Controller, XGMAC)層采用156.25 MHz時(shí)鐘頻率與64 bit數(shù)據(jù)處理位寬。時(shí)鐘頻率的提高、數(shù)據(jù)位寬的增大給MAC層流控制電路的設(shè)計(jì)帶來新的挑戰(zhàn)[2]。本文針對XGMAC層的特點(diǎn)提出一種高效、低功耗的流控制電路設(shè)計(jì)方案,旨在減少流控制機(jī)制對系統(tǒng)造成的額外延時(shí)并以此提高發(fā)送和接收以太網(wǎng)幀的效率。
1基于PAUSE幀流控制的原理
為了提高傳輸效率,XGMAC層采用PAUSE幀進(jìn)行流量控制。PAUSE幀為符合IEEE802.3協(xié)議的一種控制幀,遵從以太網(wǎng)最小幀長度64 B的限制[3]。
流量控制原理如圖1所示,當(dāng)local_XGMAC 接收模塊中接收緩存快滿(快空)時(shí),local發(fā)送模塊根據(jù)圖1XGMAC流量控制示意圖
流量控制模塊指示的信號發(fā)送時(shí)間參數(shù)為0xFFFF(0x0000)的PAUSE幀。remote_XGMAC接收模塊接收到PAUSE幀并確認(rèn)有效后,提取時(shí)間參數(shù)用于流量控制模塊的暫停發(fā)送計(jì)數(shù)器賦值,并以此控制發(fā)送模塊暫停(恢復(fù))發(fā)送數(shù)據(jù)幀。
2流量控制電路的結(jié)構(gòu)
如圖2所示,XGMAC流量控制模塊分為發(fā)送和接收兩個(gè)部分。
2.1PAUSE幀發(fā)送電路設(shè)計(jì)
千兆以太網(wǎng)中,因其8 bit的數(shù)據(jù)處理位寬限制,PAUSE幀通常使用邏輯狀態(tài)機(jī),按照幀格式通過狀態(tài)轉(zhuǎn)換填充至發(fā)送緩存,邏輯略顯繁瑣。
本文經(jīng)過對比分析后發(fā)現(xiàn),對于暫停發(fā)送與恢復(fù)發(fā)送這兩種功能的幀,數(shù)據(jù)中有且只有時(shí)間參數(shù)與CRC校驗(yàn)碼不同,考慮到XGMAC內(nèi)部數(shù)據(jù)為64 bit并行處理,設(shè)計(jì)時(shí)可將幀中固定部分(即目的地址到操作碼)與控制字節(jié)直接固化于72 bit位寬的PAUSE ROM空間內(nèi),時(shí)間參數(shù)根據(jù)幀的功能對應(yīng)賦值即可。發(fā)送電路的結(jié)構(gòu)如圖2上半部分所示。實(shí)際工作中,由發(fā)送PAUSE控制器根據(jù)接收緩存邏輯判斷結(jié)果選擇PAUSE ROM或發(fā)送緩存FIFO作為數(shù)據(jù)源,按照XGMAC數(shù)據(jù)格式送至預(yù)存數(shù)據(jù)FIFO即可。
本文設(shè)計(jì)的PAUSE發(fā)送控制器流程如圖3所示。
計(jì)數(shù)器于發(fā)送PAUSE幀后啟動(dòng),用于保證兩次PAUSE幀發(fā)送的間隔時(shí)間;local XGMAC處于暫停接收狀態(tài)時(shí),檢測到接收緩存快空時(shí),即進(jìn)入發(fā)送PAUSE幀狀態(tài),設(shè)置時(shí)間參數(shù)0x0000,通知remote XGMAC可以繼續(xù)發(fā)送數(shù)據(jù)。PAUSE幀所需的CRC32校驗(yàn)、填充及組幀可共用XGMAC本身的數(shù)據(jù)處理模塊。
使用Verilog HDL[4]語言對PAUSE發(fā)送控制器進(jìn)行描述,部分關(guān)鍵代碼如下:
always@(posedge clk_tx or negedge reset_tx_n) begin
if(!reset_tx_n) pauserom_sel <= 1′b0;
else if(local_busy&pause_tmzero&(tx_empty|tx_eop)) pauserom_sel <= 1′b1;
else if(pause_eop) pauserom_sel <= 1′b0;
end
assign txl_rdat= pauserom_sel? pauserom _rdat : tx_rdat;
assign txl_eop = pauserom_sel? pauserom_eop : tx_eop;
assign txl_sop = pauserom_sel? pauserom_sop : tx_sop;
assign txl_empty = pauserom_sel? pause_rempty : (tx_empty | pause_state);
assign pauserom_ren = pauserom _sel? txl_ren : 1′b0;
assign tx_ren =pauserom _sel? 1′b0 : txlfifo_ren;
其中,local_busy表示接收緩存FIFO快滿;pause_tmzero表示計(jì)數(shù)器計(jì)時(shí)結(jié)束;pause_state表示當(dāng)前處于暫停發(fā)送狀態(tài)。
2.2PAUSE幀接收電路設(shè)計(jì)
本文設(shè)計(jì)的接收電路結(jié)構(gòu)如圖2下半部分所示,接收PAUSE幀控制器是本設(shè)計(jì)的重點(diǎn)。與千兆以太網(wǎng)的8 bit數(shù)據(jù)處理位寬不同,64 bit并行識別PAUSE幀與定位參數(shù)的方式可大幅提高處理速度。XGMAC采用Deficit Idle Count(DIC)算法保證數(shù)據(jù)32 bit對齊;在本設(shè)計(jì)中利用移位寄存器,實(shí)現(xiàn)了數(shù)據(jù)幀的64 bit對齊,方便XGMAC的后續(xù)處理。實(shí)際工作中,3個(gè)時(shí)鐘周期可完成PAUSE識別。
PAUSE接收控制流程如圖4所示。檢測到幀頭后進(jìn)行判斷:若為PAUSE幀,設(shè)置暫停發(fā)送或者恢復(fù)發(fā)送的狀態(tài);若是數(shù)據(jù)幀,則根據(jù)當(dāng)前接收FIFO狀態(tài)保存數(shù)據(jù),遞交上層協(xié)議。部分關(guān)鍵代碼為:
if (curr_cnt == 11′d0 && rx_aligndat[47:0] == ′PAUSE_FRAME) begin
next_pause_addr = 1′b1;
end
if (curr_cnt == 11′d8) begin
next_pause_addr = 1′b0;
if( pause_addr && rx_aligndat [47:32] == ′PAUSE_TYPE &&
rx_aligndat [63:48] == ′PAUSE_OPERATE) begin
next_pause_opera = 1′b1;
end
end
if (curr_cnt == 11′d16 && pause_opera == 1′b1) begin
next_pause_opera = 1′b0;
next_pause_time = rx_aligndat [15:0];
next_pause_frame = 1′b1;
end
其中,第一個(gè)時(shí)鐘沿完成組播目的地址的檢測;第二個(gè)時(shí)鐘沿結(jié)合地址檢測結(jié)果并行檢測幀的類型與操作碼;第三個(gè)時(shí)鐘根據(jù)前兩個(gè)檢測結(jié)果獲取時(shí)間參數(shù)并用于發(fā)送計(jì)數(shù)器。
3仿真及驗(yàn)證
電路選用Virtex5系列 XC5VSX50T型FPGA芯片,按以下流程使用ISIM進(jìn)行仿真驗(yàn)證:(1)模擬以太網(wǎng)數(shù)據(jù)幀發(fā)送過程中插入PAUSE幀;(2)模擬以太網(wǎng)數(shù)據(jù)幀接收過程中檢測PAUSE幀;(3)將發(fā)送部分與接收部分相連進(jìn)行環(huán)回測試,檢測PAUSE幀發(fā)送與接收整個(gè)過程。環(huán)回測試截取仿真時(shí)間140 ns~550 ns的波形如圖5所示。圖5回環(huán)測試結(jié)果A處表示正常狀態(tài)下發(fā)送PAUSE控制器選擇讀取發(fā)送緩存 FIFO;B處監(jiān)測到接收緩存FIFO快滿,進(jìn)入監(jiān)測數(shù)據(jù)幀發(fā)送狀態(tài)階段;C處表示當(dāng)前數(shù)據(jù)幀讀取完畢;結(jié)合B處狀態(tài),D處發(fā)送PAUSE控制器切換讀取PAUSE ROM并發(fā)送,若持續(xù)檢測到接收緩存FIFO快滿,則于計(jì)數(shù)器計(jì)數(shù)完成后再次進(jìn)入D狀態(tài),計(jì)數(shù)過程中正常發(fā)送數(shù)據(jù)幀;E處pause_frame_ok信號指示PAUSE幀環(huán)回后被正常接收識別。
在ISE中對關(guān)鍵路徑進(jìn)行約束,綜合后得到最高運(yùn)行頻率達(dá)181.23 MHz,頻率設(shè)計(jì)余量約16%,滿足XGMAC設(shè)計(jì)要求。
4結(jié)論
針對萬兆以太網(wǎng)MAC層64 bit并行數(shù)據(jù)的特殊性,本文通過在發(fā)送緩存鏈路中插入控制電路,利用小容量ROM配合簡易邏輯的方式,實(shí)現(xiàn)了發(fā)送端的流量控制。相對于純狀態(tài)邏輯的實(shí)現(xiàn)途徑,此方式更容易凸顯電路的簡潔,從而提升電路的高速性能;接收鏈路中,將接收數(shù)據(jù)64 bit對齊后,并行檢測特征參數(shù)以識別PAUSE幀,并提取時(shí)間參數(shù)反饋至發(fā)送端,有效地提升了處理速度。經(jīng)過仿真,驗(yàn)證了該方案可行。本文的思路對其他高速通信的流量控制電路設(shè)計(jì)具有一定借鑒意義。
參考文獻(xiàn)
[1] IEEE Std 802.3ae2002, Media Access Control (MAC) Parameters, Physical Layers, and Management Parameters for 10 Gb/s Operation[S].2002 .
?。?] 張友亮, 劉志軍, 馬成海,等. 萬兆以太網(wǎng)MAC層控制器的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J/OL]. 計(jì)算機(jī)工程與應(yīng)用,(20110224).http://www.cnki.net/kcms/detail/11.2127.TP.20110224.1050.005.html.
?。?] 張立明,章建雄,王玉艷. 千兆以太網(wǎng) MAC 的流量控制策略[J]. 計(jì)算機(jī)工程,2011,37(15):256258.
?。?] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)(第二版)[M].北京:北京航空航天大學(xué)出版社,2008.