Altera三速以太網IP核使用(下篇)--- 百兆網接口設計與使用

   MAC IP核的主要做用是:實現數據鏈路層協議,分爲TX方向與RX方向,TX方向實現的是在原包文的前面加上7個55和1個D5,RX方向則相反。在使用這個 MAC IP核以前,首先確認下本身使用的網卡是支持千兆網卡仍是百兆網卡,我本身的電腦是百兆網卡,百兆網卡只支持百兆速率的傳輸,要按照百兆網卡進行管腳配置。測試

 

(1)進行管腳配置:spa

根據數據手冊P5四、P55進行硬件管腳引出:設計

                                                               千兆網鏈接模式3d

千兆網的PHY芯片數據接收與發送管腳txd與rxd均是8bit,須要用pll倍頻125M給PHY芯片的gtx_clk以及MAC IP核的tx_clk,PHY芯片會根據發送速率產生一個隨路時鐘給MAC IP核的rx_clk。code

                                                           百兆網鏈接模式blog

  百兆網的PHY芯片數據接收與發送管腳txd與rxd均是4bit,而且只須要給一個Reference Clock 至PHY芯片,PHY芯片就會產生25M的tx_clk與rx_clk至MAC IP核,這裏注意要把m_rx_col 與m_rx_crs芯片管腳也引出來做爲MAC IP核的m_rx_col 與m_rx_crs輸入,要注意的是千兆網PHY芯片的使用是不須要這兩個管腳的。it

(2)MAC IP核生成注意事項:io

 

 

 若是選擇的是生成32bit數據位寬的內部 FIFO,那麼「Align packet headers to 32-bit boundary"就是一個可選擇項,具體見數據手冊:class

特別要注意的是:bfc

               

「Align packet headers to 32-bit boundary"這個選項的做用就是爲了對齊數據,自動往TX方向/RX方向減小或者增長兩個字節。由於按照TX方向發送包文格式:

目的地址(6字節)+源地址(6字節)+類型(2字節)+數據 

目的地址(6字節)+源地址(6字節)+類型(2字節)=14(字節),MAC 內部FIFO是32bit,也就是一次發送4byte,14字節不是4的倍數,所以,「Align packet headers to 32-bit boundary"這個選項是爲了對齊數據,避免一個時鐘週期內地址與數據混合發送,若是不勾選此選項,FPGA與PC端通信的數據字節數會保持一致。

(3)傳輸速率要求

一、對於千兆網,只要保證用戶側速率>1G便可;

二、對於百兆網,只要保證用戶側速率>100M便可;

我這裏選用32bit的內部FIFO,用PLL分頻出10M時鐘給MAC IP核的ff_tx_clk 、ff_rx_clk以及clk,這樣用戶側速率就是32bit X 10M > 100M,符合速率傳輸要求。

(4)MAC IP核的初始化配置

關於MAC IP核的初始化配置很是重要,若是實在看不懂Command_config Register的配置,請嚴格按照數據手冊P97-P98配置便可

 

 

         

   惟一要注意的是最後要保證TX與RX的使能端口已經開啓,所以最後要讀下16‘h02這個地址,以確保Command_config Register 已經等於0x00800223。

   個人初始化配置表以下所示:

parameter      REG_NUM =      19 ; 

always  @(*)begin
    case(reg_cnt) 0   :add_wdata = {3'b110,8'h02,32'h00802220};//common 
        1   :add_wdata = {3'b110,8'h09,32'd2032 };//tx_section_emty 
        2   :add_wdata = {3'b110,8'h0e,32'd4 };//tx_almost_full 
        3   :add_wdata = {3'b110,8'h0d,32'd08 };//tx_almost_empty 
        4   :add_wdata = {3'b110,8'h07,32'd2032 };//rx_section_empty 
        5   :add_wdata = {3'b110,8'h0c,32'd08 };//rx_almost_full 
        6   :add_wdata = {3'b110,8'h0b,32'd08 };//rx_almost_emty 
        7   :add_wdata = {3'b110,8'h0a,32'd16 };//tx_section_full 
        8   :add_wdata = {3'b110,8'h08,32'd16 };//rx_section_full 
        9   :add_wdata = {3'b110,8'h03,32'h01020304};//MAC0 
        10  :add_wdata = {3'b110,8'h04,32'h00000605};//MAC1 
        11  :add_wdata = {3'b110,8'h05,32'd1518 };//MAX FRAME LENGTH 
        12  :add_wdata = {3'b110,8'h17,32'd12 };//TX IPG LEGNTH 
        13  :add_wdata = {3'b110,8'h06,32'h0000ffff};//pause_quant 

        14  :add_wdata = {3'b110,8'h02,32'h00800220};//.. 

        15  :add_wdata = {3'b110,8'h02,32'h00802220};//common,rst,set SW_RESET bit to 1 
        16  :add_wdata = {3'b001,8'h00,32'h00010_0000};//wait 
        17  :add_wdata = {3'b010,8'h02,32'h00800220 };//wait 
18 :add_wdata = {3'b110,8'h02,32'h00800223};//common,enable tx and rx // default:add_wdata = 0; endcase end

 

(4)PHY芯片的復位時間

 

 由數據手冊能夠看到,PHY芯片的上電覆位時間至少要維持10ms,以50M輸入時鐘爲例,個人設計以下:

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin cnt_phy_reset <= 0; end
    else if(add_cnt_phy_reset)begin
        if(end_cnt_phy_reset) cnt_phy_reset <= 0; else cnt_phy_reset <=cnt_phy_reset + 1; end
end

assign add_cnt_phy_reset = flag==0 ; assign end_cnt_phy_reset = add_cnt_phy_reset && cnt_phy_reset== 10_00_000 ;       //拉低10ms

always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        flag <= 0; end
    else if(end_cnt_phy_reset)begin flag <= 1; end
end

always  @(posedge clk or negedge rst_n)begin               //phy_reset 
    if(rst_n==1'b0)begin
         phy_reset <= 1; end
    else if(flag==0&&add_cnt_phy_reset && cnt_phy_reset == 500_000)begin phy_reset <= 0; end
    else if(end_cnt_phy_reset)begin phy_reset <= 1; end
end

(5)測試驗證:

TX 方向: 初始化完成後,自動產生MAC 層包文,通過MAC IP 進行數據鏈路層處理後,將包文發 給PHY 芯片RTL8211,PHY 芯片通過PHY 層處理後再傳給PC,PC 使用wireshark 軟件採集包文觀察。

RX 方向: PC 發廣播包文給PHY 芯片,PHY 芯片通過PHY 層處理後送給FPGA,FPGA 接到後通過數據鏈路層處理後,用SIGNALTAP 觀測最後的信號。

用到的輔助測試軟件:

一、小兵發包:往FPGA 發數據

二、wireshark:捕獲發送與接收包文

TX方向,FPGA往PC發128字節長度的廣播包

 

 PC端收到無缺的128個字節的廣播包

 

 (2)RX方向

小兵發64字節的廣播包

 

 FPGA收到無缺的64個字節的廣播包

  至此,有關該MAC IP核百兆網的設計與使用完畢,有關MAC IP核千兆網的使用與它相似,只須要注意PHY芯片的gtx_clk時鐘由PLL倍頻獲得125M做爲輸入以及接收/發送數據端口均爲8bit便可。

相關文章
相關標籤/搜索