基于FPGA的以太网相关文章导航

news2025/5/26 5:04:50

  首先需要了解以太网的一些接口协议标准,常见的MII、GMII、RGMII时序,便于后续开发。

    【必读】从MII到RGMII,一文了解以太网PHY芯片不同传输接口信号时序!


  介绍一款比较老的以太网PHY芯片88E1518,具有RGMII接口,分析该芯片的原理图和内部寄存器的配置方式,以及MDIO的时序。

    揭秘88E1518以太网芯片:比RTL8211更麻烦,配置多一步”


  PC端通过串口调试助手对88E1518内部寄存器进行配置,涉及到uart收发数据模块和MDIO读写时序,用户可以根据定义的串口格式,通过串口助手向88E1518中寄存器写入数据或者读出数据。

    “FPGA+MDIO总线+UART串口=高效读写PHY芯片寄存器!“(含源代码)


  上面几篇文章是对PHY芯片和协议的相关讲解,下面文章开始对PHY芯片的数据传输接口和讲解、实现以太网协议。

  首先需要把88E1518的RGMII双沿采样数据的接口协议转换为单沿传输数据的GMII接口协议,会使用到BUFIO、BUFG、IDDR、ODDR、IDELAYE等原语知识。

    基于FPGA的GMII与RGMII接口相互转换(包含源工程文件)


  下文讲解以太网帧格式和ARP协议,ARP协议是源主机知道目的主机IP,不知道目的主机物理地址时发起的协议,具体知识可以查看下文。

    以太网帧格式及ARP协议简介


  上文讲解了ARP以及以太网帧格式,下文通过FPGA实现ARP协议,包括CRC校验,以太网发送和以太网接收等模块。最后通过仿真和上板测试,用户需要掌握PC端清除ARP绑定和发起ARP请求的指令,并且需要简单掌握wireshark的使用。

    【实战干货】FPGA实现ARP协议,细节全解析!(包含源工程文件)


  下文讲解IP协议和ICMP协议的相关知识,ICMP主要用于检测以太网链路的畅通,回显应答发送的数据与回显请求数据段的数据必须保持一致。

    IP协议及ICMP协议简介


  通过FPGA实现ICMP协议,用于外设测试以太网链路的畅通,该设计会包含arp协议,用户就不需要手动绑定IP和物理地址,会更加方便。

  PC在发送回显请求之前,会发送arp请求获取目的主机的物理地址,可以通过wireshark抓取对应报文。

    基于FPGA实现ICMP协议(包含源工程文件)


  ARP协议用于获取目的主机的物理地址,ICMP用于测试以太网链路的连接状态,而UDP用于传输数据。

  下文简要讲解UDP协议,然后通过FPGA实现该协议,注意本文只是用于熟悉UDP协议的一些知识,对数据做了简要回环,可能会存在一些bug。

  对于这个bug我并没有修复,原因在于这个设计中ARP、ICMP、UDP分别通过不同模块实现,这样的设计便于调试或者屏蔽某种协议,但是会消耗更多资源,因此后面会对这三个模块进行整合,合并为一个模块,解决上述问题。

    基于FPGA的UDP实现(包含源工程文件)


  下文就是整合ARP、ICMP、UDP协议的结果,相比前文的工程会节省很多资源,并且加入了帧间隔等信息,修复了发现的bug。上板实测最大发送速率可以达到980Mbps。后续文章使用的以太网UDP模块均是该模块。

    基于FPGA的实用UDP设计(包含源工程文件)


  下文是以太网模块存在问题的优化,对应工程也已经上传到百度网盘的以太网UDP版本1。

    以太网模块问题及优化


  上位机通过UDP协议向FPGA传输图像数据,FPGA使用上述设计的模块接收上位机的数据,并且将数据传输给DDR3存储,最后在HDMI显示器上进行显示。下面两篇文章的效果都一样,区别在于mig IP的用户接口不同。

    基于FPGA的以太网传输图片通过HDMI显示(含源码)

    将Xilinx DDR3 MIG IP核的AXI_FULL接口封装成FIFO接口(含源码)


  这篇文章是对前一篇文章中出现的一个bug总结,通过实际现象推测可能出现的原因,然后利用ILA和wireshark抓取关键信号去判断猜想是否正确,最后找到根本原因,解决问题。

    以太网传输图片工程出现的问题总结(含源码)


  上一篇文章主要用于UDP接收数据报文,下文主要用于测试UDP发送数据报文,OV7725摄像头采集数据,通过FIFO暂存,然后直接通过以太网发送模块将数据发送给PC端,PC端通过上位机显示摄像头的图像信息。

    基于FPGA的OV7725网络摄像头(含源码)


  设计其实有时候挺烦的,自己的设计出现问题,就只能自己通过ILA这些工具去定位问题,原因在于短时间其他人也不知道你的代码是如何写的,更不知道这个代码中的关键信号,无法帮你定位问题。

  因此在设计的时候我通常会将所有模块实现一遍,即便不能替换他人模块,也需要知道他的设计思路,关键信号是哪些,出现问题后如何定位等等。能不能找到更加简便的实现方式,优化一些设计,便于后续替代等等。

  只有当你自己能够设计出功能相同甚至功能更优的电路的时候,才是真正掌握了知识,不是把别人代码拿过来用就行了。

  下图用于封面!!!!

在这里插入图片描述


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

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

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

相关文章

CSRF漏洞初解

CSRF漏洞初解 1.什么是CSRF漏洞 CSRF(Cross-Site Request Forgery)漏洞是一种Web应用程序安全漏洞,也被称为"One-Click Attack"或"Session Riding"。它利用了Web应用程序对用户在其他网站上已经验证过的身份的信任&…

数模 初见数建

文章目录 初见数学建模1.1 数学建模是什么1.2 数学建模的概述1.3 如何学习数学建模---分模块化1.4 数学建模前提了解1.5 数学建模的六个步骤1.6 如何备战建模比赛1.7 数学建模赛题类型1.8 数学建模算法体系概述 初见数学建模 1.1 数学建模是什么 1.原型与模型 原型&#xff…

006Node.js cnpm的安装

百度搜索 cnpm,进入npmmirror 镜像站https://npmmirror.com/ cmd窗口输入 npm install -g cnpm --registryhttps://registry.npmmirror.com

缓存相关知识总结

一、缓存的作用和分类 缓存可以减少数据库的访问压力,提升整个网站的数据访问速度,改善数据库的写入性能。缓存可以分为两种: 缓存在应用服务器上的本地缓存:访问速度快,但受应用服务器内存限制 缓存在专门的分布式缓存…

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了,分数一百分可能,感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204,纯手写 第二题是 物理题 纯蒙,随便猜了个轨迹,答案具体忘了,最后是 .45 第三题暴力 第四题 我是傻逼…

如何对图像进行聚类

文章来源:https://medium.com/voxel51/how-to-cluster-images-6e09bdff7361 2024 年 4 月 10 日 使用 FiftyOne、Scikit-learn和特征嵌入 在 2024 年深度学习的计算密集型环境中,集群一词最常出现在讨论 GPU 集群时--高度优化的矩阵乘法机器的大规模集…

Java | Leetcode Java题解之第28题找出字符串中第一个匹配项的下标

题目&#xff1a; 题解&#xff1a; class Solution {public int strStr(String haystack, String needle) {int n haystack.length(), m needle.length();if (m 0) {return 0;}int[] pi new int[m];for (int i 1, j 0; i < m; i) {while (j > 0 && needl…

去中心化社交媒体:分析 Facebook 在区块链平台上的角色

在当今数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;随着人们对数据隐私和信息控制的关注不断增加&#xff0c;传统的中心化社交媒体平台也面临着越来越多的质疑和挑战。为了应对这些挑战&#xff0c;越来越多的人开始探索去中心化社…

windows SDK编程 --- 第一个程序

一、基础知识 1.Unicode 和 ANSI 在 Windows 编程中&#xff0c;Unicode 和 ANSI 是两种不同的字符编码方法&#xff0c;它们用于定义如何在计算机中表示和存储字符数据。 ANSI ANSI&#xff08;American National Standards Institute&#xff09;编码是一种基于单字节的字符…

Docker之自定义镜像上传至阿里云

一、Alpine介绍 Alpine Linux是一个轻量级的Linux发行版&#xff0c;专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库&#xff0c;使得它具有出色的性能和资源利用率。 Alpine Linux的主要特点包括&#xff1a; 小巧轻量&#xff1a;Alpine Linux的安装…

CentOS7安装node-v20.12.2

个人记录 官网查看最新版本 NodeJs下载地址 进入指定目录 cd /usr/local/下载 wget https://nodejs.org/dist/v20.12.2/node-v20.12.2-linux-x64.tar.xz --no-check-certificate解压 tar -xvf node-v20.12.2-linux-x64.tar.xz查看 ls ls node-v20.12.2-linux-x64编辑配…

7 个适用于 Windows 的最佳电脑分区数据恢复软件

磁盘分区对于正确存储数据以便从硬盘驱动器快速轻松地访问非常有帮助。但是&#xff0c;如果分区损坏&#xff0c;存储在其中的所有数据都会突然变得无法访问。磁盘分区损坏的原因可能有很多&#xff0c;其中最突出的是病毒攻击、突然断电、物理损坏或由于创建坏扇区。 但是&a…

RedisTemplate对象中方法的使用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Redis是一个key-va…

实时智能应答3D数字人搭建2

先看效果&#xff1a; 3d数字人讲黑洞 根据艾媒咨询数据&#xff0c;2021年&#xff0c;中国虚拟人核心产业规模达到62.2亿元&#xff0c;带动市场规模达到1074.9亿元&#xff1b;2025年&#xff0c;这一数据预计将达到480.6亿元与6402.7亿元&#xff0c;同比增长迅猛。数字人可…

【图论】详解链式前向星存图法+遍历法

细说链式前向星存图法 首先要明白&#xff0c;链式前向星的原理是利用存边来进行模拟图。 推荐左神的视频–建图、链式前向星、拓扑排序 比方说有这样一张图&#xff0c;我们用链式前向星来进行模拟时&#xff0c;可以将每一条边都进行编号&#xff0c;其中&#xff0c;红色的…

【MySQL】MySQL在Centos 7环境安装

目录 准备工作 第一步&#xff1a;卸载不要的环境 第二步&#xff1a;下载官方的mysql 第三步 上传到Linux中 第四步 安装 正式安装 启动 ​编辑 登录 准备工作 第一步&#xff1a;卸载不要的环境 使用root进行安装 如果是普通用户&#xff0c;使用 su - 命令&#…

FM、FFM以及DeepFM

FM部分 什么是FM FM是factor machine的简写&#xff0c;中文翻译为因子分解机。为什么需要FM 在进行特征建模的过程中&#xff0c;经常会遇到两种情况&#xff1a; 对特征直接进行建模&#xff0c;未考虑特征之间的关联信息&#xff1b;特征高维稀疏&#xff0c;导致计算量大&…

【详细教程】MySQL 高可用架构代码实现

前言 对于 MySQL 数据库作为各个业务系统的存储介质&#xff0c;在系统中承担着非常重要的职责&#xff0c;如果数据库崩了&#xff0c;那么对于读和写数据库的操作都会受到影响。如果不能迅速恢复&#xff0c;对业务的影响是非常大的。之前 B 站不是出过一次事故么&#xff0…

解决jenkins运行sh报process apparently never started in XXX

个人记录 问题 process apparently never started in /var/jenkins_home/workspace/ks-springboot_mastertmp/durable-bbfe5f99(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICStrue might make the problem cl…

Electron+React 搭建桌面应用

创建应用程序 创建 Electron 应用 使用 Webpack 创建新的 Electron 应用程序&#xff1a; npm init electron-applatest my-new-app -- --templatewebpack 启动应用 npm start 设置 Webpack 配置 添加依赖包&#xff0c;确保可以正确使用 JSX 和其他 React 功能&#xff…