基于FPGA实现的自适应三速以太网

一、三速以太网

千兆以太网PHY芯片是适配百兆和十兆的,十兆就不管了,我们的设计只适应千兆和百兆。
在这里插入图片描述
根据上图,我们是可以获取当前主机网口的速率信息的。

always@(posedge w_rxc_bufr)
begin
    if(w_rec_valid == 'd0) begin
        ro_speed <= w_rec_data[2:1];
        ro_link  <= w_rec_data[0];
    end else begin
        ro_speed <= ro_speed;
        ro_link  <= ro_link ;
    end
end

千兆网的设计我们前面的章节介绍的很详细了,至于百兆,主要区别就在于时钟速率从125Mhz变为了25Mhz,双沿采样变为单沿采样,所以我们只需要在ODDR和IDDR使用的时候注意单沿问题即可。
对于接收数据而言,上下沿采样到的数据是一样的,也就是说一次收到的数据高四位和低四位一样,完整的8bit数据需要前一拍数据后一拍数据拼接

always@(posedge w_rxc_bufr)
begin
    if(i_speed1000)
        ro_rec_data <= w_rec_data;
    else 
        ro_rec_data <= {w_rec_data[3:0],ro_rec_data[7:4]};
end

对于发送数据而言,r_tx_cnt_10_100信号是1bit的,不断在01变化,相当于一个时钟指示信号,通过这样的方式实现单沿传输,一个时钟只传输4bit,在下一个时钟再去传输延迟一拍数据的高4bit,这是因为用户进来的数据是8bit的。

genvar txd_i;
generate for(txd_i = 0 ;txd_i < 4 ; txd_i = txd_i + 1)
begin
    assign w_send_d1[txd_i] = i_speed1000 ? i_send_data[txd_i]     :  
                              r_tx_cnt_10_100 == 0 ? i_send_data[txd_i] : ri_send_data[txd_i + 4];

    assign w_send_d2[txd_i] = i_speed1000 ? i_send_data[txd_i + 4] : 
                              r_tx_cnt_10_100 == 0 ? i_send_data[txd_i] : ri_send_data[txd_i + 4];

    ODDR #(
        .DDR_CLK_EDGE    ("OPPOSITE_EDGE"       ),
        .INIT            (1'b0                  ),
        .SRTYPE          ("SYNC"                ) 
    ) 
    ODDR_u 
    (
        .Q               (o_txd[txd_i]          ),  
        .C               (w_txc                 ),
        .CE              (1                     ),
        .D1              (w_send_d1[txd_i]      ),    
        .D2              (w_send_d2[txd_i]      ),    
        .R               (0                     ),
        .S               (0                     ) 
    );
end
endgenerate

二、上板效果

网口速率在这里更改
在这里插入图片描述
wireshark抓包和网络调试助手回环检测,一切正常

在这里插入图片描述
VIVADO上板通过ILA抓包:数据与发送数据一致
注:JTAG进行抓信号时,ILA频率要大于JTAG频率2.5倍,对于千兆而言不用管,但是抓百兆数据信号时,要调整一下JTAG的时钟频率!!

在这里插入图片描述

FPGA百兆以太网RMII(Reduced Media Independent Interface)是一种常见的以太网通信接口标准,它通常被用于FPGA设计中实现网络通信功能。 百兆以太网是一种传输速率为100 Mbps的局域网标准,RMII是一种用于连接以太网PHY(物理层接口)和MAC(介质访问控制层)的接口标准。它采用了简化的物理层信号编码方式,通过减少物理线路的使用数量和降低成本来实现传输速率的降低。 在FPGA设计中,通过实现百兆以太网RMII接口,可以将FPGA与其他设备(如PC、服务器等)连接起来,实现数据的高速传输和网络通信。在设计中,需要一个以太网PHY芯片来实现物理层的功能,而RMII接口则用于连接PHY芯片和FPGAFPGA百兆以太网RMII接口的设计和实现需要考虑以下几个方面:首先,需要选择合适的RMII PHY芯片和FPGA开发板,确保它们之间的兼容性;其次,需要进行时序约束的设置,以保证数据的可靠传输;另外,还需要编写相应的驱动程序,来实现数据的发送和接收。 FPGA百兆以太网RMII接口在嵌入式系统、通信设备和数据中心等领域中得到广泛应用。它具有低成本、低时延和灵活性高等优点,可以满足高速数据传输和网络通信的需求。通过合理的设计和实现FPGA百兆以太网RMII接口能够为各种应用场景提供稳定、可靠的网络连接,并实现高效的数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺子学不会FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值