当前位置: 首页 > article >正文

FPGA进阶教程16 同一块FPGA的两个网口实现arp自通信

本项目使用同一个FPGA的两个网口进行千兆以太网的arp自动绑定

目的是为了以后实现两个FPGA之间进行以太网数据的交互

起因:最近公司画了一块板子,上面有两个网口,市面上常见的项目都是将FPGA与PC端实现arp的自动绑定和UDP数据的回环,很少实现两块FPGA之间的以太网数据通信,所以公司想让我尝试先在一块板的两个网口上实现ARP协议的自动绑定,在查阅了一些资料后发现好像没人做过,只能自己手搓了。。。。

思路:其实实现在同一个FPGA的两个网口进行ARP协议的操作,思路很简单,就是一个网口当主机,另一个网口当从机,下面是我画的一个思路图。

在这里首先简单介绍一下ARP协议:

        如果要实现以太网通信,需要获取对方设备的MAC地址和IP地址,当然了,在不嫌麻烦的前提下,可以进行手动绑定MAC地址,前提是你的上位机是PC端,百度上很多教程教你如何收到绑定MAC地址,但是我们本项目是要实现同一个FPGA的两个网口实现arp协议,那手动绑定mac的情况就不现实了;的确,可以直接在程序里写定对方的mac地址和IP地址,但是为了方便起见,以及为了项目后续的推荐,有一个ARP协议当然是最好的。

        ARP协议,分为ARP请求和ARP应答,源主机发起查询目的MAC地址的报文就称为ARP请求,目的主机相应源主机并发送包含本地MAC地址的报文称为ARP应答。

以下采用了正点原子的官方文档,很详细的介绍了ARP协议:

        当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个 ARP 请求报文,这个报文包含了发送方的 MAC 地址和 IP 地址以及接收方的 IP 地址。因为发送方不知道接收方的物理地址,所以这 个查询分组会在网络层中进行广播,即 ARP 请求时发送的接收方物理地址为广播地址,用 48’hff_ff_ff_ff_ff_ff 表示。 ARP 请求的示意图如下图所示:
        
        上图中的主机 A 发起 ARP 请求,由于发送的目的 MAC 地址为广播地址,所以此时局域网中的所有主机都会进行接收并处理这个 ARP 请求报文,然后进行验证,查看接收方的 IP 地址是不是自己的地址。是则返回 ARP 应答报文,不是则不响应。
        只有验证成功的主机才会返回一个 ARP 应答报文,这个应答报文包含接收方的 IP 地址和物理地址。 ARP 应答的示意图如下图所示:
        
        相信大家如果有一定的ARP基础的话,这些内容都是了解的,我这里的教程主要针对的是在实际项目中有两网口通信需求的工程师,所以arp协议的简介就到这里。
        接下来是代码的编写,首先是顶层文件的编写:
`timescale 1ns / 1ps
//

http://www.kler.cn/news/290508.html

相关文章:

  • Opencv中的直方图(4)局部直方图均衡技术函数createCLAHE()的使用
  • windows修改升级时间
  • 九、安装artifactory并配置PostgreSQL--失败了
  • 如何通过本地服务器来测试环信的回调功能
  • powershell自动提交git脚本
  • Android 13 aosp 恢复出厂设置流程
  • 快消品渠道开发方案,让你拥有源源不断的批发客户!
  • 2.门锁_STM32_舵机设备实现
  • oracle 定时任务dbms_job 增删改查
  • slice
  • 一篇文章深入了解Oracle常用命令
  • xxe漏洞
  • 小型集群分析
  • 【IPV6从入门到起飞】3-域名解析动态IPV6(阿里云)
  • 学习大数据DAY49 考后练习题
  • python学习8:dict字典的定义,操作和方法,跟json有什么区别?
  • 通过查找真实IP bypass WAF
  • 容器化你的应用:使用 Docker 入门指南
  • window 10使用wsl装docker踩坑
  • CCNA课笔记
  • 【NO.17】LeetCode经典150题-13. 罗马数字转整数
  • 装机必看!内存条应该怎么插?各种内存条插法详解
  • Seataf分布式事务的使用
  • 坐牢第三十四天(c++)
  • WordPress自适应美图网站整站打包源码
  • Docker镜像中的源替换为国内源
  • C/C++:函数指针
  • SpringBoot3集成Spring Authorization Server实现SSO单点登录
  • uniapp小程序实现横屏手写签名
  • 宠物智能家居监测器的融合