日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Altera三速以太网IP核使用(下篇)之千兆网接口设计与使用

發布時間:2023/12/13 综合教程 55 生活家
生活随笔 收集整理的這篇文章主要介紹了 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即可。

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

總結

以上是生活随笔為你收集整理的Altera三速以太网IP核使用(下篇)之千兆网接口设计与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。