王輝
(中國電子科技集團(tuán)公司 第三十四研究所,廣西 桂林541004)
一種基于FPGA的地址學(xué)習(xí)功能的設(shè)計(jì)
王輝
(中國電子科技集團(tuán)公司 第三十四研究所,廣西 桂林541004)
當(dāng)前的綜合傳輸設(shè)備中,大多都提供了高速的以太網(wǎng)業(yè)務(wù)接口,能夠直接實(shí)現(xiàn)以太網(wǎng)業(yè)務(wù)的傳輸。但是,這些傳輸設(shè)備無法實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)包的地址學(xué)習(xí)功能,給傳輸設(shè)備和交換設(shè)備的組網(wǎng)帶來了一定的影響。文章中提出了一種基于FPG A的地址學(xué)習(xí)功能的設(shè)計(jì),以解決對數(shù)據(jù)包的源m ac地址進(jìn)行學(xué)習(xí)和管理。給出了電路原理,詳細(xì)介紹了硬件接口模塊和地址學(xué)習(xí)模塊中的各模塊功能,并進(jìn)行了應(yīng)用驗(yàn)證。
FPG A;M A C地址;老化
當(dāng)前,傳輸設(shè)備的地址學(xué)習(xí)功能大多出現(xiàn)在交換設(shè)備上。交換設(shè)備能夠自動學(xué)習(xí)到達(dá)設(shè)備端口的以太網(wǎng)數(shù)據(jù)包的源MAC地址,有利于對數(shù)據(jù)包的快速轉(zhuǎn)發(fā)[1,2]。傳輸設(shè)備一般只提供物理接口,只對數(shù)據(jù)進(jìn)行透明傳輸,不提供源MAC地址的學(xué)習(xí)功能。當(dāng)傳輸設(shè)備和交換設(shè)備組網(wǎng)時,需要傳輸設(shè)備實(shí)時學(xué)習(xí)和記錄接入到傳輸設(shè)備的終端設(shè)備(如PC)的MAC地址,并能夠適時發(fā)送免費(fèi)的ARP學(xué)習(xí)包,使得交換設(shè)備能夠及時更新其與傳輸設(shè)備相連的端口上的MAC地址表。為了實(shí)現(xiàn)上述功能,本文在傳統(tǒng)傳輸設(shè)備的基礎(chǔ)上,采用FPGA[3]的方式,實(shí)現(xiàn)了傳輸設(shè)備對接入終端設(shè)備的源MAC地址的學(xué)習(xí)和管理功能[4]。
設(shè)計(jì)時,我們在傳輸設(shè)備以太網(wǎng)板的物理層芯片和映射芯片之間增加了一塊FPGA芯片,用來處理收到的數(shù)據(jù)包,對數(shù)據(jù)包中的MAC地址進(jìn)行學(xué)習(xí)和管理。電路原理如圖1所示。FPGA芯片提供了1個CPU接口和2個GMII接口。CPU接口用于連接CPU芯片,2個GMII接口分別用于連接以太網(wǎng)物理層芯片和以太網(wǎng)映射芯片。
圖1 電路原理示意圖
一方面,F(xiàn)PGA截獲從端口1收到的所有的數(shù)據(jù)包,并獲取數(shù)據(jù)包的源MAC地址,建立端口1的MAC表項(xiàng)(包含MAC地址、IP地址);另一方面,F(xiàn)PGA還能夠接收CPU的指令,適時的從端口2發(fā)出以端口1的MAC表項(xiàng)構(gòu)成的免費(fèi)的ARP包以利于其他設(shè)備快速更新其MAC表項(xiàng)。
2.1CPU接口模塊
FPGA提供的CPU接口外部采用地址/數(shù)據(jù)并行總線接口形式,內(nèi)部設(shè)置了一系列的寄存器。CPU芯片可以通過CPU接口對FPGA提供的內(nèi)部寄存器進(jìn)行讀寫,實(shí)現(xiàn)CPU對FPGA的功能模塊的控制管理。CPU芯片對FPGA的主要控制功能有:MAC地址學(xué)習(xí)功能的開啟和關(guān)閉;MAC地址老化時間的設(shè)置;MAC地址學(xué)習(xí)包代理轉(zhuǎn)發(fā)功能(傳輸設(shè)備代替接入端口1的終端設(shè)備向端口2轉(zhuǎn)發(fā)免費(fèi)的ARP學(xué)習(xí)包)的開啟和關(guān)閉;免費(fèi)的ARP包的發(fā)包頻率的設(shè)置。
2.2GMII接口功能
FPGA的端口1和端口2都是GMII接口,只支持1000Mb/s的速率。FPGA將端口1的GMII信號和端口2的GMII信號通過FIFO轉(zhuǎn)換時鐘域,實(shí)現(xiàn)物理層和以太網(wǎng)映射芯片之間業(yè)務(wù)的透傳功能。
3.1以太網(wǎng)數(shù)據(jù)包地址學(xué)習(xí)功能
以太網(wǎng)數(shù)據(jù)包地址學(xué)習(xí)功能是指FPGA學(xué)習(xí)從端口1進(jìn)來IPv4包(非WLAN)的源MAC地址和源IP地址,然后將MAC地址和IP地址送入以太網(wǎng)地址管理器進(jìn)行比較和保存。
以太網(wǎng)數(shù)據(jù)包地址學(xué)習(xí)功能的FPGA邏輯流程圖如圖2所示。當(dāng)端口有數(shù)據(jù)包到達(dá)時,F(xiàn)PGA對數(shù)據(jù)包的字節(jié)進(jìn)行計(jì)數(shù)。首先,存下數(shù)據(jù)包的源MAC地址 (第15到第20字節(jié))。然后,存下以太網(wǎng)包類型(第21和22字節(jié))并判斷是否為IP包。如果是IP包,則存下IP包的源IP地址(第35到第38字節(jié));如果不是IP包,則結(jié)束本次存入過程,等待下一個數(shù)據(jù)包。最后把源MAC和IP地址送入地址管理器進(jìn)行比較和保存。
圖2 以太網(wǎng)數(shù)據(jù)包地址學(xué)習(xí)邏輯流程圖
3.2以太網(wǎng)地址管理功能
圖3為地址管理器示意圖。FPGA提供了以太網(wǎng)地址管理功能,包括一個128個地址的雙端口RAM、一個內(nèi)容地址查找表(Contend Address Memory,CAM)、一個RAM和CAM寫入模塊、一個RAM存入接口模塊、一個RAM讀取接口模塊和一個RAM地址狀態(tài)管理模塊。
圖3 地址管理器示意圖
各個模塊的功能如下:
⑴一個128個地址的雙端口RAM。用來存儲學(xué)習(xí)到的源MAC地址表項(xiàng)。
⑵一個CAM。用于比較以太網(wǎng)包的源地址表項(xiàng)是否已經(jīng)存在于CAM內(nèi)。
⑶RAM、CAM寫入模塊。用于將RAM存入接口保存的以太網(wǎng)地址寫入RAM和CAM。
⑷RAM存入接口模塊。邏輯流程圖如圖4所示。首先,地址學(xué)習(xí)模塊獲取數(shù)據(jù)包的源地址并將這些地址送入RAM存入接口模塊;然后,RAM存入接口模塊緩存這些以太網(wǎng)地址,同時將該地址送入CAM中;最后,CAM查找CAM內(nèi)部是否有相同的MAC地址。如果CAM內(nèi)部已經(jīng)存在相同的MAC地址,則終止本次存入,并產(chǎn)生MAC地址更新信號通知RAM地址狀態(tài)管理模塊更新此MAC地址表項(xiàng)。如果CAM內(nèi)沒有此MAC地址,RAM存入接口模塊查詢RAM地址狀態(tài)管理模塊是否有未使用的RAM地址。如果沒有空閑RAM地址,地址管理器將丟棄該以太網(wǎng)地址;如果有空閑RAM地址,則RAM、CAM寫入模塊將該MAC地址表項(xiàng)寫入RAM內(nèi)空閑地址中數(shù)值最小的地址內(nèi),并告訴RAM地址管理模塊該RAM地址被使用,結(jié)束本次存入。
⑸RAM讀取接口模塊邏輯流程圖如圖5所示。RAM讀取接口模塊內(nèi)部設(shè)計(jì)了一個狀態(tài)機(jī),可以將RAM中的存儲的MAC表項(xiàng)按照RAM地址從小到大的順序依次讀取出來。狀態(tài)機(jī)持續(xù)地檢查RAM地址狀態(tài)管理模塊給出的RAM地址使用狀態(tài),從RAM中已經(jīng)使用的地址中最小的地址開始預(yù)讀取一個MAC表項(xiàng)。當(dāng)代理轉(zhuǎn)發(fā)模塊請求MAC表項(xiàng)時,RAM讀取接口模塊直接將預(yù)讀取的MAC表項(xiàng)發(fā)送給代理轉(zhuǎn)發(fā)模塊,接著馬上去讀取RAM中下一個的MAC地址表項(xiàng),直至不再收到代理轉(zhuǎn)發(fā)模塊的請求。
圖4 RAM存入接口模塊邏輯流程圖
⑹RAM地址狀態(tài)管理模塊,由128個RAM地址老化管理模塊組成,用于管理128個RAM地址的使用及老化狀態(tài)。邏輯流程圖如圖6所示。系統(tǒng)剛上電時RAM地址的使用狀態(tài)默認(rèn)設(shè)置為未使用 (數(shù)值為‘0’),老化計(jì)數(shù)器清零。當(dāng)RAM的地址狀態(tài)為“0”時,老化計(jì)數(shù)器為零且處于不計(jì)時狀態(tài);當(dāng)RAM的地址狀態(tài)為“1”時,老化計(jì)數(shù)器處于計(jì)時狀態(tài)(時間遞增)。有2種情況會使對應(yīng)的RAM地址的老化計(jì)數(shù)器清零,并開始計(jì)時。第一種情況,有新的MAC表項(xiàng)被寫入到RAM中;第二種情況,RAM中原本存在的MAC表項(xiàng)進(jìn)行了更新。當(dāng)老化計(jì)數(shù)器遞增到設(shè)定的值(默老化時間300s)時,地址保護(hù)模塊會從源端口發(fā)出一個以該MAC表項(xiàng)為目的地址的ARP請求包,詢問該MAC地址所在的主機(jī)是否存在。如果不存在,則通知RAM地址狀態(tài)管理器將該RAM地址設(shè)置為未使用(即,清除此MAC表項(xiàng)),并清零老化計(jì)數(shù)器;如果存在,則將該地址老化計(jì)數(shù)器重新開始計(jì)時。
圖5 RAM讀取接口模塊邏輯流程圖
圖6 RAM地址使用及老化狀態(tài)管理模塊邏輯流程圖
3.3MAC地址學(xué)習(xí)包代理轉(zhuǎn)發(fā)功能說明
MAC地址學(xué)習(xí)包代理轉(zhuǎn)發(fā)功能開啟后,SDH設(shè)備主動模擬接入SDH設(shè)備的主機(jī)發(fā)送免費(fèi)的arp包,從而更新后端網(wǎng)絡(luò)設(shè)備的MAC表項(xiàng)。此功能使得傳輸設(shè)備與其它設(shè)備MAC表項(xiàng)的更新狀態(tài)保持一致,提高了整個網(wǎng)絡(luò)的穩(wěn)定性。
實(shí)際應(yīng)用中網(wǎng)絡(luò)如圖7所示,網(wǎng)絡(luò)由前端交換網(wǎng)絡(luò)、后端交換網(wǎng)絡(luò)和SDH傳輸網(wǎng)絡(luò)組成。前后端的交換網(wǎng)絡(luò)通過SDH傳輸網(wǎng)絡(luò)實(shí)現(xiàn)前后端的數(shù)據(jù)交換。SDH網(wǎng)絡(luò)可以根據(jù)與交換網(wǎng)絡(luò)的鏈路情況選擇一條傳輸路徑連接交換網(wǎng)絡(luò)。傳輸網(wǎng)絡(luò)中SDHA-SDHD為SDH傳輸設(shè)備,后端交換網(wǎng)絡(luò)SW1和SW2為三層交換機(jī)。正常情況下前后端交換網(wǎng)絡(luò)通過路徑①③進(jìn)行數(shù)據(jù)交換。當(dāng)鏈路③故障時,傳輸路徑自動切換為①④。后端網(wǎng)絡(luò)SW1和SW2互為主備熱備方式。PC2為雙網(wǎng)卡終端,能夠?qū)崿F(xiàn)主備網(wǎng)卡的切換。此網(wǎng)絡(luò)拓?fù)湓O(shè)計(jì)為能夠?qū)崿F(xiàn)網(wǎng)絡(luò)故障的快速保護(hù)。
圖7 實(shí)際應(yīng)用網(wǎng)絡(luò)圖
正常通信時,PC1能夠收到PC2的單向數(shù)據(jù)包(此時PC1無任何數(shù)據(jù)包發(fā)出)。但是當(dāng)鏈路③故障時,PC1長達(dá)幾分鐘的時間收不到PC2發(fā)送的數(shù)據(jù)包。此情況不符合此冗余網(wǎng)絡(luò)能夠快速保護(hù)業(yè)務(wù)的初衷。排查原因發(fā)現(xiàn):鏈路③故障時,SW2沒有及時更新PC1的MAC地址導(dǎo)致了此情況的發(fā)生。正常通信時(路徑①③),PC1發(fā)送ARP學(xué)習(xí)包,則SW2的端口4學(xué)習(xí)到了PC1的MAC地址。當(dāng)鏈路③故障時,SDH網(wǎng)絡(luò)切換到路徑①④。由于沒有從PC1到PC2的包,因此SW2的端口2上沒有PC1的MAC地址。當(dāng)PC2到PC1的單向包被發(fā)送到SW2時,SW2發(fā)現(xiàn)PC1和PC2的MAC地址都在端口4上,因此,數(shù)據(jù)不可能從端口2轉(zhuǎn)發(fā)出去,PC1無法收到PC2的數(shù)據(jù),直到SW2的端口2上學(xué)習(xí)到PC1的MAC地址,通信才能恢復(fù)。主要取決于端口2上學(xué)習(xí)到PC1的MAC地址。
如果SDH網(wǎng)絡(luò)具有地址學(xué)習(xí)功能,則當(dāng)SDH網(wǎng)絡(luò)由路徑①③切換到路徑①④時,SDH設(shè)備同時開啟了MAC保護(hù)功能,代替PC1向后端網(wǎng)絡(luò)發(fā)送學(xué)習(xí)包,此時SW2能夠通過路徑①④迅速學(xué)習(xí)到PC1的MAC地址,實(shí)現(xiàn)交換通道的快速建立,從而實(shí)現(xiàn)整個網(wǎng)絡(luò)的快速切換。因此,增加了地址學(xué)習(xí)功能的SDH設(shè)備能夠很好地和交換網(wǎng)絡(luò)互聯(lián),實(shí)現(xiàn)網(wǎng)絡(luò)的快速切換。
以上,我們采用FPGA的方式,實(shí)現(xiàn)了傳輸設(shè)備對接入終端設(shè)備的源MAC地址的學(xué)習(xí)和管理功能。通過實(shí)際的網(wǎng)絡(luò)驗(yàn)證可知,增加了地址學(xué)習(xí)功能的SDH傳輸網(wǎng)絡(luò)能夠很好地與交換網(wǎng)絡(luò)互相配合,共同實(shí)現(xiàn)整個網(wǎng)絡(luò)的功能。因此,此功能行之有效,能夠很好地解決SDH網(wǎng)絡(luò)和交換網(wǎng)絡(luò)互聯(lián)時引入的地址學(xué)習(xí)的問題。
[1]程明坤,趙翠華,江云霞.淺釋交換機(jī)的MAC地址學(xué)習(xí)的過程及應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2012(7):218-218
[2]蔣友,羅惠瓊.二層交換機(jī)中MAC地址的學(xué)習(xí)、查找和老化方法[J].軟件導(dǎo)刊,2005(20):40-42.
[3]云創(chuàng)工作室.Verilog HDL程序設(shè)計(jì)與實(shí)踐[M].北京:人民郵電出版社,2005.
[4]于翔,鄭力明,黃紅斌.基于FPGA的MAC層地址表設(shè)計(jì)與仿真[J].計(jì)算機(jī)工程與設(shè)計(jì),2013(1):121-125.
Address learning function design based on FPGA
WANG Hui
(The 34th Research Institute of CETC,Guilin Guangxi 541004,China)
Current integrated transmission equipments mostly provide high-speed Ethernet interface and realize Ethernet business transmission directly.These transmission equipments,however,could not realize the function of address learning for Ethernet packets,which brings a certain influence to the group network of transmission equipment and switching equipment.In the paper,a design of address learning function based on FPGA is proposed to solve the problem of learning and managing the source MAC address of the data packets. The principle of the circuit is given,the function of each module in the hardware interface module and the address learning module is introduced in detail,and the application verification is carried out.
FPGA,MAC address,aging
TN914.332
A
1002-5561(2016)05-0032-04
10.13921/j.cnki.issn1002-5561.2016.05.010
2016-01-11。
王輝(1981-),男,碩士,工程師,主要從事光通信和網(wǎng)絡(luò)交換方面的工作。