用FPGA实现UDP通讯

调试基于FPGA的UDP通讯可以说是一波三折,满眼都是泪。

1,首先根据网上的AN8211开发板原理图,做自己的开发板;

调试硬件的过程中,由于焊接或者其他的原因,导致晶振不起振;首先怀疑是自己的板子设计问题,仔细比较原理图,PCB图,查找数据手册,管脚信息…………考虑是否是匹配电容问题,查找各种数据手册,计算匹配电容,更换为30pF电容,发现还是无法起振。脑袋炸了!

灵光一闪,换块板子试一下。示波器测试,哈哈,起振了!

2,然后开始调试FPGA驱动程序;

根据网上例程,改写驱动程序;

怎么都无法连上电脑,什么问题???分析代码,一行一行的比较,查看,没有问题啊?

然后逼着自己又看了UDP传输协议,IP包头格式,以太网帧格式,UDP包头格式……,没有问题;

后来不知道怎么搞的,把计算机网络设置中更改了一下,呵呵o(* ̄︶ ̄*)o,网路端的灯闪烁了。高兴啊!

3,开始调试FPGA程序,先自己模拟数据发送给计算机端,通过wireshark能抓到FPGA发送的数据包了。这是以为网络通讯已经成功了。哎,年轻啊?

4,计算机端编写Qt程序,接收FPGA通过UDP传过来的数据包,wireshark可以收到,但是Qt程序接收不到;

怀疑Qt程序问题;通过网络查找,编写最简单的Qt接收UDP包程序,connect(uSocket,SIGNAL(readyRead()),this,SLOT(recvData()));就是无法触发readyRead()。啊啊啊!!!!!!

通过一周的查找,调试,看FPGA端代码,看Qt端代码,计算机防火墙关闭,无果,崩溃,泪奔,无法言语形容……脑袋里始终在想到底是什么原因导致的?

一个偶然的机会,看到一篇文章,说windows10系统的防火墙的防护机制,仔细拜读完,然后试一下,果然通了。

添加编写的程序进入到“允许的程序和功能”中,才可以,不然防火墙把数据包拦截了。wireshark默认开启了网卡的混乱模式,但是计算机没有开启,把程序添加进“允许的程序和功能”中就可以了。

 

前后经历了1个多月,终于把UDP的通讯搞定了,目前可以把我的FPGA板子接收相机传输过来的数据,通过UDP上传给计算机,进行通讯了。可以实现了UDP的发送数据和接收数据。

下面把我自己整理的UDP包格式贴出来,

//---------------------------------------------------------------------------------------------------
// 整体报文:
//                用户数据:                                              |-----------------------------------|
//                                                                          |        hello word!                      |
//                                                                         |-----------------------------------|
//                UDP 层                                    |--------                                                |
//                                                            |UDP包头 |           数据段                   |
//                                                            |--------------------------------------------|
//                IP 层                        |-----------                                                            |
//                                            |IP包头        |                        数据段                                |
//                                            |--------------------------------------------------------|---------|
//                MAC 层    |-----------|                                                                            |             |
//                            |MAC帧头        |                            数据段                                            |  FCS校验 |
//                            |--------------------------------------------------------------------|---------|
//
//    注:最后的mac层就是要传给phy芯片的数据。FCS采用crc32,注意计算的时序,MAC帧头为7个0x55和一个0xD5
//
//
// 所以在网络上发送的数据为前导码:7个0x55,和一个0xD5 ;
//        然后发送MAC帧头:目的MAC地址,源MAC地址,以及上一层使用的协议类型
//        然后发送的是IP层的IP包头:版本号:4,包头长度5:标识4*5=20个字节长度;UDP长度
//                                        包序列号,以及片偏移量
//                                        生存时间,协议类型,首部校验和
//                                        源IP地址
//                                        目的IP地址
//                                        选项:(此处没有)
//
//     然后是UDP包头:
//                    源端口号,目的端口号
//                    数据包长度,检查校验和
//
//    然后就是实际的数据了;
//
//
//-------------------------------------------------------------------------------------------------------

// 百兆以太网UDP发送;
// 此处使用的时钟为25MHZ;
//
 

总结,基本功能实现,下一步开始调试相机到FPGA开发板的传输,尽可能提高传输的速度和稳定性;

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FPGA UDP路由器是一种基于可编程逻辑的网络设备,用于在不同网络节点之间传输基于UDP协议的数据包。FPGA(Field-Programmable Gate Array可编程门阵列)是一种可重新配置的硬件芯片,具有高度灵活性和可编程性,适用于各种应用领域,包括网络通信。 FPGA UDP路由器的主要功能是实现数据包的路由和转发,它可以根据目的地址和端口号将接收到的数据包从一个网络节点传输到另一个网络节点。同时,FPGA UDP路由器还可以处理数据包的过滤、转换和修改。它可以根据特定的规则和策略对数据包进行解析和处理,以满足特定的网络需求。 FPGA UDP路由器的优势之一是其高度灵活性和可编程性。通过重新配置FPGA芯片,可以轻松地更改和升级路由器的功能和性能。这使得FPGA UDP路由器可以适应不同的网络环境和需求。 另一个优势是FPGA UDP路由器的高性能。由于FPGA芯片具有优秀的并行处理能力,它可以同时处理多个数据包,实现高效的数据传输和路由功能。此外,由于FPGA芯片的硬件设计和优化,FPGA UDP路由器具有较低的延迟和较高的吞吐量。 总之,FPGA UDP路由器是一种灵活、可编程且高性能的网络设备,用于实现基于UDP协议的数据包的路由和转发。它在各种网络环境和应用场景中具有广泛的应用前景。 ### 回答2: FPGA(现场可编程门阵列)是一种可以自定义硬件功能的芯片,它能够快速地实现各种不同的电路功能。而UDP(用户数据报协议)是一种传输层协议,用于在网络中传输数据。 FPGA UDP 路由器是一种基于FPGA芯片设计和实现的网络路由器,它使用UDP协议来转发数据包。相比于传统的软件实现的路由器,FPGA实现的路由器具有更高的速度和更低的延迟。因为FPGA可以根据设计者的要求,将关键路径优化到硬件层面,从而加快数据包处理的速度。 FPGA UDP 路由器可以通过将不同的IP地址映射到不同的输出端口来路由数据包。它能够在网络中快速地找到数据包的目的地,并将其转发到相应的端口。同时,FPGA芯片自身的并行计算能力,使得它可以同时处理多个数据包的转发,从而提高路由器的吞吐量。 除了基本的数据包转发功能,FPGA UDP 路由器还可以实现其他功能,例如流量控制、拥塞控制和负载均衡等。它可以通过在硬件层面上执行这些功能,来提高路由器的性能和可靠性。 总之,FPGA UDP 路由器通过利用FPGA的硬件加速能力,可以实现高速、低延迟的数据包转发,使得网络传输更加高效和可靠。这种路由器在高性能计算、数据中心和云计算等领域有着广泛的应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值