FPGA千兆网系列1-----ARP发送与接收(自动)

本文介绍了在FPGA环境中实现千兆网ARP协议的发送与接收,包括ARP帧的工作原理、数据报格式、CRC校验计算,以及发送和接收模块的设计与调试。内容涵盖开发环境设置、时钟约束、以太网帧和ARP帧的介绍,还有使用wireshark抓包和CRC计算工具进行辅助调试。
摘要由CSDN通过智能技术生成

开发环境

  • 小梅哥AC6102开发板(内含RTL8211E千兆以太网phy芯片)
  • quartus prime17.1
  • win10
  • 千兆网卡 这个需要电脑支持,不支持就玩不了了
  • 本教程是根据小梅哥的百兆网arp教程改编过来的
    千兆网卡

GMII接口介绍

phy

  • gmii_tx_clk是由fpga输出给phy的,注意方向,gmii_rx_clk则是phy输出给fpga,所以我们系统时钟就采用了gmii_rx_clk即可
    时钟与复位
    全局时钟
  • 由于系统时钟采用了gmii_rx_clk,这个引脚并没有连接到全局时钟上,所以我们可以使用altclkctrl ip核,使该时钟连接到全局时钟上,即便这样,系统时钟到了125Mhz,频率比较高,最好是要做一下时钟的约束,我们只需要简单了写个clk的时序约束就可以了,告诉fpga我们的系统时钟是125Mhz,然后他就会按这个频率去优化时序的
    时序约束
  • 绑定引脚时,可以写个引脚的配置文件,但是要注意总线也是要一个一个绑定的,如gmii_tx_data[0],gmii_tx_data[1]…千万不要写成了gmii_tx_data0,gmii_tx_data1…
    pin
  • 异步释放,同步复位,避免复位引起亚稳态
    复位
//异步释放,同步复位
always  @(posedge clk or negedge s_rst_n)begin
    if(s_rst_n==1'b0)begin
        rst_n_r <=  0;
    end
    else begin
        rst_n_r <=  {rst_n_r[0],1'b1};
    end
end
 
assign  rst_n   =   rst_n_r[1];
  • 以上是我自己遇到过的部分bug,如果实验失败了,首先要检查时钟是否有效,引脚是否绑定正确,时序是否违规。
    gmii
    gmii

以太网帧介绍

以太网帧

ARP帧介绍

ARP帧存在的目的

在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址,
而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。
因此在通讯前必须获得目的主机的硬件地址。 ARP 协议就起到这个作用。

ARP 帧工作原理

源主机发出 ARP 请求,询问“IP 地址是 192.168.0.1 的主机的硬件地址是多少”,并将这
个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播),目的主机
接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个 ARP 应答数据包给源
主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个 ARP 缓存表,可以用 arp -a 命令查看。缓存表中的表项有过期时间
(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP
请求来获得目的主机的硬件地址。想一想,为什么表项要有过期时间而不是一直有效?
ARP 数据报的格式如下图所示(该图出自[TCPIP]):

ARP数据报格式

使用以太网发包工具组ARP包

发包工具
arp
注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况
是多余的,但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型, 1 为以太网,
协议类型指要转换的地址类型, 0x0800 为 IP 地址,后面两个地址长度对于以太网地址和 IP 地址分别为
6 和 4(字节), op 字段为 1 表示 ARP 请求, op字段为 2 表示 ARP 应答。
arp字段

发包

用wireshark软件抓包

wireshark

用CRC计算软件计算CRC校验值

手动计算CRC

完整的以太网数据包结尾是帧校验(FCS), 即 CRC32 值, 由于整个过程中都没有出现
CRC 校验字段的内容,而我们使用 FPGA 发包需要计算 CRC 校验字段, CRC 校验字段的产生
可以使用软件或硬件的形式产生,本节实验,为了降低难度, 使用 CRC 计算软件手动计算出
数据报的 CRC 值, 因此使用专用 CRC 校验工具对数据内容进行计算以得到校验字:
CRC 校验软件计算校验内容
crc

第一次发的时候,我将arp中的des_mac默认为00_00_00_00_00_00的,后面通过arp应答包,解析出des_mac的值后,crc就要做相应的更新,为了方便,我是直接用crc计算校正值的,不同的电脑mac不一样,所以需要自己计算一下。

always	@(posedge clk or negedge rst_n)begin
	if(rst_n == 1
  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值