目录
1、前言
目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,官方提供的licence有效期只有120天,其实三速网IP仅仅实现了rgmii到gmii再到axis的转换,完全可以不用这个ip;
本设计使用Micrel公司的KSZ9031RNX作为网络PHY芯片,使用verilog代码设计UDP协议,并带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单,通过一个fifo实现UDP数据的回环收发,并在电脑端使用网络调试助手进行UDP收发验证;
本设计使用UDP传输视频,通过配置 OV5640摄像头的寄存器实现 JPEG 视频压缩的图像输出,以太网传输用 Ethernet UDP 通信协议,达到视频图像数据的快速传输。上位机通过接收网口的 UDP 数据包,提取 JPEG 的图像数据显示在电脑上,文章末尾有演示视频,请耐心看到最后。
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、我这里已有的UDP方案
目前我这里有如下几种UDP方案和应用实例:
我的博客主页有个FPGA以太网通信专栏,专栏是免费的,里面有很多FPGA实现的UDP应用,对网络通信有需求的兄弟可以去看看:直接点击前往
3、UDP详细设计方案
本实验以千兆以太网 RGMII 通信为例来设计 verilog 程序,UDP分为两部分,分别为发送和接收,实现了 动态ARP,UDP,Ping 和10/100/1000M网速自动协商仲裁功能。以下为原理实现框图:详细的设计请参考我之前写的文章:直接点击前往
4、本UDP视频传输的优势
相较于其他UDP视频传输方案,本方案具有以下优势:
1、使用ov5640摄像头作为输入源,价格便宜,接口简单;
2、使用ov5640的jpg输出模式,这点很新颖,可以学习一下ov5640的jpg输出模式的配置;
3、图像输出几乎无延时,没有将图像缓存DDR3,仅进出一个FIFO就送UDP发出去了;
3、图像画质好,由于采用ov5640的jpg输出模式,输出画质更好,可以在文章末尾有演示视频查看;
5、UDP视频传输详细设计方案
本设计使用UDP传输视频,通过配置 OV5640摄像头的寄存器实现 JPEG 视频压缩的图像输出,以太网传输用 Ethernet UDP 通信协议,达到视频图像数据的快速传输。上位机通过接收网口的 UDP 数据包,提取 JPEG 的图像数据显示在电脑上,在 FPGA 内部使用一个FIFO 模块用于存储摄像头 OV5640 采集的 JPG 图像数据,当 FIFO 数据的数量达到一个 UDP 数据包的长度时,触发一次 UDP 的数据包发送。实现的逻辑框图如下:
ov5640 寄存器配置
首先对 ov5640 寄存器配置做了修改,在寄存器表里,将分辨率改成了 800*600,并且选择了JPEG 模式,配置详情请参考代码练习。。。需要注意的是,JPEG 格式输出的视频图像的每一帧的数据大小是不一样的,JPEG 输出的数据模式有 6 种,我们程序中设置为 JPEG 模式 2,即每行的长度是固定的,每帧会有不同的行数,最后一行的数据没有达到固定的长度的话,会补充 dummy 数据。具体大家看一下OV5640 的 datasheet。
UDP发送设计
在例化 mac_test.v 时,将 UDP 发送数据长度设置为 1024 字节。并对以太网做了上电复位处理,利用 power_on_rst.v 上电延迟 100ms 复位以太网模块。在 udp_tx.v 文件中,去掉了 UDP 数据的校验和计算,节省时间。在 mac_test.v 的状态机中,加入了 CHECK_FIFO 状态,由于以太网首部发送也要一定时间,因此提前判断 fifo 中的可读数据数量是否大于 1000,启动 UDP 数据发送。
需要注意的是,由于上位机的IP是写死的,所以FPGA代码里的UDP模块的本机和目的IP都不能修改,只需要将你的电脑网卡IP地址修改为192.168.0.3即可。
6、vivado工程详解
工程介绍:
开发板:Xilinx Artix7开发板;
开发环境:vivado2019.1;
网络PHY:KSZ9031;
输入:OV5640摄像头,800*600分辨率,jpeg模式;
输出:UDP-RJ45网口;
工程代码架构如下:
FPGA资源消耗和功耗预估如下:
7、上板调试验证并演示
注意!!!
注意!!!
注意!!!
由于上位机的IP是写死的,所以FPGA代码里的UDP模块的本机和目的IP都不能修改,只需要将你的电脑网卡IP地址修改为192.168.0.3即可。
板子上电下载bit后,先测试ping功能,效果看视频演示。。。
再打开上位机软件测试接受到的视频画质,效果看视频演示。。。
上位机软件和工程代码打包在一起,如下:
然后鼠标点住上位机软件的图像区不放,即可完成视频录像和抓拍图片,文件保存位置如下:
可以点击去查看,如下:
8、验证演示视频
FPGA-自协商-UDP-ov5640
9、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下: