【【通信协议之ARP的FPGA实现其一】】

news2024/12/24 20:26:11

通信协议之ARP的FPGA实现其一

介绍
ARP 协议分为 ARP 请求和 ARP 应答,源主机发起查询目的 MAC 地址的报文称为 ARP 请求,目的主机响应源主机并发送包含本地 MAC 地址的报文称为 ARP 应答。当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个 ARP 请求报文,这个报文包含了发送方的 MAC 地址和 IP 地址以及接收方的 IP 地址。因为发送方不知道接收方的物理地址,所以这个 查 询 分 组 会 在 网 络 层 中 进 行 广 播 , 即 ARP 请 求 时 发 送 的 接 收 方 物 理 地 址 为 广 播 地 址 , 用48’hff_ff_ff_ff_ff_ff 表示。
在这里插入图片描述

上图中的主机 A 发起 ARP 请求,由于发送的目的 MAC 地址为广播地址,所以此时局域网中的所有主机都会进行接收并处理这个 ARP 请求报文,然后进行验证,查看接收方的 IP 地址是不是自己的地址。是则返回 ARP 应答报文,不是则不响应。只有验证成功的主机才会返回一个 ARP 应答报文,这个应答报文包含接收方的 IP 地址和物理地址。
主机 B 利用收到的 ARP 请求报文中的请求方物理地址,以单播的方式直接发送给主机 A,主机 A 将收到的 ARP 应答报文中的目的 MAC 地址解析出来,将目的 MAC 地址和目的 IP 地址更新至 ARP 缓存表中。当再次和主机 A 通信时,可以直接从 ARP 缓存表中获取,而不用重新发起 ARP 请求报文。需要说明的是,ARP 缓存表中的表项有过期时间(一般为 20 分钟),过期之后,需要重新发起 ARP 请求以获取目的 MAC地址。
在这里插入图片描述
在以太网中数据包的传输格式MAC帧如下所示,
MAC帧:前导码(7Byte) , SFD(1Byte) ,以太网帧头(14Byte), 数据段(46-1500 Byte) , FCS (4Byte)
在这里插入图片描述

ARP与常规MAC的区别在于 数据段的信息是 (28Byte的ARP数据+18Byte的填充数据共同组成了整个数据段)
在这里插入图片描述

前导码 : 为了实现底层数据的正确阐述,使用7个字节的同步码0x55_55_55_55 … 0x55 — 01010101
SFD (Start Frame Delimiter) : 固定0xd5作为一帧的开始
目的MAC地址 : (接收端物理的MAC地址)MAC 地址从应用上可分为单播地址、组播地址和广播地址。单播地址:第一个字节的最低位为 0,比如 00-00-00-11-11-11,一般用于标志唯一的设备;组播地址:第一个字节的最低位为 1,比如 01-00-00-11-11-11,一般用于标志同属一组的多个设备;广播地址:所有 48bit 全为 1,即 FF-FF-FF-FF-FF-FF,它用于标志同一网段中的所有设备。
源MAC地址 : 发送端物理 MAC 地址,占用 6 个字节。
长度/类型:当这两个字节的值小于 1536(十六进制为 0x0600)时,代表该以太网中数据段的长度;如果这两个字节的值大于 1536,则表示该以太网中的数据属于哪个上层协议,例如 0x0800 代表 IP 协议(网际协议)、0x0806 代表 ARP 协议(地址解析协议)等。
数据:以太网中的数据段长度最小 46 个字节,最大 1500 个字节。
帧检验序列(FCS,Frame Check Sequence):为了确保数据的正确传输,在数据的尾部加入了 4 个字节的循环冗余校验码(CRC 校验)来检测数据是否传输错误。
在这里还有一个要注意的地方就是以太网相邻两帧之间的时间间隔,即帧间隙(IFG,Interpacket Gap)。帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,IFG 的最小值是 96 bit time,即在媒介中发送 96 位原始数据所需要的时间,在不同媒介中 IFG 的最小值是不一样的。不管 10M/100M/1000M 的以太网,两帧之间最少要有 96bit time,IFG 的最少间隔时间计算方法如下:
10Mbit/s 最小时间为:96100ns = 9600ns;
100Mbit/s 最小时间为:96
10ns = 960ns;
1000Mbit/s 最小时间为:96*1ns = 96ns。

在这里插入图片描述

硬件类型(Hardware type):硬件地址的类型,1 表示以太网地址。
协议类型(Protocol type):要映射的协议地址类型,ARP 协议的上层协议为 IP 协议,因此该协议类型为 IP 协议,其值为 0x0800。硬件地址长度(Hardware size):
硬件地址(MAC 地址)的长度,以字节为单位。对于以太网上 IP 地址的 ARP 请求或者应答来说,该值为 6。
协议地址长度(Protocol size):IP 地址的长度,以字节为单位。对于以太网上 IP 地址的 ARP 请求或者应答来说,该值为 4。(IP地址常用10进制表示)
OP(Opcode):操作码,用于表示该数据包为 ARP 请求或者 ARP 应答。1 表示 ARP 请求,2 表示 ARP应答。
源 MAC 地址:发送端的硬件地址。
源 IP 地址:发送端的协议(IP)地址,如 192.168.1.102。
目的 MAC 地址:接收端的硬件地址,在 ARP 请求时由于不知道接收端 MAC 地址,因此该字段为广播地址,即 48’hff_ff_ff_ff_ff_ff。
目的 IP 地址:接收端的协议(IP)地址,如 192.168.1.10。

RGMII(Reduced GMII):RGMII 是 GMII 的简化版,数据位宽为 4 位,在 1000Mbps 传输速率下,时钟频率为 125Mhz,在时钟的上下沿同时采样数据。在 100Mbps 和 10Mbps 通信速率下,为单个时钟沿采样。在 千 兆 以太 网 中 ,常 用 的接 口 为 RGMII 和 GMII 接 口。 RGMII 接口的 优 势 是同 时 适 用 于10M/100M/1000Mbps 通信速率,同时占用的引脚数较少。但 RGMII 接口也有其缺点,就是在 PCB 布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格。

下面介绍一下 传输管脚的分配形式
在这里插入图片描述

ETH_RXC:接收数据参考时钟,1000Mbps 速率下,时钟频率为 125MHz,时钟为上下沿同时采样;
100Mbps 速率下,时钟频率为 25MHz;10Mbps 速率下,时钟频率为 2.5MHz,ETH_RXC 由 PHY 侧提供。
ETH_RXCTL(ETH_RX_DV):接收数据控制信号。
ETH_RXD:四位并行的接收数据线。
ETH_TXC:发送参考时钟,1000Mbps 速率下,时钟频率为 125MHz,时钟为上下沿同时采样;100Mbps
速率下,时钟频率为 25MHz;10Mbps 速率下,时钟频率为 2.5MHz,ETH_TXC 由 MAC 侧提供。
ETH_TXCTL(ETH_TXEN):发送数据控制信号。
ETH_TXD:四位并行的发送数据线。
ETH_RESET_N:芯片复位信号,低电平有效。
ETH_MDC:数据管理时钟(Management Data Clock),该引脚对 ETH_MDIO 信号提供了一个同步的
时钟。
ETH_MDIO:数据输入/输出管理(Management Data Input/Output),该引脚提供了一个双向信号用于传
递管理信息。
RGMII 使用 4bit 数据接口,在 1000Mbps 通信速率下,ETH_TXC 和 ETH_RXC 的时钟频率为 125Mhz,采用上下沿 DDR(Double Data Rate)的方式在一个时钟周期内传输 8 位数据信号,即上升沿发送/接收低 4位数据,下降沿发送/接收高 4 位数据。
接下来我们用ETH_TXC时钟频率125Mhz ,采用上下沿DDR(double data rate) ,在一个周期内传输8位数据信号,上升沿发送低4位,下降沿发送高4位。
ETH_TXCTL 同样采用 DDR的方式传递2位控制信号,上升沿发送使能信号TX_EN ,下降沿发送使能信号与错误信号的异或值,(TX_ERR xor TX_EN)。 当TX_EN 为高表示数据有效,TX_ERR为低表示数据无效,只有当ETH_RXCTL上下沿同时为高时,数据才有效正确。
当 RGMII 工作在 100Mbps 时,ETH_TXC 和 ETH_RXC 的时钟频率为 25Mhz,采用上升沿 SDR 的方
式在一个周期内传输 4 位数据。不过此时 ETH_TXCTL 和 ETH_RXCTL 控制信号仍采用上下沿 DDR 的传
输方式。
当 RGMII 工作在 10Mbps 时,ETH_TXC 和 ETH_RXC 的时钟频率为 2.5Mhz,采用上升沿 SDR 的方式
在一个周期内传输 4 位数据。ETH_TXCTL 和 ETH_RXCTL 控制信号也采用 SDR 的传输方式。

在做接下来的代码例证之前解决几个问题:
为什么在做以太网交互的时候,需要把时钟通过BUFIO和BUFG,我直接进行裸连传输不行嘛?
在以太网交互中,特别是在FPGA设计时,将时钟信号通过BUFIO和BUFG这样的专用时钟缓冲器进行处理,通常是为了优化信号的完整性和时钟管理性能。直接进行裸连传输虽然理论上可行,但会引发以下问题:

  1. 时钟分布网络:
    FPGA中的时钟信号需要分布到各个逻辑单元,使用BUFIO(I/O时钟缓冲器)和BUFG(全局时钟缓冲器)可以有效地将时钟信号可靠地分发到多个区域。裸连传输时钟信号可能导致延迟不均、时钟偏斜(clock skew),从而影响时序。
  • BUFIO:主要用于驱动FPGA中的高速I/O逻辑,提供低延迟和高性能的局部时钟信号。
  • BUFG:用于将时钟信号分配到FPGA的全局时钟网络,保证时钟信号在全局范围内的低偏斜。
  1. 信号完整性:
    直接裸连时钟信号可能会受到噪声、电磁干扰(EMI)等因素的影响,导致信号失真。BUFIO和BUFG能够起到缓冲的作用,提升时钟信号的稳定性和抗干扰能力。
  2. 时钟域隔离:
    在以太网交互中,可能会涉及多个时钟域。使用BUFIO和BUFG可以帮助你更好地管理不同时钟域之间的同步问题,避免由于时钟域跨越(clock domain crossing)带来的不确定性问题。
  3. 优化延迟和抖动:
    通过BUFIO和BUFG可以减少时钟路径上的抖动(jitter)和延迟(latency),提高时钟信号的精度和可靠性。裸连传输时钟信号会导致时序不准确,进而影响以太网协议中高精度的时钟要求。
    总结:
    裸连时钟信号传输理论上可行,但容易导致时钟不稳定、信号干扰以及时序问题。通过BUFIO和BUFG缓冲时钟,能够有效解决这些问题,保证以太网通信的可靠性和时钟同步的精度。因此,为了提高系统的稳健性,通常推荐使用这些缓冲器。

使用Xilinx原语可以帮助我们更好的去优化整体的设计,因为在这个设计中RGMII是双沿采样的,上升沿采样,下降沿采样,直接去写时序会很差,但是我们可以借助Xilinx原语帮助我们优化这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2123173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点击化学 ,如何用最简单的试剂叠氮化修饰后用于Click Reaction?

“点击化学”这一术语由斯克里普斯研究所的K. B. Sharpless 于2001年首次提出,这是一类涉及碳-杂原子间 化学键形成的反应,该类反应具有收率高,选择性好的特 点。词条“点击”意为将分子片段拼接起来就像将安全带扣 环的两部分扣起来一样简单…

大学英语四六级报名照不通过的原因

大学英语四六级报名照不通过的原因 #英语四六级 #大学英语四六级 #大学英语四六级考试 #英语四六级报名照片 #英语四六级考试报名照片

数仓建模:数仓设计中的10个陷阱

目录 0 引言 1 主要内容 1.1 过于迷恋技术,而没有将重点放在业务需求和目标上 1.2 没有或无法找到一个有影响的、平易近人的、明白事理的高级管理人员作为数仓建设的发起人 1.3 将项目处理为一个巨大的持续多年的项目,而不是追求更容易管理的、虽然…

日光辐射系统室内太阳光模拟器

太阳光模拟器能够为实验室环境提供稳定可靠的光照环境,其作用相当于将自然太阳光“搬进”室内实验室。这对于研究太阳能电池、光伏材料及其他与太阳能相关的设备和材料性能至关重要。 1.氙灯灯泡功率:≥450W; 2.输出光束尺寸:≥22…

秃姐学AI系列之:实战Kaggle比赛:图像分类(CIFAR-10)

目录 准备工作 整理数据集 将验证集从原始的训练集中拆分出来 整理测试集 使用函数 图像增广 读取数据集 定义模型 定义训练函数 训练和验证数据集 对测试集进行分类并提交结果 准备工作 首先导入竞赛需要的包和模块 import collections import math import os i…

智能优化算法-樽海鞘优化算法(SSA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 樽海鞘优化算法 (Salp Swarm Algorithm, SSA) 虽然名称中提到的是“樽海鞘”,但实际上这个算法是基于群体智能的一种元启发式优化算法,它模拟了樽海鞘(Salps)在海…

第67期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

Leetcode sql high frequency questions 50 (based)

high frequency SQL 50 (basic version) 高頻sql題目(Leetcode) 查詢 1757. 可回收且低脂的产品 Question 表:Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | low_fats | enum | | rec…

评测AI写毕业论文软件排行榜前十名的网站

在当今信息爆炸的时代,AI智能写作工具已经成为我们写作过程中的得力助手。特别是对于学术论文的撰写,这些工具不仅能够提高写作效率,还能帮助用户生成高质量的文稿。以下是五款值得推荐的AI智能写论文软件,其中特别推荐千笔-AIPas…

Mysql基础练习题 1729.求关注者的数量 (力扣)

编写解决方案,对于每一个用户,返回该用户的关注者数量。 #按 user_id 的顺序返回结果表 题目链接: https://leetcode.cn/problems/find-followers-count/description/ 建表插入语句: Create table If Not Exists Followers(us…

VMware Workstation Pro 17 下载教程(Window环境)

自从24年中旬,博通公司以 610 亿美元收购的 VMware 宣布对其虚拟化软件套件进行一些重大调整。Windows 和 Linux 版 VMware Workstation Pro 和 Mac 版 VMware Fusion 不再需要个人使用许可证,也就是对个人用户免费。 1. 下载方式 Windows 和 Linux 版…

IDEA 编译运行gradle项目

IDEA 编译运行gradle项目 本文介绍Gradle 的三种安装方式 1.IDEA 编译自动安装gradle【推荐】 2.mac brew 安装 gradle 3.手动 安装 gradle IDEA 编译gradle项目,之前的项目都是maven管理,今天遇到一个sping boot 的项目是用gradle管理的,下面…

[Linux]:文件(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 重定向原理 在明确了文件描述符的概念及其分配规则后,我们就可…

C程序设计(7.0安徽专升本函数)

在之前我很多代码执行都是放在函数里的,这样方便我管理和演示,现在能和大家更好的去了解函数了 考纲教材关于这个的理论知识太多了,且废话占大多数,甚至有些对于小白很晦涩难懂或容易搞混!所以在这我就尽量缩减理论知…

C语言——希尔排序

希尔排序是对于插入排序的一种优化 代码&#xff1a; #include <stdio.h> #include <stdlib.h> void shell_sort(int* p, int len) { int i; int j; int step; int tmp; for (step len / 2; step > 0; step step / 2) { fo…

手把手教你实现微信小程序定位

实现小程序的定位 框架&#xff1a;uniappvue 1&#xff0c;用户授权配置 在pages.json文件中配置 "pages": [{"path": "pages/home/index","style": {"navigationBarTitleText": "首页","navigationBarBac…

监控-zabbix

1运维监控 是指对计算机系统、网络、服务器等关键IT基础设施进行实时监控&#xff0c;以确保系统的稳定运行和及时发现潜在问题 2老监控框架&#xff08;不会用但需要知道&#xff09; Cacti&#xff1a; Cacti是一款基于PHP、MySQL开发的网络流量监测图形分析工具。主要监…

CSP-J算法基础 计数排序

文章目录 前言计数排序计数排序的过程总结 代码实现计数排序总结 前言 计数排序 计数排序&#xff08;Counting Sort&#xff09;是一种线性时间复杂度的排序算法&#xff0c;适用于范围有限的整数排序。它通过计数每个值出现的次数&#xff0c;依次排列这些值。该算法不通过比…

LVGL 控件之线条(lv_line)

目录 一、概述二、线条1、设置连接点2、自适应大小3、翻转 y 轴4、样式4.1 设置宽度4.2 末端形态 4.3 虚线5、API 函数 一、概述 线条部件只有一个组成部分&#xff1a;主体 LV_PART_MAIN。 通过一组点绘制出相连的直线&#xff0c;通过 lv_line_create 创建相应的对象。 二…

利用深度学习实现验证码识别-4-ResNet18+imagecaptcha

在当今的数字化世界中&#xff0c;验证码&#xff08;CAPTCHA&#xff09;是保护网站免受自动化攻击的重要工具。然而&#xff0c;对于用户来说&#xff0c;验证码有时可能会成为一种烦恼。为了解决这个问题&#xff0c;我们可以利用深度学习技术来自动识别验证码&#xff0c;从…