Intel Triple-speed Ethernet IP 使用笔记(三)

寄存器配置方法:

  • 根据手册5.3Register Initialization进行寄存器配置(我这里是MII接口)

   

  • 我给工程加了上电复位1us的模块,复位之后,开始进行寄存器设置,确保上电所有的寄存器被正确设置
  • 寄存器配置部分代码如下,init_cnt为初始化计数器,上电复位完成之后,开始计数

//MAC端初始化

always @(posedge clk or negedge rst_n) begin

    if(!rst_n) begin

        eth_ctrl_reg_addr   <=  8'h0    ;

        eth_ctrl_reg_rden   <=  0       ;

        eth_ctrl_reg_wren   <=  0       ;

        eth_ctrl_reg_wrdata <=  0       ;

    end

    else begin

        case(init_cnt)

        0:  begin//command_register txena/rxena disabled

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h02               ;

            eth_ctrl_reg_wrdata <=  32'h0080_2220      ;

        end

        1:  begin//tx_section_empty= MAX FIFO size -16

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h09               ;

            eth_ctrl_reg_wrdata <=  MAX_FIFO_SIZE   -16 ;

        end

        2:  begin//tx_almost_full

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h0E               ;

            eth_ctrl_reg_wrdata <=  4                   ;

        end

        3:  begin//tx_almost_empty

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h0D               ;

            eth_ctrl_reg_wrdata <=  8                   ;

        end

        4:  begin//rx_section_empty

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h07               ;

            eth_ctrl_reg_wrdata <=  MAX_FIFO_SIZE   -16 ;

        end

        5:  begin//rx_section_almost_full

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h0C               ;

            eth_ctrl_reg_wrdata <=  8                   ;

        end

        6:  begin//rx_almost_empty

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h0B               ;

            eth_ctrl_reg_wrdata <=  8                   ;

        end

        7:  begin//tx_section_full

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h0A               ;

            eth_ctrl_reg_wrdata <=  16                  ;

        end

        8:  begin//rx_section_full

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h08               ;

            eth_ctrl_reg_wrdata <=  16                  ;

        end

        9:  begin//设置MAC0寄存器

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h03               ;

            eth_ctrl_reg_wrdata <=  32'h17231c00        ;

        end

        10: begin//设置MAC1寄存器

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h04               ;

            eth_ctrl_reg_wrdata <=  32'h0000cb4a        ;

        end

        11: begin//max frm_length设置

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h05               ;

            eth_ctrl_reg_wrdata <=  32'd1518            ;

        end

        12: begin//tx_ipg_length设置

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h17               ;

            eth_ctrl_reg_wrdata <=  12                  ;

        end

        13: begin//pause_quant

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h06               ;

            eth_ctrl_reg_wrdata <=  32'h0000_FFFF       ;

        end

        14: begin

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h02               ;

            eth_ctrl_reg_wrdata <=  32'h00800220        ;

        end

        15: begin//commaon,rst,set SW_RESET bit to 1

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h02               ;

            eth_ctrl_reg_wrdata <=  32'h00802220        ;

        end

        16: begin//wait

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h00               ;

            eth_ctrl_reg_wrdata <=  32'h00100000        ;

        end

        17: begin//wait

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h02               ;

            eth_ctrl_reg_wrdata <=  32'h00800220        ;

        end

        18:begin

            eth_ctrl_reg_wren   <=  1                   ;

            eth_ctrl_reg_addr   <=  8'h02               ;

            eth_ctrl_reg_wrdata <=  32'h00800223        ;

        end

        default:    begin

            eth_ctrl_reg_wren   <=  0                   ;

            eth_ctrl_reg_addr   <=  8'h00               ;

            eth_ctrl_reg_wrdata <=  32'h00000000        ;

        end  

        endcase

    end

end

   

posted @ 2022-01-10 10:02  ChaoyaWang  阅读(244)  评论(0编辑  收藏  举报