zoukankan      html  css  js  c++  java
  • 以太网 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协议,这样的话,才可以和上位机进行通信。欢迎大家一起交流,Q群:912014800。

      

  • 相关阅读:
    基于jquery的web在线流程图设计器gooFlow
    angularJS学习笔记二
    angularJS学习笔记一
    JavaScript作用域链详解
    图片查看器(可拖拽,缩放,轮播)
    小议window.event || ev
    Vue安装准备工作
    让VS2013添加新类时自动添加public关键字
    win10太垃圾,真的不好用。
    Bind 和 ScaffoldColumn[转]
  • 原文地址:https://www.cnblogs.com/cofin/p/9965801.html
Copyright © 2011-2022 走看看