乙太網 mac層傳輸 verilog 測試程式
阿新 • • 發佈:2018-11-15
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; endelse 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 elsebegin 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協議,這樣的話,才可以和上位機進行通訊。