基于FPGA的UDP 通信(一)

news2024/12/23 23:38:33

引言

手头的FPGA开发板上有一个千兆网口,最近准备做一下以太网通信的内容。本文先介绍基本的理论知识。

FPGA芯片型号:xc7a35tfgg484-2

网口芯片(PHY):RTL8211

网络接口:RJ45


简述以太网

什么以太网?

以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是应用最普遍的局域网技术。

常用的传输速率

以太网传输速率:10Mbps、100Mbps、1000Mbps、10Gbps

硬件接口

以太网的接口类型有,RJ45接口、RJ11接口,SC光纤接口等。RJ45的接口插头和插座的示意图:

RJ-45接口定义:

关于MAC与PHY

OSI模型

提到以太网,就要先简单说下 OSI(Open System Interconnection) 7层网络模型:

应用层:网络服务与最终用户的一个接口。协议有HTTP 、FTP、 TFTP、 SMTP、 SNMP、 DNS、 TELNET、 HTTPS、 POP3、 DHCP

表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、EBCDIC、加密格式等

会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话

传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有TCP、 UDP,数据包一旦离开网卡即进入网络传输层

网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有ICMP、 IGMP 、IP(IPV4 IPV6)

数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层:建立、维护、断开物理连接。(由底层网络定义协议)

对于FPGA实现以太网数据传输(主要是局域网)来说,最主要的就是 数据链路层物理层

MAC

MAC(Media Access Control Address)就是媒体接入控制器。以太网MAC由IEEE-802.3以太网标准定义。它实现了一个数据链路层。最新的MAC同时支持10/100/1000Mbps速率。通常情况下,它实现MII/GMII/RGMII接口,来同行业标准PHY器件实现接口。

对于FPGA的应用来说,MAC层的实现就在 FPGA侧通过RTL代码编程实现。

MAC地址

MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡的EPROM。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的 。

MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界是唯一的。

PHY

PHY是物理接口收发器,它实现物理层。IEEE-802.3标准定义了以太网PHY。它符合IEEE-802.3k中用于10BaseT和100BaseTX的规范。

开发板上用到的网络芯片 RTL8211就是负责物理层。
PHY芯片在发送数据时,首先将MAC发过来的并行数据转化为串行流数据,按照物理层的编码规则把数据编码转换为模拟信号通过网口发送出去,接收数据的流程反之。
当我们给网卡接入网线的时候,PHY芯片不断发出脉冲信号来检测对端是否有设备,它们通过标准的“语言”交流,互相协商并确定连接速度、双工模式、是否采用流控等。通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为自动协商。

附:RTL8211芯片手册给出的IEEE802.3自协商优先级规定:

FPGA与PHY芯片、网络接口的连接关系:

MII接口时序介绍

MII(Medium Independent Interface)媒体独立接口,主要针对十兆/百兆以太网通信。

引脚连接示意图

针脚含义说明

针脚名称

输入/输出

(相对MAC侧而言)

位宽

含义

TX_ER

输出

1

Transmit Error,发送数据错误提示信号;

同步于TX_CLK,高电平有效,表示TX_ER 有效期内传输的数据无效。

对于10Mbps 速率下,TX_ER 不起作用。

TX_EN

输出

1

Transmit Enable,发送使能信号,只有在TX_EN 有效(高电平)期内传的数据才有效。

TX_CLK

输入

1

发送数据参考时钟。

🔶100Mbps 速率下,时钟频率为 25MHz。

🔷10Mbps 速率下,时钟频率为 2.5MHz 。

该时钟是由 PHY侧提供。

TXD

输出

4

TransmitData ,数据发送信号,共 4 根信号线。

RX_ER

输入

1

Receive Error 接收数据错误提示信号;

同步于 RX_CLK高电平有效,表示 RX_ER 有效期内传输的数据无效。对于10Mbps 速率下, RX_ER 不起作用 。

RX_DV

输入

1

Reveive Data Valid 接收数据有效信号;拉高时表示接收数据有效。

RXD

输入

4

ReceiveData ,数据接收信号,共 4 根信号线。

RX_CLK

输入

1

接收数据参考时钟。

🔶100Mbps 速率下,时钟频率为 25MHz。

🔷10Mbps 速率下,时钟频率为 2.5MHz 。

该时钟是由 PHY侧提供。

CRS

输入

1

Carrier Sense ,载波侦测信号,不需要同步于参考时钟,只要有数据传输, CRS 就有效 。

需要注意的是 CRS 只有 PHY在半双工模式下有效 。

COL

输入

1

Collision Detectd ,冲突检测信号,不需要同步于参考时钟 。

需要注意的是 CRS 只有 PHY 在半双工模式下有效

收发时序

发送时序

MAC 侧向 PHY 侧传输数据的时序图如下:

接收时序

PHY 侧向 MAC 侧传输数据的时序图如下:

GMII接口时序介绍

GMII(Gigabit Medium Independent Interface)媒体独立接口,主要针对十兆/百兆/千兆以太网通信。

引脚连接示意图

针脚含义说明

针脚名称

输入/输出

(相对MAC侧而言)

位宽

含义

TX_ER

输出

1

Transmit Error,发送数据错误提示信号;

同步于GTX_CLK,高电平有效,表示TX_ER 有效期内传输的数据无效。

对于10Mbps 速率下,TX_ER 不起作用。

TX_EN

输出

1

Transmit Enable,发送使能信号,只有在TX_EN 有效(高电平)期内传的数据才有效。

GTX_CLK

输出

1

发送参考时钟,时钟频率为125MHz 。 需要注意的是GTX_CLK 时钟的方向是从 MAC 侧指向 PHY 侧的,此时钟是由 MAC 提供的 ,这里与 MII 接口有所差别的地方。

TXD

输出

8

TransmitData ,数据发送信号,共 8 根信号线。

RX_ER

输入

1

Receive Error 接收数据错误提示信号;

同步于 RX_CLK高电平有效,表示 RX_ER 有效期内传输的数据无效。对于10Mbps 速率下, RX_ER 不起作用 。

RX_DV

输入

1

Reveive Data Valid 接收数据有效信号;拉高时表示接收数据有效。

RXD

输入

8

ReceiveData ,数据接收信号,共 8 根信号线。

RX_CLK

输入

1

接收数据参考时钟,时钟频率为

125MHz 。 RX_CLK 是由PHY 侧提供的。

CRS

输入

1

Carrier Sense ,载波侦测信号,不需要同步于参考时钟,只要有数据传输, CRS 就有效 。

需要注意的是 CRS 只有 PHY在半双工模式下有效 。

COL

输入

1

Collision Detectd ,冲突检测信号,不需要同步于参考时钟 。

需要注意的是 CRS 只有 PHY 在半双工模式下有效

收发时序

RGMII接口时序介绍

RGMII(Reduced Gigabit Medium Independent Interface)媒体独立接口,主要针对十兆/百兆/千兆以太网通信。GMII 的简化版本,将接口信号线数量从24 根减少到 14 根,时钟频率仍旧为125MHz TX/RX 数据宽度从 8 为变为 4 位。

引脚连接示意图

针脚含义说明

针脚名称

输入/输出

(相对MAC侧而言)

位宽

含义

TX_ER

输出

1

该信号线上传送 GMII 接口中的 TX_EN 和 TX_ER 两种信息,在 TX_CLK 的上升沿发送 TX_EN ,下降沿发送 TX_ER 。

TX_CLK

输出

1

发送参考时钟,1000Mbps 速率下,时钟频率为时钟频率为125MHz 。 需要注意的是TX_CLK 时钟的方向是从 MAC 侧指向 PHY 侧的,此时钟是由 MAC 提供的 ,这里与 MII 接口有所差别的地方。

TXD

输出

4

在时钟 TX_CLK 的上升沿发送 GMII 接口中的 TXD[3:0]

在时钟 TX_CLK 的下降沿发送 GMII 接口中的 TXD[7:4] 。

RX_DV

输入

1

该信号线上传送 GMII 接口中的 RX_DV 和 RX_ER 两种信息,在 RX_CLK 的上升沿 传输 RX_DV ,下降沿 传输RX_ER

RXD

输入

4

时钟RX_CLK 的上升沿 传输 GMII 接口中的 RXD[3:0] 0],在时钟 RX_CLK 的下降沿发送 GMII 接口中的 RXD[7:4] 。

RX_CLK

输入

1

接收数据参考时钟,时钟频率为

125MHz 。 RX_CLK 是由PHY 侧提供的。

CRS

输入

1

Carrier Sense ,载波侦测信号,不需要同步于参考时钟,只要有数据传输, CRS 就有效 。

需要注意的是 CRS 只有 PHY在半双工模式下有效 。

COL

输入

1

Collision Detectd ,冲突检测信号,不需要同步于参考时钟 。

需要注意的是 CRS 只有 PHY 在半双工模式下有效

收发时序

RGMII 接口为了保持1000Mbps 的传输速率不变,RGMII 接口在时钟的上升沿和下降沿都采样数据。在参考时钟的上升沿发送GMII 接口中的TXD[3:0]/RXD[3:0],在参考时钟的下降沿发送GMII 接口中的TXD[7:4]/RXD[7:4]。RGMII 同时也兼容100Mbps 和10Mbps 两种速率,此时参考时钟速率分别为25MHz 和2.5MHz。TX_EN 信号线上传送TX_EN 和TX_ER 两种信息,在TX_CLK 的上升沿,下降沿发送TX_ER;同样的,RX_DV 信号线上也传送RX_DV 和RX_ER 两种信息,在RX_CLK 的上升沿传输RX_DV,下降沿传输RX_ER。

千兆以太网硬件设计参考

RJ-45

RJ-45的四对差分数据线接PHY芯片RTL8211输出的四队差分数据线。此外PHY输出的LED灯控制信号输出控制RJ-45的黄绿灯状态。
一般来说,黄灯闪烁代表有数据传输,绿灯常亮代表与对端网口互联成功。

RTL8211

RGMII/GMII模式的切换通过外部跳线帽实现,因为芯片手册声明:
PHY的物理地址:3'b001


参考声明并致谢

【1】正点原子FPGA实战篇之以太网

【2】RTL8211芯片手册

【3】芯路恒开发板资料

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

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

相关文章

k8s之实战小栗子

写在前面 本文一起看一个基于k8s的实战小栗子,在这篇文章 中我们基于docker搭建了一个WordPress网站。本文就通过k8s再来实现一遍。架构图如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/9c73ac0c183a429a8f4b1a2feb363527.png 从上图可以…

使用Origin计算数据的上升\下降时间

使用Origin计算上升/下降时间计算上升时间1导入数据,做图2、选择合适的数据范围3、选择上升时间和上升范围两个测量参数,获得结果4、更改区间,并导出数据计算下降时间1、将感兴趣区域移动到下降沿2、更改为测量下降沿参数获得结果上升时间小工…

【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )

文章目录一、空合并操作符 ?:二、空合并操作符与 let 函数结合使用一、空合并操作符 ?: 空合并操作符 ?: 用法 : 表达式 A ?: 表达式 B如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ; 如果 表达式 A 的值 为 null , 则 整个表达式的值 就是 表达…

vue-路由的使用方式

1.下载路由 使用npm的下载: # vue2对应版本 npm i vue-router3# vue3对应版本 npm i vue-router42.路由初试化 路由的三种模式: history, 指定路由的模式, 有hash,history,memory三种模式,一般使用第一种和第三种模式 createWebHashHistory hash模式 > http://localhost…

十大字符串函数与内存操作函数

前言:我们知道在C语言的库中有许许多多的库函数,今天我就来介绍一下自己对两大类库函数中一些常用函数的认识和理解,希望对大家有帮助。 说明:下文中会花较大篇幅实现这些库函数的模拟,请大家不要觉得库函数直接用就好…

UNet入门总结

作者:AI浩 来源:投稿 编辑:学姐 Unet已经是非常老的分割模型了,是2015年《U-Net: Convolutional Networks for Biomedical Image Segmentation》提出的模型。 论文连接:https://arxiv.org/abs/1505.04597 在Unet之前…

Android 深入系统完全讲解(4)

4 SystemServer 创建过程 SystemServer 进程非常关键了,我们上层的服务都是在这里以线程的形式存在,比如 AMS,PMS,WindowManagerService,壁纸服务,而关于调试这个服务进程,我们随后就会讲到。 …

虚拟人-面部表情-Audio2Face语音驱动表情

任务: 输入自己的音频,导入maya模型,让maya模型通过音频驱动说话 教程: https://www.bilibili.com/video/BV1rZ4y1R7H4/?p2&spm_id_frompageDriver&vd_sourceef114f70c3fd4d5394f12dbd3d022bbe 一.下载和安装 1.首先…

Java面试常见问题-SE篇

JavaSE面试问题汇总①int和Integer的区别为什么设计封装类型?JDK、JRE、JVM的区别和equals方法的区别hashCode()与equals()之间的关系泛型中extends和super的区别String、StringBuffer、StringBuilder的区别重载和重写的区别接口和抽象类的区别List与Set的区别Array…

2023/1/8总结

今天学了了强连通算法 Tarjan算法 Tarjan算法是一种求解有向图强连通分量的线性时间的算法,他运用到了DFS算法以及DFS的特性和数据结构——栈。 算法介绍:如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G…

LeetCode题解 二叉树(十三):701 二叉搜索树的插入操作;450 删除二叉搜索树中的结点

701 二叉搜索树的插入操作 medium 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。 如果要按照题目中所说改变二叉…

渗透测试中的常用编码

渗透测试中的常用编码 页面编码 在网页设置网页编码 在中加入设置特定html标签 这样页面的编码就会变成utf-8 ,如果没有设置编码就会使用默认 的编码,而浏览器默认编码与之不同就会出现乱码。 常用的有三种格式分别是 utf-8、gbk、gbk2312 ascii编码…

_Linux 进程信号-信号处理篇

文章目录前言捕捉信号1. 内核如何实现信号的捕捉2. sigaction代码验证可重入函数volatile(关键字)SIGCHLD信号实验一实验二前言 信号发送 信号处理 已经讲过,本章讲解信号处理最后一部分。 捕捉信号 信号捕捉过程图 经过信号捕捉过程图:我们知道信号…

语音文件分析

语音文件格式的重要参数 语音波形,它的这个文件,主要的格式就是采样率,那么电话或者嵌入式设备,采样率一般是8000Hz,就一秒钟8000个点,如果是PC机麦克风,那是16K,就一秒钟是16000个点,像这个CD是高保真的,音乐唱片的是用这个44.1K。 量化位数,又叫采样精度,…

绿通科技在创业板通过注册:收入依赖美国市场,张志江为实控人

2023年1月6日,证监会发布关于同意广东绿通新能源电动车科技股份有限公司(下称“绿通科技”或“绿通电动车”)、杭州国泰环保科技股份有限公司首次公开发行股票注册的批复。换句话说,证监会同意上述两家公司的创业板IPO注册。 同日…

【手写 Vue2.x 源码】第十一篇 - Vue 的数据渲染流程

一,前言 上篇,主要介绍了数组数据变化的观测情况,涉及以下几个点: 实现了数组数据变化被劫持后,已重写原型方法的具体逻辑;数组各种数据变化时的观测情况分析; 目前为止,数据劫持…

webpack 如何编写 loader

三种本地开发测试 loader 的方法 1. 匹配(test)单个 loader 你可以通过在 rule 对象使用 path.resolve 指定一个本地文件: webpack.config.js const path require(path);module.exports {//...module: {rules: [{test: /\.js$/,use: [{…

Ansible Automation Platform - 在 RHEL 安装 Ansible Automation Platform 2.3 环境

《OpenShift / RHEL / DevSecOps 汇总目录》 文本已在 RHEL 9 AAP 2.3 环境中进行验证。 说明: 本文介绍如何在一个节点上部署一套 all-in-one 的 Ansible Automation Platform 2.3 的运行环境。红帽 Ansible Automation Platform 2.3 需要至少 RHEL 8.4 以上的环…

【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + Velodyne VLP-16雷达 测试使用

简介:介绍 Velodyne VLP-16 16线激光雷达 在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX1里已经安装了ROS版本:Melod…

HashMap、HashTable、ConcurrentHashMap之间的区别及常见面试题

Java集合类有的集合类是存在线程安全的问题,但是由于之前对于集合类的使用都是在单线程的情况下使用的,不没有在多线程环境下使用,所以不涉及线程安全的问题;这篇博客着重讲解一下多线程环境下使用哈希表。HashMapHashMap本身不是…