社区信息建设网站,想让网站的文章都被收录怎么做,大地资源在线资源免费观看,响应式网站 图片处理目录 1、前言版本更新说明免责声明 2、我这里已有的以太网方案3、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条UDP协议栈UDP视频数据组包UDP协议栈数据发送UDP协议栈数据缓冲IP地址、端口号的修改Tri Mode Ethernet MAC1G/2.5G Ethernet PCS/PMA or SGMIIQT上位机和源… 目录 1、前言版本更新说明免责声明 2、我这里已有的以太网方案3、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条UDP协议栈UDP视频数据组包UDP协议栈数据发送UDP协议栈数据缓冲IP地址、端口号的修改Tri Mode Ethernet MAC1G/2.5G Ethernet PCS/PMA or SGMIIQT上位机和源码 4、vivado工程详解5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 6、上板调试验证并演示准备工作ping一下静态演示动态演示 7、福利工程源码获取 1、前言
没玩过UDP协议栈都不好意思说自己玩儿过FPGA这是CSDN某大佬说过的一句话鄙人深信不疑。。。UDP协议栈在实际项目中应用广泛特别是在医疗和军工行业本文使用Xilinx的Artix7 FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现千兆网UDP视频传输视频源有两种分别对应开发者手里有没有摄像头的情况一种是使用廉价的OV5640摄像头模组另一种是如果你的手里没有摄像头或者你的开发板没摄像头输入接口则可使用代码内部生成的动态彩条模拟摄像头视频视频源的选择通过代码顶层的define宏定义进行上电默认选择OV5640摄像头模组作为视频输入源FPGA采集视频后使用FDMA将视频缓存到DDR3中然后将视频读出根据与QT上位机的通信协议将视频进行UDP数据组包然后使用我们的UDP协议栈对视频进行UDP数据封装再将数据送入Tri Mode Ethernet MAC IP输出GMII格式数据给1G/2.5G Ethernet PCS/PMA or SGMII1G/2.5G Ethernet PCS/PMA or SGMII在这里充当了网络变压器的角色所以不需要外接例如RTL8211、B50610等PHY然后UDP视频通过开发板板载的SFP光口经光模块转网口通过网线传输给电脑主机电脑端用我们提供的QT上位机采集图像并显示提供vivado2019.1版本的FPGA工程源码和QT上位机及其源码
本博客详细描述了FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做学习提升可应用于医疗、军工等行业的高速接口或图像处理领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
版本更新说明
此版本为第2版根据读者的建议对第1版工程做了如下改进和更新 1增加了输入视频动态彩条的选择有的读者说他手里没有OV5640摄像头或者摄像头原理图和我的不一致导致在移植过程中困难很大基于此增加了动态彩条它由FPGA内部产生不需要外接摄像头就可以使用使用方法在后文有说明 2优化了FDMA之前的FDMA内AXI4的数据读写突发长度为256导致在低端FPGA上带宽不够从而图像质量不佳基于此将FDMA内AXI4的数据读写突发长度改为128 3优化了UDP协议栈及其数据缓冲FIFO组的代码并在博文里增加了这一部分的代码说明 4优化了整体代码架构使得之前看起来杂乱无章的代码变得清爽简洁
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等)若大佬们觉得有所冒犯请私信批评教育基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
2、我这里已有的以太网方案
目前我这里有大量UDP协议的工程源码包括UDP数据回环视频传输AD采集传输等也有TCP协议的工程还有RDMA的NIC 10G 25G 100G网卡工程源码对网络通信有需求的兄弟可以去看看直接点击前往 其中千兆TCP协议的工程博客如下 直接点击前往
3、设计思路框架
FPGA工程设计框图如下
视频源选择
视频源有两种分别对应开发者手里有没有摄像头的情况一种是使用廉价的OV5640摄像头模组另一种是如果你的手里没有摄像头或者你的开发板没摄像头输入接口则可使用代码内部生成的动态彩条模拟摄像头视频视频源的选择通过代码顶层的宏定义进行上电默认选择OV5640摄像头模组作为视频输入源 视频源的选择通过代码顶层的define宏定义进行如下 选择逻辑代码部分如下 选择逻辑如下 当(注释) define COLOR_IN时输入源视频是动态彩条 当(不注释) define COLOR_IN时输入源视频是ov5640摄像头
OV5640摄像头配置及采集
OV5640摄像头需要i2c配置才能使用需要将DVP接口的视频数据采集为RGB565或者RGB888格式的视频数据这两部分均用verilog代码模块实现代码位置如下 其中摄像头配置为分辨率1280x720如下 摄像头采集模块支持RGB565和RGB888格式的视频输出可由参数配置如下 RGB_TYPE0输出本RGB565格式 RGB_TYPE1输出本RGB888格式 设计选择RGB565格式
动态彩条
动态彩条可配置为不同分辨率的视频视频的边框宽度动态移动方块的大小移动速度等都可以参数化配置我这里配置为辨率1280x720动态彩条模块代码位置和顶层接口和例化如下
UDP协议栈
本UDP协议栈方案需配合Xilinx的Tri Mode Ethernet MAC三速网IP一起使用使用UDP协议栈网表文件虽看不见源码但可正常实现UDP通信该协议栈目前并不开源只提供网表文件但不影响使用该协议栈带有用户接口使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发非常简单 协议栈架构如下 协议栈性能表现如下 1支持 UDP 接收校验和检验功能暂不支持 UDP 发送校验和生成 2支持 IP 首部校验和的生成和校验同时支持 ICMP 协议中的 PING 功能可接收并响应同一个子网内部设备的 PING 请求 3可自动发起或响应同一个子网内设备的 ARP 请求ARP 收发完全自适应。ARP 表可保存同一个子网内部256 个 IP 和 MAC 地址对 4支持 ARP 超时机制可检测所需发送数据包的目的 IP 地址是否可达 5协议栈发送带宽利用率可达 93%高发送带宽下内部仲裁机制保证 PING 和 ARP 功能不受任何影响 6发送过程不会造成丢包 7提供64bit位宽AXI4-Stream形式的MAC接口可与Xilinx官方的千兆以太网IP核Tri Mode Ethernet MAC以及万兆以太网 IP 核 10 Gigabit Ethernet Subsystem、10 Gigabit Ethernet MAC 配合使用 有了此协议栈我们无需关心复杂的UDP协议的实现了直接调用接口即可使用。。。 本UDP协议栈用户接口发送时序如下 本UDP协议栈用户接口接收时序如下
UDP视频数据组包
实现UDP视频数据的组包UDP数据发送必须与QT上位机的接受程序一致上位机定义的UDP帧格式包括帧头个UDP数据帧头定义如下 FPGA端的UDP数据组包代码必须与上图的数据帧格式对应否则QT无法解析代码中定义了数据组包状态机以及数据帧如下 另外由于UDP发送是64位数据位宽而图像像素数据是24bit位宽所以必须将UDP数据重新组合以保证像素数据的对齐这部分是整个工程的难点也是所有FPGA做UDP数据传输的难点
UDP协议栈数据发送
UDP协议栈具有发送和接收功能但这里仅用到了发送此部分代码架构如下 UDP协议栈代码组我已经做好用户可直接拿去使用
UDP协议栈数据缓冲
这里对代码中用到的数据缓冲FIFO组做如下解释 由于 UDP IP 协议栈的 AXI-Stream 数据接口位宽为 64bit而 Tri Mode Ethernet MAC 的 AXI-Stream数据接口位宽为 8bit。因此要将 UDP IP 协议栈与 Tri Mode Ethernet MAC 之间通过 AXI-Stream 接口互联需要进行时钟域和数据位宽的转换。实现方案如下图所示 收发路径(本设计只用到了发送)都使用了2个AXI-Stream DATA FIFO通过其中1个FIFO实现异步时钟域的转换1个FIFO实 现数据缓冲和同步Packet mode功能由于千兆速率下Tri Mode Ethernet MAC的AXI-Stream数据接口同步时钟信号为125MHz此时UDP协议栈64bit的AXI-Stream数据接口同步时钟信号应该为125MHz/(64/8)15.625MHz因此异步 AXI-Stream DATA FIFO两端的时钟分别为125MHz(8bit)15.625MHz(64bit)UDP IP协议栈的AXI-Stream接口经过FIFO时钟域转换后还需要进行数据数据位宽转换数据位宽的转换通过AXI4-Stream Data Width Converter完成在接收路径中进行 8bit 到 64bit 的转换在发送路径中进行 64bit 到 8bit 的转换
IP地址、端口号的修改
UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改位置如下
Tri Mode Ethernet MAC
Tri Mode Ethernet MAC主要是为了适配1G/2.5G Ethernet PCS/PMA or SGMII因为后者的输入接口是GMII而Tri Mode Ethernet MAC的输入接口是AXIS输出接口是GMIITri Mode Ethernet MAC配置如下
1G/2.5G Ethernet PCS/PMA or SGMII
1G/2.5G Ethernet PCS/PMA or SGMII在这里充当了网络变压器的角色所以不需要外接例如RTL8211、B50610等PHY1G/2.5G Ethernet PCS/PMA or SGMII配置为1G其与MAC的接口为GMII配置如下
QT上位机和源码
我们提供和UDP通信协议相匹配的QT抓图显示上位机及其源代码目录如下 我们的QT目前仅支持1280x720分辨率的视频抓图显示但同时预留了1080P接口对QT开发感兴趣的朋友可以尝试修改代码以适应1080P因为QT在这里只是验证工具不是本工程的重点所以不再过多赘述详情请参考资料包的QT源码位置如下
4、vivado工程详解
开发板FPGA型号Xilinx–Artix7–xc7a35tfgg484-2 开发环境Vivado2019.1 输入OV5640摄像头或动态彩条分辨率1280x720 输出SFP光口 工程作用FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输 工程BD如下 工程代码架构如下 工程的资源消耗和功耗如下
5、工程移植说明
vivado版本不一致处理
1如果你的vivado版本与本工程vivado版本一致则直接打开工程 2如果你的vivado版本低于本工程vivado版本则需要打开工程后点击文件–另存为但此方法并不保险最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本 3如果你的vivado版本高于本工程vivado版本解决如下 打开工程后会发现IP都被锁住了如下 此时需要升级IP操作如下
FPGA型号不一致处理
如果你的FPGA型号与我的不一致则需要更改FPGA型号操作如下 更改FPGA型号后还需要升级IP升级IP的方法前面已经讲述了
其他注意事项
1由于每个板子的DDR不一定完全一样所以MIG IP需要根据你自己的原理图进行配置甚至可以直接删掉我这里原工程的MIG并重新添加IP重新配置 2根据你自己的原理图修改引脚约束在xdc文件中修改即可 3纯FPGA移植到Zynq需要在工程中添加zynq软核
6、上板调试验证并演示
准备工作
因为我们的输出接口是SFP光口所以还需要准备一个SFP光口转网口的模块连接后如下图 然后将你的电脑IP地址改为和代码里规定的IP一致当然代码里的IP是可以任意设置的但代码里的IP修改后电脑端的IP也要跟着改我的设置如下
ping一下
在开始测试前我们先ping一下测试UDP是否连通如下
静态演示
ov5640摄像头1280x720输入UDP网络传输QT上位机显示如下 动态彩条1280x720输入UDP网络传输QT上位机显示如下
动态演示
动态视频演示如下 FPGA-SFP-UDP-1G-OV5640 7、福利工程源码获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下