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


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

管腳配置

根據數據手冊P54、P55進行硬件管腳引出:

                     千兆網連接模式

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

                   百兆網連接模式

  百兆網的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芯片的使用是不需要這兩個管腳的。

MAC IP核生成注意事項

 

 

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

特別要注意的是:

               

“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端通訊的數據字節數會保持一致。

傳輸速率要求

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

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

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

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

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

測試驗證

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

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

用到的輔助測試軟件:

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

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

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

PC端收到完好的128個字節的廣播包

 

(2)RX方向

小兵發64字節的廣播包

 

 FPGA收到完好的64個字節的廣播包

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

  注意:未經允許,禁止轉載,違法必究!

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM