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。

      

  • 相关阅读:
    PHP 上传文件 function move_uploaded_file: failed to open stream
    python super() 方法使用
    python 负数转为无符号整数
    python Aes 加密 解密
    mongoDB 启动 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
    ansible使用
    字段类型binary
    7-14 求整数段和
    7-13 日K蜡烛图
    7-12 两个数的简单计算器
  • 原文地址:https://www.cnblogs.com/cofin/p/9965801.html
Copyright © 2011-2022 走看看