fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递1本实验将实现FPGA芯片和PC之间进行千兆以太网数据通信,通信协议采用Ethernet UDP通信协议。FPGA通过GMII总线和开发板上的GigabitPHY芯片通信,GigabitPHY芯片把数据通过网线发给PC。在上次的实验中,我们详细讲解了网络传输的过程中如何对数据进行传输,以及数据传输的格式,这次实验中,我们详细讲解如何使用Verilog语言

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1

本实验将实现 FPGA 芯片和 PC 之间进行千兆以太网数据通信, 通信协议采用 Ethernet  UDP 通信协议。 FPGA 通过 GMII 总线和开发板上的 Gigabit PHY 芯片通信, Gigabit PHY芯片把数据通过网线发给 PC。在上次的实验中,我们详细讲解了网络传输的过程中如何对数据进行传输,以及数据传输的格式,这次实验中,我们详细讲解如何使用Verilog语言来实现将UDP数据的发送。

以太网数据通信的示意图如下:

fpga以太网通信例程_verilog参数传递


这里我再展示数据传输的格式图片。

fpga以太网通信例程_verilog参数传递


  其中数据包括三个方面的内容:IPv4数据包头,UDP包头,和用户数据。

IPv4数据包头:

fpga以太网通信例程_verilog参数传递


UDP数据包头。

fpga以太网通信例程_verilog参数传递



2


   AX515/AX530开发板我们采用了Realtek千兆GPHY芯片RTL8211E 来实现千兆以太网数据通信。当网口 Link 到千兆以太网时, FPGA 通过 GMII 总线和 PHY 芯片进行数据通信,当网口 Link 到百兆以太网时, PGA 通过 MII 总线和 PHY 芯片进行数据通信。 另外 FPGA 可以通过 MDI/MDIO 管理接口来配置或读取 PHY 芯片内部的寄存器。

本实验以千兆以太网 GMII 通信为例来设计 verilog 程序。整个Ethernet_test测试是一个顶层模块,UDP发送模块。我们要发送的数据为Hello World。

首先我们先实现UDP模块。 UDP模块包括UDP发送模块和CRC校验模块。RTL电路示意图:

fpga以太网通信例程_verilog参数传递


 Ipsend模块是UDP发送模块。各个引脚的解释请看各个模块的Verilog代码。代码在下面。UDP发送顶层模块。

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递


UDP发送数据模块。

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递


       UDP 发送模块实现把 RAM 里的数据组成 UDP IP 包格式通过 GMII 总线发给 PHY 芯片,PHY 芯片再把数据发送到开发板的网口。

IP 数据包发送之前需要先发送 IP 数据包的包头,IP 包头由 8 个字节的前导码, 目标 MAC Address,源 MAC 地址和两个字节的 IP 包类型组成。前导码是由 7 个 0x55, 1个 0xD5 字节组成, 表示一个IP数据包传输的开始; 目标MAC Address为数据要发送对象的MAC地址,如果开发板的网口是和您的 PC 机相连, 那目标 MAC Address的值为你 PC 机的 MAC 地址。源 MAC Address 是指开发板本地的 MAC 地址。IP 包类型值为 0x0800。

发完 IP 包头之后开始发送 IP 数据报首部,IP 数据报首部的格式我们在前面已经讲过,接着发送 ram中的数据,最后发送 4 个字节的 CRC32 的值。

CRC模块我们不把代码贴出来了,请到最后我提供的链接进行下载。

Ethernet顶层测试模块。

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递

fpga以太网通信例程_verilog参数传递


 Ethernet顶层设计模块是首先将发送的数据写进ram中,此时ram作为一个缓存,每次发送数据的时候首先需要去读取ram中的数据,将读取ram中的数据读入UDP模块中,然后进行按照数据发送的格式进行发送,每次发送的一帧数据即为Hello World。即为12字节。

3


实验结果:

fpga以太网通信例程_verilog参数传递


   通过wireshark软件我们抓取Ethernet网络的数据,在wireshark抓包窗口我们可以看到开发板(192.168.0.2)向PC网口(192.168.0.2)发来的数据包,这里会显示数据包的目标MAC, 源MAC,IP包头和UDP包等信息。

千兆以太网的数据传输速度非常快,而且是全双工传输,通过环路测试,UDP 通信的数据速度可以达到 900Mbps 以上,非常适合高速数据传输的场合,比如视频图像传输,高速数据采集等等。

  注意:以太网的数据帧的传输有包长的要求, 一般在46~1500字节。所以在发送以太网数据包的时候,数据帧的长度不能太短, 不然会导致PC数据包发送而FPGA收不到数据包的情况。

  工程链接地址:链接:http://pan.baidu.com/s/1geWb771 密码:64wf

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206686.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数字逻辑中的与或非异或的运算规律_执行逻辑与或非运算

    数字逻辑中的与或非异或的运算规律_执行逻辑与或非运算计算机中的逻辑运算又被称作为“布尔运算”,分别为:逻辑**与**运算、逻辑**或**运算,逻辑**非**运算,“逻辑**异或**运算。此外在门电路中还有:**同或**运算、**与非**运算、**或非**运算。共七种。……

    2022年10月12日
    2
  • tomcat java_maven和java有什么区别

    tomcat java_maven和java有什么区别缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅

    2022年8月9日
    3
  • qtcpsocket编程_qtcpsocket判断连接状态

    qtcpsocket编程_qtcpsocket判断连接状态QTcpSocket和QTcpServer类实现了Qt的Tcp客户端和服务器。 tcp是一个流式协议。对于应用程序来说,数据是一个很长的流,有点像一个巨大的文件。 搞成此的协议建立在面向块的tcp协议(Block-oriented)或面向行(Line-oriented)的tcp协议上。 面向块的tcp协议,数据被当作一个2进制的块来传输。没每一个块被当作一个定义了大小的,后面

    2022年9月8日
    2
  • 滴滴派单规则分析

    滴滴派单规则分析滴滴派单规则1批量匹配(全局最优)派单策略主要的原则是:站在全局视角,尽量去满足尽可能多的出行需求,保证乘客的每一个叫车需求都可以更快更确定的被满足,并同时尽力去提升每一个司机的接单效率,让总的接驾距离和时间最短。这个算法几乎是所有类似派单系统为了解决这个问题的最基础模型,在Uber叫做BatchingMatching,滴滴叫做“全局最优”或者“延迟集中分单”。2基于供需预测的分单(大数据预测)利用对未来的预测:如果我们预测出未来一个区域更有可能有更多的订单/司机,那么

    2022年6月2日
    143
  • 停用NetworkManager[通俗易懂]

    停用NetworkManager[通俗易懂]managed=false LinuxDeepin11.12,在KDE下使用pppoeconf后发现gnome3中NetworkManager显示“设备未托管”,用pppoeconf联网查找资料:——————————————–修改文件:/etc/NetworkManager/NetworkManag

    2022年10月4日
    3
  • Delphi源码:编辑长求字符串相似度

    Delphi源码:编辑长求字符串相似度

    2021年6月20日
    96

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号