基于Spartan-6的多路網絡數據采集卡設計與實現
引言
本文引用地址:http://www.104case.com/article/127893.htm隨著互聯網的迅猛發展,網絡監控的需求日益迫切。為了實現對網絡實時監控,有必要及時全面地收集、分析網絡的數據,準確獲取網絡信息,對網絡的信息進行監控,及時發現可能會出現的問題。然而隨著網絡帶寬的增加和規模的擴大,大規模網絡數據采集面臨著數據規模龐大和數據到達速度過快的挑戰。為了克服上述困難,通常采用硬件實現完成數據采集功能。
隨著FPGA的發展,其內部資料日益豐富,速度和性能大大提高,特別是內部嵌入了大量IP核,使得FPGA上進行高速網絡數據采集成為可能。本文涉及的多路網絡采集卡系統采用Xilinx的Spartan 6系列中XC6SLX45T FPGA,獲取8路10/100M RJ45端口送來的網絡數據包,并將數據包發送到PC機進行分析和監控,最終根據分析結果來判斷網絡中的異常情況。
系統概述
系統框圖
圖1所示為系統的原理框圖。8路10/100M網絡數據通過RJ45接口送入到PHY芯片,PHY芯片完成轉換之后,通過MII接口送到FPGA。FPGA中集成了8路MAC核,將網絡數據輸出到隊列管理;隊列管理對每路MAC的數據包進行管理,并輸出到PCIe的DMA模塊;DMA模塊將數據包發送到PCIe硬核,直接寫入到PC機的內存,以便PC機進行分析。

隊列管理
由于網絡數據的包大小不同,在一個包沒有讀完之前有可能第二個包到來,因此有必要對網絡的數據包進行隊列管理,避免數據包丟失的情況。
本系統中的隊列管理采用雙口RAM和FIFO聯合構成,其中雙口RAM用來存儲數據包,FIFO用來存儲數據包的起始地址和結束地址。當FIFO有數據時說明RAM中有數據包,如果此時并沒有數據包在向DMA中寫數據,那么就可以讀出當前數據包寫入到DMA模塊;如果此時正在向DMA模塊寫數據,則等待寫完后再讀下一個包。
由于網絡數據和PCIe DMA模塊的時鐘處于兩個時鐘域,所以采用雙口RAM和FIFO也可以起到數據同步的作用。
評論