小工具知识网

当前位置: 首页 > 行业知识 > FPGA——三速自适应以太网设计(1)基本模块

行业知识

FPGA——三速自适应以太网设计(1)基本模块

2026-11-08 18:00:52 来源:互联网转载

FPGA——以太网设计(1)基本模块

  • 1. 协议解析
    • (1)MAC层
    • (2)IP层 和 ARP层
    • (3)UDP层 和 ICMP层
    • 2.1 MAC接收模块
    • 2.2 MAC发送模块
    • 3.1 IP接收模块
    • 3.2 IP发送模块
    • 4.1 UDP接收模块
    • 4.2 UDP发送模块
    • 5.1 ICMP接收模块
    • 5.2 ICMP发送模块
    • 6.1 ARP接收模块
    • 6.2 ARP发送模块
    • 6.3 ARP表模块
    • 7 CRC数据对比模块
    • 8 MAC下ARP和IP数据分流模块
    • 9 数据流仲裁模块
    • 模块收发组合
      • 1 MAC层收发
        • 2 ARP层收发
        • 2 IP层收发
          • 3 ICMP层收发
          • 3 UDP层收发
          • UDP协议���

            1. 协议解析

            每层都嵌套在上层的数据字段

            (1)MAC层

            以太网帧长: 64B~1518B

            (2)IP层 和 ARP层

            IP层

            ARP层

            (3)UDP层 和 ICMP层

            UDP层

            ICMP层

            2.1 MAC接收模块

            module MAC_rx#(    parameter       P_TARTGET_MAC   =   {8'h00,8'h00,8'h00,8'h00,8'h00,8'h00},                    P_SOURCE_MAC    =   {8'h00,8'h00,8'h00,8'h00,8'h00,8'h00},                    P_CRC_CHECK     =   1)(    input           i_clk               ,    input           i_rst               ,    /*--------info port--------*/       input  [47:0]   i_target_mac        ,    input           i_target_mac_valid  ,    input  [47:0]   i_source_mac        ,    input           i_source_mac_valid  ,    /*--------data port--------*/    output [15:0]   o_post_type         ,    output [7 :0]   o_post_data         ,    output          o_post_last         ,    output          o_post_valid        ,    output [47:0]   o_rec_src_mac       ,    output          o_rec_src_valid     ,    output          o_crc_error         ,       output          o_crc_valid         ,        /*--------GMII port--------*/    input  [7 :0]   i_GMII_data         ,    input           i_GMII_valid        );/***************function**************//***************parameter*************//***************port******************/             /***************mechine***************//***************reg*******************/reg                 ro_post_last          ;reg                 ro_post_valid         ;reg  [47:0]         ro_rec_src_mac      ;reg                 ro_rec_src_valid    ;reg                 ro_crc_error        ;reg  [7 :0]         ri_GMII_data        ;reg                 ri_GMII_valid       ;reg  [7 :0]         ri_GMII_data_1d     ;reg                 ri_GMII_valid_1d    ;reg  [7 :0]         ri_GMII_data_2d     ;reg                 ri_GMII_valid_2d    ;reg  [7 :0]         ri_GMII_data_3d     ;reg                 ri_GMII_valid_3d    ;reg  [7 :0]         ri_GMII_data_4d     ;reg                 ri_GMII_valid_4d    ;reg  [7 :0]         ri_GMII_data_5d     ;reg                 ri_GMII_valid_5d    ;reg  [47:0]         r_target_mac        ;reg  [47:0]         r_source_mac        ;reg  [47:0]         r_rec_mac           ;reg                 r_rec_mac_access    ;reg  [15:0]         r_rec_cnt           ;reg                 r_headr_check       ;reg                 r_header_access     ;reg  [15:0]         r_rec_type          ;//0x0800-IP 0X0806-ARPreg                 r_crc_rst           ;reg                 r_crc_en            ;reg                 r_crc_en_1d         ;reg  [15:0]         r_rec_5d_cnt        ;reg  [31:0]         r_crc_result        ;reg                 ro_crc_valid        ;/***************wire******************/wire [31:0]         w_crc_result        ;/***************component*************/CRC32_D8 CRC32_D8_u0(  .i_clk            (i_clk              ),  .i_rst            (r_crc_rst          ),  .i_en             (r_crc_en           ),  .i_data           (ri_GMII_data_5d       ),  .o_crc            (w_crc_result       )   );/***************assign****************/assign o_post_type     = r_rec_type             ;assign o_post_data     = ri_GMII_data_5d        ;assign o_post_last     = ro_post_last             ;assign o_post_valid    = ro_post_valid            ;assign o_rec_src_mac   = ro_rec_src_mac         ;assign o_rec_src_valid = ro_rec_src_valid       ;assign o_crc_error     = ro_crc_error           ;assign o_crc_valid     = ro_crc_valid           ;/***************always****************///数据打5拍,为了对齐信号always@(posedge i_clk,posedge i_rst)begin    if(i_rst) begin        ri_GMII_data        r_rec_mac[39:0],ri_GMII_data};    else         r_rec_mac 

上一篇:宝塔面板文件是怎么?

下一篇:yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署