一、實驗實現功能
本文僅實現最簡單的fpga向電腦主機發送hello world,UDP包,每隔一秒發送一次。上板跑通,可證明整條傳輸鏈路打通,對IP核的配置及使用是正確的。主要參考文獻是altera官方的ug 01008"Triple-Speed Ethernet Intel FPGA IP User Guide".讀者需對以太網OSI分層模型有基本的瞭解。需要知道物理層幀格式、IP層包格式以及UDP報文格式。這個在UG01008的附錄內也有介紹。
二、數據流以及控制流
搭建nios片上系統,CPU c程序通過avalon_mm總線配置千兆網(即三速以太網(Triple-Speed Ethernet,TSE)IP核,配置完成後,拉起一個PIO寄存器的值,指示邏輯模塊定時發送以太網幀(物理層)。
三、工程需注意點
工程結構如下圖
tse_top例化三個模塊。
1.frame_send是定時發送以太網幀的邏輯模塊,通過avalon_streanm接口連接到qsys模塊tse_qsys上。
2.tse_qsys爲片上系統的頂層文件,內涵nios cpu,jtag_uart,onchip mem,tse ip核以及pio等組件。
3.pll爲qsys和frame_send模塊以及tse_top提供數個頻率的時鐘。
tse_top頂層模塊
tse_top的輸入輸出口如下圖
o_rgm_clk是rgmii接口時鐘,本實驗爲125Mhz(TSE IP核配置爲千兆模式,百兆模式下該時鐘應爲12.5MHz,十兆模式下應爲1.25Mhz)
o_rgm_data是rgmii接口數據,位寬爲4位,若ip核配置爲gmii接口,則該信號爲8位。rgmii接口下,ip核內例化了ddr時鐘,上升沿和下降沿均可以採樣數據,因而可以節省一半的數據引腳。
o_rgm_ctl是rgmii接口的控制信號,也是雙沿傳輸的。上升沿傳輸發送使能,下降沿傳輸發送使能和發送錯誤的異或。
o_phy_clk_25m是發送給phy芯片的時鐘,沒有這個時鐘,phy芯片不會工作的。
o_phy_rst_n是phy芯片的復位信號。上點後,phy芯片需要被複位。
tse_qsys模塊
該模塊是qsys的頂層模塊。
搭建qsys系統時需要注意一下幾點。
1.tse ip核內FIFO寬度設置爲8bit較爲方便。
2.時鐘頻率按照ug1008設置,即配置IP核的avalon_mm總線時鐘50mhz,ip核接收邏輯端以太網幀的avalon stream總線頻率100Mhz.
3.例化qsys頂層時,magic_sleep_n需設置1.ff_tx_crc_fwd需設置0.status_connection_set_10設0,status_connection_set_1000設1.
frame_send模塊
該模塊在nios配置完ip核後,開始定時發送以太網幀。
該模塊需注意一下幾點:
1.
圖中,frame_length至少爲64byte.
2.ff_tx_crc_fwd被設置爲0後,ip核會自動爲以太網幀添加FCS
3.ip核自動爲幀添加preable和sfd
其他內容按照以太網幀格式生成即可。
四、c程序和實驗運行流程
1.c程序按照ug1008 97頁推薦配置IP核參數即可.
2.quartus內編譯完工程後燒錄進板子,打開wireshark設置好捕獲規則,開始捕捉。然後eclipse內運行c程序,程序運行完後,邏輯模塊即開始持續發送udp報文,電腦端wirehark內可捕獲到來自板子的UDP報文。