1. 程式人生 > >乙太網 mac層傳輸 verilog 測試程式

乙太網 mac層傳輸 verilog 測試程式

module mac_tes(
    rst_n       ,
    en          ,
    gmii_rxc    ,//125M
    gmii_gtxc   ,
    gmii_tx_en  ,  
    gmii_tx_err ,  
    gmii_tx_dat 
);

input       rst_n   ;

input       gmii_rxc    ;

output      gmii_tx_err ;
output      gmii_tx_en  ;
output[7:0] gmii_tx_dat ;
output      gmii_gtxc   ;

reg       gmii_tx_en  ;
reg [
7:0] gmii_tx_dat ; reg [ (7-1):0] cnt ; reg flag ; wire add_cnt ; wire end_cnt ; wire gmii_tx_en1 ; assign gmii_gtxc = gmii_rxc ; assign gmii_tx_err = 1'b0; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin gmii_tx_en_tmp <= 0; end
else if(gmii_tx_en1)begin gmii_tx_en_tmp <= 1; end else if(end_cnt)begin gmii_tx_en_tmp <= 0; end end assign gmii_tx_en1 = gmii_tx_en==0 && en==1; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin gmii_tx_en <= 0; end else
begin gmii_tx_en <= gmii_tx_en_tmp; end end always @(posedge clk or negedge rst_n) begin if (rst_n==0) begin cnt <= 0; end else if(add_cnt) begin if(end_cnt) cnt <= 0; else cnt <= cnt+1 ; end end assign add_cnt = (gmii_tx_en); assign end_cnt = add_cnt && cnt == (64+8)-1 ; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin gmii_tx_dat <= 0; end else if(cnt>=0 && cnt<7)begin gmii_tx_dat <= 8'h55; end else if(cnt==7)begin gmii_tx_dat <= 8'hd5; end else if(cnt>=8 && cnt<14)begin //dst gmii_tx_dat <= 8'h12; end else if(cnt>=14 && cnt<20)begin //src gmii_tx_dat <= 8'h12; end else if(cnt==20)begin // gmii_tx_dat <= 8'h00; end else if(cnt==21)begin gmii_tx_dat <= 8'h2e; end else begin gmii_tx_dat <= 8'hff; end end endmodule

 

  當使用千兆網phy晶片,並且使用的gmii 介面。  僅用於測試千兆網phy晶片能不能通訊正常。

 

  在實際應用千兆網的過程中,需要實現arp協議,這樣的話,才可以和上位機進行通訊。