Altera三速以太网IP核使用(下篇)之千兆网接口设计与使用
MAC IP核的主要作用是:實現(xiàn)數(shù)據(jù)鏈路層協(xié)議,分為TX方向與RX方向,TX方向?qū)崿F(xiàn)的是在原包文的前面加上7個55和1個D5,RX方向則相反。在使用這個 MAC IP核之前,首先確認下自己使用的網(wǎng)卡是支持千兆網(wǎng)卡還是百兆網(wǎng)卡,我自己的電腦是百兆網(wǎng)卡,百兆網(wǎng)卡只支持百兆速率的傳輸,要按照百兆網(wǎng)卡進行管腳配置。
管腳配置
根據(jù)數(shù)據(jù)手冊P54、P55進行硬件管腳引出:
千兆網(wǎng)連接模式
千兆網(wǎng)的PHY芯片數(shù)據(jù)接收與發(fā)送管腳txd與rxd均是8bit,需要用pll倍頻125M給PHY芯片的gtx_clk以及MAC IP核的tx_clk,PHY芯片會根據(jù)發(fā)送速率產(chǎn)生一個隨路時鐘給MAC IP核的rx_clk。
百兆網(wǎng)連接模式
百兆網(wǎng)的PHY芯片數(shù)據(jù)接收與發(fā)送管腳txd與rxd均是4bit,并且只需要給一個Reference Clock 至PHY芯片,PHY芯片就會產(chǎn)生25M的tx_clk與rx_clk至MAC IP核,這里注意要把m_rx_col 與m_rx_crs芯片管腳也引出來作為MAC IP核的m_rx_col 與m_rx_crs輸入,要注意的是千兆網(wǎng)PHY芯片的使用是不需要這兩個管腳的。
MAC IP核生成注意事項
如果選擇的是生成32bit數(shù)據(jù)位寬的內(nèi)部 FIFO,那么“Align packet headers to 32-bit boundary"就是一個可選擇項,具體見數(shù)據(jù)手冊:
特別要注意的是:
“Align packet headers to 32-bit boundary"這個選項的作用就是為了對齊數(shù)據(jù),自動往TX方向/RX方向減少或者增加兩個字節(jié)。因為按照TX方向發(fā)送包文格式:
目的地址(6字節(jié))+源地址(6字節(jié))+類型(2字節(jié))+數(shù)據(jù)
目的地址(6字節(jié))+源地址(6字節(jié))+類型(2字節(jié))=14(字節(jié)),MAC 內(nèi)部FIFO是32bit,也就是一次發(fā)送4byte,14字節(jié)不是4的倍數(shù),因此,“Align packet headers to 32-bit boundary"這個選項是為了對齊數(shù)據(jù),避免一個時鐘周期內(nèi)地址與數(shù)據(jù)混合發(fā)送,如果不勾選此選項,F(xiàn)PGA與PC端通訊的數(shù)據(jù)字節(jié)數(shù)會保持一致。
傳輸速率要求
1、對于千兆網(wǎng),只要保證用戶側(cè)速率>1G即可;
2、對于百兆網(wǎng),只要保證用戶側(cè)速率>100M即可;
我這里選用32bit的內(nèi)部FIFO,用PLL分頻出10M時鐘給MAC IP核的ff_tx_clk 、ff_rx_clk以及clk,這樣用戶側(cè)速率就是32bit X 10M > 100M,符合速率傳輸要求。
MAC IP核的初始化配置
關(guān)于MAC IP核的初始化配置非常重要,如果實在看不懂Command_config Register的配置,請嚴格按照數(shù)據(jù)手冊P97-P98配置即可
唯一要注意的是最后要保證TX與RX的使能端口已經(jīng)開啟,因此最后要讀下16‘h02這個地址,以確保Command_config Register 已經(jīng)等于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芯片的復(fù)位時間
由數(shù)據(jù)手冊可以看到,PHY芯片的上電復(fù)位時間至少要維持10ms,以50M輸入時鐘為例,我的設(shè)計如下:
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 方向: 初始化完成后,自動產(chǎn)生MAC 層包文,經(jīng)過MAC IP 進行數(shù)據(jù)鏈路層處理后,將包文發(fā)給PHY 芯片RTL8211,PHY 芯片經(jīng)過PHY 層處理后再傳給PC,PC 使用wireshark 軟件采集包文觀察。
RX 方向: PC 發(fā)廣播包文給PHY 芯片,PHY 芯片經(jīng)過PHY 層處理后送給FPGA,F(xiàn)PGA 接到后經(jīng)過數(shù)據(jù)鏈路層處理后,用SIGNALTAP 觀測最后的信號。
用到的輔助測試軟件:
1、小兵發(fā)包:往FPGA 發(fā)數(shù)據(jù)
2、wireshark:捕獲發(fā)送與接收包文
TX方向,F(xiàn)PGA往PC發(fā)128字節(jié)長度的廣播包
PC端收到完好的128個字節(jié)的廣播包
(2)RX方向
小兵發(fā)64字節(jié)的廣播包
FPGA收到完好的64個字節(jié)的廣播包
至此,有關(guān)該MAC IP核百兆網(wǎng)的設(shè)計與使用完畢,有關(guān)MAC IP核千兆網(wǎng)的使用與它類似,只需要注意PHY芯片的gtx_clk時鐘由PLL倍頻得到125M作為輸入以及接收/發(fā)送數(shù)據(jù)端口均為8bit即可。
注意:未經(jīng)允許,禁止轉(zhuǎn)載,違法必究!
總結(jié)
以上是生活随笔為你收集整理的Altera三速以太网IP核使用(下篇)之千兆网接口设计与使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 背投大广告代码
- 下一篇: 正交矩阵、EVD、SVD