【紫光同创国产FPGA教程】——【PGL22G第十一章】以太网传输实验例程

news2024/11/19 0:52:32

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注www.meyesemi.com)
 

适用于板卡型号:

紫光同创PGL22G开发平台(盘古22K)

一:盘古22K开发板(紫光同创PGL22G开发平台)简介

盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板,全面实现国产化方案,板载资源丰富,高容量、高带宽,外围接口丰富,不仅适用于高校教学,还可以用于实验项目、项目开发,一板多用,满足多方位的开发需求。

二:实验目的

MES22GP开发板使用Realtek RTL8211E PHY实现了一个10/100/1000以太网端口,用于网络连接。该器件工作电压为支持2.5V、3.3V。PHY连接到BANK R3,并通过RGMII接口连接到PGL22G。RJ-45连接器是HFJ11-1G01E-L12RL,具有集成的自动缠绕磁性元件,可提高性能,质量和可靠性。RJ-45有两个状态指示灯LED,用于指示流量和有效链路状态(详情请查看“MES22GP开发板硬件使用手册”)。

通过以太网端口实现PC端和开发板间通信,实现了ARP,UDP功能。

三:以太网协议简介 

以太网帧格式

前导码(Preamble)8字节,连续7个8’h55 加1个8’hd5,表示一个帧的开始,用于双方;设备数据的同步。

目的MAC地址:6字节,存放目的设备的物理地址,即MAC地址;

源MAC地址:6字节,存放发送端设备的物理地址;

类型:2字节,用于指定协议类型,常用的有0800表示IP协议,0806表示ARP协议,8035表示RARP协议;

数据:46到1500字节,最少46字节,不足需要补全46字节,例如IP协议层就包含在数据部分,包括其IP头及数据。

FCS:帧尾,4字节,称为帧校验序列,采用32位CRC校验,对目的MAC地址字段到数据字段进行校验。进一步扩展,以UDP协议为例,可以看到其结构如下,除了以太网首部的14字节,数据部分包含IP首部,UDP首部,应用数据共46~1500字节。 

ARP数据报格式 

ARP地址解析协议,即ARP(Address Resolution Protocol),根据IP地址获取物理地址。主机发送包含目的IP地址的ARP请求广播(MAC地址为48’hff_ff_ff_ff_ff_ff)到网络上的主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将IP地址和物理地址保存到缓存中,并保留一段时间,下次请求时直接查询ARP缓存以节约资源。下图为ARP数据报格式。

帧类型:ARP帧类型为两字节0806; 

硬件类型:指链路层网络类型,1为以太网;

协议类型:指要转换的地址类型,采用0x0800 IP类型,之后的硬件地址长度和协议地址长度分别对应6和4;

OP字段中1表示ARP请求,2表示ARP应答

例如:ff ff ff ff ff ff|00 0a 35 01 fe c0|08 06|00 01|08 00|06|04|00 01|00 0a35 01 fe c0|c0 a8 00 02| ff ff ff ff ff ff|c0 a8 00 03|

表示向192.168.0.3地址发送ARP请求。

|00 0a 35 01 fe c0 | 60 ab c1 a2 d5 15 |08 06|00 01|08 00|06|04|00 02| 60 abc1 a2 d5 15|c0 a8 00 03|00 0a 35 01 fe c0|c0 a8 00 02|

表示向192.168.0.2地址发送ARP应答。

IP数据包格式

因为UDP协议包只是IP包中的一种,所以我们来介绍一下IP包的数据格式。下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变

版本:占4位,指IP协议的版本目前的IP协议版本号为4 (即IPv4);

首部长度:占4位,可表示的最大数值是15个单位(一个单位为4字节)因此IP的首部长度的最大值是60字节;

区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过1998年这个字段改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用这个字段;

总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535字节总长度必须不超过最大传送单元MTU

标识:占16位,它是一个计数器,用来产生数据报的标识

标志(flag):

占3位,目前只有前两位有意义

MF

标志字段的最低位是MF (More Fragment)

MF=1表示后面“还有分片”。MF=0表示最后一个分片

DF

标志字段中间的一位是DF (Don't Fragment)

只有当DF=0时才允许分片

片偏移:占12位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以8个字节为偏移单位;

生存时间:占8位,记为TTL (Time To Live)数据报在网络中可通过的路由器数的最大值,TTL字段是由发送端初始设置一个8 bit字段.推荐的初始值由分配数字RFC指定,当前值为64.发送ICMP回显应答时经常把TTL设为最大值255;

协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程,1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议; 

首部检验和:占16位,只检验数据报的首部不检验数据部分,采用二进制反码求和,即将16位数据相加后,再将进位与低16位相加,直到进位为0,最后将16位取反;

源地址和目的地址:都各占4字节,分别记录源地址和目的地址;

UDP协议

UDP是User Datagram Protocol(用户数据报协议)的英文缩写。UDP只提供一种基本的、低延迟的被称为数据报的通讯。所谓数据报,就是一种自带寻址信息,从发送端走到接收端的数据包。UDP协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。

UDP协议的报头格式:

UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:

①UDP源端口号            ②目标端口号                     ③数据报长度                 ④校验和 

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。数据发送一方将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。

数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。

UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。虽然UDP提供有错误检测,但检测到错误时,错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。

 Ping功能

UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。虽然UDP提供有错误检测,但检测到错误时,错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。

四:SMI(MDC/MDIO)总线接口 

串行管理接口(SerialManagementInterface),也被称作MII管理接口(MIIManagementInterface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟,由MAC端提供,在本实验中也就是FPGA端。在RTL8211EG文档里可以看到MDC的周期最小为400ns,也就是最大时钟为2.5MHz。

SMI帧格式

如下图,为SMI的读写帧格式: 

读时序

可以看到在Turn Around状态下,第一个周期MDIO为高阻态,第二个周期由PHY端拉低。

写时序

为了保证能够正确采集到数据,在MDC上升沿之前就把数据准备好,在本实验中为下降沿发送数据,上升沿接收数据。

 五:实验设计

本实验以千兆以太网RGMII通信为例来设计verilog程序,会先发送预设的UDP数据到网络,每秒钟发送一次.程序分为两部分,分别为发送和接收,实现了ARP,UDP功能。

发送部分

MAC层发送

发送部分中,mac_tx.v为MAC层发送模块,首先在SEND_START状态,等待mac_tx_ready信号,如果有效,表明IP或ARP的数据已经准备好,可以开始发送。再进入发送前导码状态,结束时发送mac_data_req,请求IP或ARP的数据,之后进入发送数据状态,最后进入发送CRC状态。在发送数据过程中,需要同时进行CRC校验。前导码完成后就将上层协议数据发送出去,这个时候同样把这些上层数据放到CRC32模块中做序列生成,上层协议会给一个数据输出完成标志信号,这个时候mac_tx知道数据发送完成了,需要结束CRC32的序列生成,这个时候就开始提取FCS,衔接数据之后发送出去。这样就连接了前导码---数据(Mac帧)----FCS。之后跳转到结束状态,再回到IDLE状态,等待下一次的发送请求。

 

MAC发送模式 

工程中的mac_tx_mode.v为发送模式选择,根据发送模式是IP或ARP选择相应的信号与数据。

ARP发送

发送部分中,arp_tx.v为ARP发送模块,在IDLE状态下,等待ARP发送请求或ARP应答请求信号,之后进入请求或应答等待状态,并通知MAC层,数据已经准备好,等待mac_data_req信号,之后进入请求或应答数据发送状态。由于数据不足46字节,需要补全46字节发送。 

IP层发送 

在发送部分,ip_tx.v为IP层发送模块,在IDLE状态下,如果ip_tx_req有效,也就是UDP或ICMP发送请求信号,进入等待发送数据长度状态,之后进入产生校验和状态,校验和是将IP首部所有数据以16位相加,最后将进位再与低16位相加,直到进入为0,再将低16位取反,得出校验和结果。

在生成校验和之后,等待MAC层数据请求,开始发送数据,并在即将结束发送IP首部后请求UDP或ICMP数据。等发送完,进入IDLE状态。

IP发送模式 

工程中的ip_tx_mode.v为发送模式选择,根据发送模式是UDP或ICMP选择相应的信号与数据。

UDP发送 

发送部分中,udp_tx.v为UDP发送模块。

接收部分 

MAC层接收

在接收部分,其中mac_rx.v为mac层接收文件,首先在IDLE状态下当rx_en信号为高,进入REC_PREAMBLE前导码状态,接收前导码。之后进入接收MAC头部状态,即目的MAC地址,源MAC地址,类型,将它们缓存起来,并在此状态判断前导码是否正确,错误则进入REC_ERROR错误状态,在REC_IDENTIFY状态判断类型是IP(8’h0800)或ARP(8’h0806)。然后进入接收数据状态,将数据传送到IP或ARP模块,等待IP或ARP数据接收完毕,再接收CRC数据。并在接收数据的过程中对接收的数据进行CRC处理,将结果与接收到的CRC数据进行对比,判断数据是否接收正确,正确则结束,错误则进入ERROR状态。

ARP接收

工程中的arp_rx.v为ARP接收模块,实现ARP数据接收,在IDLE状态下,接收到从MAC层发来的arp_rx_req信号,进入ARP接收状态,在此状态下,提取出目的MAC地址,源MAC地址,目的IP地址,源IP地址,并判断操作码OP是请求还是应答。如果是请求,则判断接收到的目的IP地址是否为本机地址,如果是,发送应答请求信号arp_reply_req,如果不是,则忽略。如果OP是应答,则判断接收到的目的IP地址及目的MAC地址是否与本机一致,如果是,则拉高arp_found信号,表明接收到了对方的地址。并将对方的MAC地址及IP地址存入ARP缓存中。 

IP层接收模块 

在工程中,ip_rx为IP层接收模块,实现IP层的数据接收,信息提取,并进行校验和检查。首先在IDLE状态下,判断从MAC层发过来的ip_rx_req信号,进入接收IP首部状态,先在REC_HEADER0提取出首部长度及IP总长度,进入REC_HEADER1状态,在此状态提取出目的IP地址,源IP地址,协议类型,根据协议类型发送udp_rx_req或icmp_rx_req。在接收首部的同时进行校验和的检查,将首部接收的所有数据相加,存入32位寄存器,再将高16位与低16位相加,直到高16位为0,再将低16位取反,判断其是否为0,如果是0,则检验正确,否则错误,进入IDLE状态,丢弃此帧数据,等待下次接收。

UDP接收 

在工程中,udp_rx.v为UDP接收模块,在此模块首先接收UDP首部,再接收数据部分,在接收的同时进行UDP校验和检查,如果UDP数据是奇数个字节,在计算校验和时,在最后一个字节后加上8’h00,并进行校验和计算。校验方法与IP校验和一样,如果校验正确,将拉高udp_rec_data_valid信号,表明接收的UDP数据有效,否则无效,等待下次接收。

其他部分 

ICMP应答

在工程中,icmp_reply.v实现ping功能,首先接收其他设备发过来的icmp数据,判断类型是否是回送请求(ECHO REQUEST),如果是,将数据存入RAM,并计算校验和,判断校验和是否正确,如果正确则进入发送状态,将数据发送出去。

ARP缓存 

在工程中,arp_cache.v为arp缓存模块,将接收到的其他设备IP地址和MAC地址缓存,在发送数据之前,查询目的地址是否存在,如果不存在,则向目的地址发送ARP请求,等待应答。在设计文件中,只做了一个缓存空间,如果有需要,可扩展。

CRC校验模块(crc.v) 

CRC32校验是在目标MAC地址开始计算的,一直计算到一个包的最后一个数据为止。一些网站可以自动生成CRC算法的verilog文件:https://bues.ch/cms/hacking/crcgen.html

六:实验现象 

用网线连接MES22GP开发板网口和PC端网口;

设置接收端(PC端)IP地址为192.168.0.105,开发板的IP地址为192.168.0.11如下图:

将程序下载到开发板后,便可以看到已连接网线的网口对应LED灯规律性闪烁或常亮:

本次实验通过Wireshark软件抓包验证数据链路是否正常连接以及数据传输是否正常。资料包中Wireshark安装包目录如下:

MES22GP_v1\5_Software\网络调试助手\Wireshark-win32-2.4.1.0.exe

PC端打开Wireshark软件,烧录重新后进行捕获数据报可以看到如下所示的交互过程。 

成功建立连接后会持续发送数据报“www.meyesemi.com”。

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

建筑能源管理(9)——公共建筑能源管理技术

现阶段,在我国经济高速发展的同时,也面临着资源有限、能源消费急剧增长、能源供给与需求之间的矛盾日益突出等问题。数据显示,现阶段我国单位GDP的能耗水平是发达国家的3倍左右,这正是能源总体利用率较低所造成的。建筑能耗作为我…

2023年初学者入门 CV 指南概述

计算机视觉,是一个迅速发展的领域,将让你大开眼界。它的核心是教计算机像我们人类一样看和理解视觉信息。这份全面指南,将为我们揭示计算机视觉的基本概念,探索流行的应用程序,并瞥见计算机视觉的未来趋势。 计算机视觉…

FM8317-USB TYPE-C PD 多协议控制器

产品描述: FM8317是一款集成了USB Type-C、USB Power Delivery(PD3.0)、PPS的多协议端口控制器,为AC-DC适配器、车载充电器等设备提供高性价比的USB Type-C 端口充电解决方案。 FM8317内置的Type-C协议可以支持Type-C设备插入自动…

SparkAi创作系统ChatGPT网站源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

Leetcode-145 二叉树的后序遍历

递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this…

字节和美团软件测试面试1000问(含文档)

一、Linux系统应用和环境配置 1、Linux系统的操作命令给我说10个,一般用什么工具远程连接Linux服务器? 2、Linux中的日志存储在哪里?怎么查看日志内容? 3、Linux中top和ps命令的区别? 4、Linux命令运行的结果如何写…

iOS 17.2更新:15Pro支持拍摄空间视频!

苹果又为开发者预览版用户推送了iOS 17.2 Beta2测试版的更新,已经注册Apple Beta版软件计划的用户只需打开设置--通用--软件更新即可在线OTA升级至最新的iOS 17.2测试版。 本次更新包大小为750M左右,内部版本号为(21C5040g)&#…

c语言,将奇数和偶数分类

题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。 思路:像冒泡排序那样,相邻两个数比较,两个都是偶数则不…

(免费版?)CLion Nova 强势登陆 C 和 C++ 开发领域

系列文章目录 文章目录 系列文章目录前言一、CLion Nova二、目标三、优势和改进四、显著差异五、如何安装 CLion Nova六、分享您的反馈意见总结 阿纳斯塔西娅-卡扎科娃 2023 年 11 月 9 日 前言 今天,我们宣布推出免费的 CLion 早期预览版,它使用 ReSh…

【Linux】Linux 中关于文件和文件夹的常用命令

Linux 中关于文件和文件夹的常用命令 讲解 Linux 常用命令的文章已经非常多了,而且有的文章也说的非常清楚详细。我们可能不会记住所有的命令,但对于工作中常用的命令应该熟记于心,最好的方式就是多多实践。 我们可以直接或者通过虚机的方式…

24 _ 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。 我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是O(…

Leetcode-101 对称二叉树

递归:主要思想:对称二叉树是左子树的左孩子右子树的右孩子,左子树的右孩子右子树的左孩子,递归实现思路较为清晰 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* Tr…

同城跑腿服务预约小程序的作用如何

无论是互联网服务化加快还是前几年疫情冲击,在同城生活服务场景中出现了很多商机,如外卖跑腿、校园跑腿、代买代送等,无论公司还是个人都借势不断提升自己品牌的影响力,并且依赖朋友圈不断提升生意营收。 同城跑腿品牌不少&#…

跨域:利用iframe实现跨域DOM互访的四种方式

注:跨域的知识点详见:跨域相关知识点 目录 实验验证环境配置: 1、利用document.domain降域 方法1: 方法2: 2、利用location.hash 3、利用window.name 4、利用postMessage(最推荐) 使用postmessage实现跨域访问…

linux发展史(必看系列)

Linux介绍: Linux,Linux Is Not UniX 的首字母缩写。是一款开源的,能自由传播的类Unix的操作系统,其内核由林纳斯本纳第克特托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到…

表格图片太大怎么批量压缩?最简单的批量压缩图片

我们在给表格添加图片的时候,如果体积太大,就会导致图片导入不进去,所以在使用之前最好是选择将图片压缩,有的小伙伴会说几张图片处理起来比较方便,如果是大量的话,就比较废时间了;所以今天就特…

贪心

【深基12.例1】部分背包问题 题目描述 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N ( N ≤ 100 ) N(N \le 100) N(N≤100) 堆金币,第 i i i 堆金币的总重量和总价值分别是 m i , v i ( 1 ≤ m i , v i ≤ 100 ) m_i,v_i(1\le m_i,v_i \le 100) mi​,vi​(…

HCIA-hybrid经典小实验

hybrid经典小实验 实验拓扑配置实现SW1SW2 配置验证PC1-PC3 不能通信PC1-PC2 正常通信其他自行测试 实验拓扑 配置实现 SW1 sysname SW1 # undo info-center enable # vlan batch 10 20 30 # interface Ethernet0/0/1 //接口发送该vlan-id的数据帧时,不剥离帧中的…

科研检测机构服务预约小程序的效果如何

科研检测机构涵盖的业务比较广,比如水质检测、农产品检测、食品检测等,对相关从业者来说,可能需要频繁使用这些业务,或者个人偶尔需要一些东西检测。 对用户和检测机构来说,由于行业的特殊性,在实际发展中…

网络安全基础之php开发文件上传的实现

前言 php是网络安全学习里必不可少的一环,简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中,文件的功能是必不可少,比如我们在论坛的头像想更改时就涉及到文件的上传等等文件功能。但也会出…