phpcms网站后台,东莞专业网站建站设计,室内装饰设计效果图,平顶山做网站哪家好目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案紫光同创FPGA精简版UDP视频传输方案 3、设计思路框架OV5640摄像头配置及采集数据缓冲FIFOUDP协议栈详解MAC层发送MAC发送模式MAC层接收ARP发送ARP接收ARP缓… 目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案紫光同创FPGA精简版UDP视频传输方案 3、设计思路框架OV5640摄像头配置及采集数据缓冲FIFOUDP协议栈详解MAC层发送MAC发送模式MAC层接收ARP发送ARP接收ARP缓存IP层发送IP发送模式IP层接收UDP发送UDP接收ICMP应答 (ping)CRC校验RGMII转GMII模块IP地址、端口号修改 PHYQT上位机 4、PDS工程1OV7725输入YT8511版本5、PDS工程2OV5640输入RTL8211版本6、上板调试验证并演示准备工作动态ARP测试ping测试图像接收显示测试 7、福利工程代码的获取 紫光同创FPGA实现UDP协议栈网络视频传输带录像和抓拍功能基于YT8511和RTL8211提供2套PDS工程源码和技术支持 1、前言
“苟利国家生死以岂因祸福避趋之”大洋彼岸的我优秀地下档员敏锐地洞察到祖国的短板在于高精尖半导体的制造领域于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心懂先生站在高略高度和长远角度谋划宁愿背当代一世之骂名也要为祖国千秋万世谋2018年7月懂先生正式打响毛衣战随后又使出恰勃纸战术旨在为祖国先进制程半导体领域做出自主可控的战略推动在此请收下我一声谢谢啊
2019年初我刚出道时还是Xilinx遥遥领先的时代(现在貌似也是)那时的国产FPGA还处于辣鸡段位国产FPGA仰望Xilinx情不自禁道你以为躲在这里就找不到你吗没用的你那样拉轰的男人无论在哪里都像黑夜里的萤火虫那样的鲜明、那样的出众你那忧郁的眼神稀嘘的胡渣子神乎其技的刀法还有那杯Dry martine都深深的迷住了我。。。然而才短短4年如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面面对此情此景不得不吟唱老人家的诗句魏武挥鞭东临碣石有遗篇萧瑟秋风今又是换了人间。。。 言归正传目前对于国产FPGA的共识有以下几点 1性价比高与同级别国外大厂芯片相比价格相差几倍甚至十几倍 2自主可控国产FPGA拥有完整自主知识产权的产业链从芯片到相关EDA工具 3响应迅速FAE技术支持比较到位及时解决开发过程中遇到的问题毕竟中文数据手册。。 4采购方便产业链自主可控采购便捷
没玩过UDP或TCP都不好意思说自己玩儿过FPGA这是CSDN某大佬说过的一句话鄙人深信不疑。。。本文使用紫光同创的PGL22G-6MBG324 FPGA实现UDP协议栈络视频传输该协议栈是带ping功能的采用纯verilog代码实现具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少、ping等功能FPGA采集外部OV5640摄像头数据OV5640摄像头配置为jpeg输出模式随后将组包的视频数据放入FIFO中做跨时钟和数据位宽转换然后视频数据送入UDP协议栈进行UDP协议的网络数据包组包最后通过YT8511和RTL8211做硬件PHY后通过RJ45网口的网线发送出去电脑端打开上位机即可接收并显示FPGA发过来的视频
本设计提供2套Pango Design Suite 2021.4版本的工程源码2套工程的区别在于使用网络PHY是YT8511或者RTL82112套工程详情如下 | PDS工程 输入视频 摄像头配置模式 网络PHY 输入输出分辨率|
| 第一套PDS工程 OV5640摄像头 jpeg输出 YT8511 800X600 |
| 第二套PDS工程 OV5640摄像头 jpeg输出 RTL8211 800X600 |这里需要注意以下几点 1视频没有进行DDR的缓存仅做FIFO级别的缓存所以要求输入视频的像素时钟必须低于125M因为GMII的时钟是125M所高于125M则会出现FIFO堵死的情况 2目前QT上位机只是个测试版本仅持支800X600分辨率的输入图像所以输入视频必须是800X600若不是请缩放到此分辨率QT上位机只提供上位机可执行程序不提供源码
本博客详细描述了紫光同创FPGA实现UDP协议栈网络视频传输的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做学习提升可应用于医疗、军工等行业的高速接口或图像处理领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等)若大佬们觉得有所冒犯请私信批评教育基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
2、相关方案推荐
我这里已有的以太网方案
目前我这里有大量UDP协议的工程源码包括UDP数据回环视频传输AD采集传输等也有TCP协议的工程还有RDMA的NIC 10G 25G 100G网卡工程源码对网络通信有需求的兄弟可以去看看直接点击前往 其中千兆TCP协议的工程博客如下 直接点击前往
紫光同创FPGA精简版UDP方案
该方案同样使用紫光同创FPGA实现只不过是精简版UDP具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少等功能但不具备ping功能工程博客如下 直接点击前往
紫光同创FPGA带ping功能UDP方案
该方案同样使用紫光同创FPGA实现具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少等功能具备ping功能工程博客如下 直接点击前往
紫光同创FPGA精简版UDP视频传输方案
该方采用精简版UDP实现视频采集UDP网络传输与本工程的不同点在于该方案的摄像头配置为RGB565数据格式只能视频传输不具备带录像和抓拍功能QT上位机也不提供源码工程博客如下 直接点击前往
3、设计思路框架
本文使用紫光同创的PGL22G-6MBG324 FPGA实现UDP协议栈络视频传输该协议栈是带ping功能的采用纯verilog代码实现具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少、ping等功能FPGA采集外部OV5640摄像头数据OV5640摄像头配置为jpeg输出模式随后将组包的视频数据放入FIFO中做跨时钟和数据位宽转换然后视频数据送入UDP协议栈进行UDP协议的网络数据包组包最后通过YT8511和RTL8211做硬件PHY后通过RJ45网口的网线发送出去电脑端打开上位机即可接收并显示FPGA发过来的视频
本设计提供2套Pango Design Suite 2021.4版本的工程源码2套工程的区别在于使用网络PHY是YT8511或者RTL82114套工程详情如下 | PDS工程 输入视频 摄像头配置模式 网络PHY 输入输出分辨率|
| 第一套PDS工程 OV5640摄像头 jpeg输出 YT8511 800X600 |
| 第二套PDS工程 OV5640摄像头 jpeg输出 RTL8211 800X600 |这里需要注意以下几点 1视频没有进行DDR的缓存仅做FIFO级别的缓存所以要求输入视频的像素时钟必须低于125M因为GMII的时钟是125M所高于125M则会出现FIFO堵死的情况 2目前QT上位机只是个测试版本仅持支800X600分辨率的输入图像所以输入视频必须是800X600若不是请缩放到此分辨率QT上位机只提供上位机可执行程序不提供源码 工程设计框图如下
OV5640摄像头配置及采集
OV5640摄像头需要i2c配置才能使用 本设计将OV5640摄像头配置为jpeg输出模式数据位宽为8位分辨率为为800x600分辨率代码位置如下
数据缓冲FIFO
数据缓冲FIFO实现跨时钟域功能摄像头时钟为50MUDP侧时钟为125M
UDP协议栈详解
MAC层发送
发送部分中 mac_tx.v 为 MAC 层发送模块首先在 SEND_START 状态等待 mac_tx_ready 信号如果有效表明 IP 或 ARP 的数据已经准备好可以开始发送。再进入发送前导码状态结 束时发送 mac_data_req请求 IP 或 ARP 的数据之后进入发送数据状态最后进入发送 CRC 状 态。在发送数据过程中需要同时进行 CRC 校验。 MAC层发送顶层接口如下
MAC发送模式
工程中的 mac_tx_mode.v 为发送模式选择根据发送模式是 IP 或 ARP 选择相应的信号与数据。 MAC发送模式顶层接口如下
MAC层接收
在接收部分其中 mac_rx.v 为 mac 层接收文件首先在 IDLE 状态下需要判断 rx_dv 信号是否为高在 REC_PREAMBLE 前导码状态下接收前导码。之后进入接收 MAC 头部状态即目的MAC 地址源 MAC 地址类型将它们缓存起来并在此状态判断前导码是否正确错误则进入 REC_ERROR 错误状态在 REC_IDENTIFY 状态判断类型是 IP8’h0800或 ARP(8’h0806)。然后进入接收数据状态将数据传送到 IP 或 ARP 模块等待 IP 或 ARP 数据接收完毕再接收 CRC 数据。并在接收数据的过程中对接收的数据进行 CRC 处理将结果与接收到的 CRC 数据进行对比判断数据是否接收正确正确则结束错误则进入 ERROR 状态。 MAC层接收顶层接口如下
ARP发送
发送部分中arp_tx.v 为 ARP 发送模块 在 IDLE 状态下等待 ARP 发送请求或 ARP 应答请求 信号之后进入请求或应答等待状态并通知 MAC 层数据已经准备好等待 mac_data_req 信 号之后进入请求或应答数据发送状态。由于数据不足 46 字节需要补全 46 字节发送。 ARP发送顶层接口如下
ARP接收
工程中的 arp_rx.v 为 ARP 接收模块实现 ARP 数据接收在 IDLE 状态下接收到从 MAC 层发来的 arp_rx_req 信号进入 ARP 接收状态在此状态下提取出目的 MAC 地址源 MAC 地址 目的 IP 地址源 IP 地址并判断操作码 OP 是请求还是应答。如果是请求则判断接收到的目的 IP 地址是否为本机地址如果是发送应答请求信号 arp_reply_req如果不是则忽略。如果 OP 是应答则判断接收到的目的 IP 地址及目的 MAC 地址是否与本机一致如果是则拉高arp_found 信号表明接收到了对方的地址。并将对方的 MAC 地址及 IP 地址存入 ARP 缓存中。 ARP接收顶层接口如下
ARP缓存
在工程中arp_cache.v 为 arp 缓存模块将接收到的其他设备 IP 地址和 MAC 地址缓存在发送数据之前查询目的地址是否存在如果不存在则向目的地址发送 ARP 请求等待应答。在设计文件中只做了一个缓存空间如果有需要可扩展。 ARP缓存顶层接口如下
IP层发送
在发送部分ip_tx.v 为 IP 层发送模块在 IDLE 状态下如果 ip_tx_req 有效也就是 UDP 或 ICMP 发送请求信号进入等待发送数据长度状态之后进入产生校验和状态校验和是将 IP 首部所有数据以 16 位相加最后将进位再与低 16 位相加直到进入为 0再将低 16 位取反得出校验和结果。此程序中校验和以树型加法结构并插入流水线能有效降低加法部分的延迟但缺点是会消耗较多逻辑资源。如下图 ABCD 四个输入A 与 B 相加结果为 EC 与 D 相加结果为 F再将 E 与 F 相加结果为 G在每个相加结果之后都有寄存器。 设计框图如下 在生成校验和之后等待 MAC 层数据请求开始发送数据并在即将结束发送 IP 首部后请求 UDP 或 ICMP 数据。等发送完进入 IDLE 状态。 IP层发送顶层接口如下
IP发送模式
工程中的 ip_tx_mode.v 为发送模式选择根据发送模式是 UDP 或 ICMP 选择相应的信号与数据。 IP发送模式顶层接口如下
IP层接收
在工程中ip_rx 为 IP 层接收模块实现 IP 层的数据接收信息提取并进行校验和检查。 首先在 IDLE 状态下判断从 MAC 层发过来的 ip_rx_req 信号进入接收 IP 首部状态先在 REC_HEADER0 提取出首部长度及 IP 总长度进入 REC_HEADER1 状态在此状态提取出目的 IP 地址源 IP 地址协议类型根据协议类型发送 udp_rx_req 或 icmp_rx_req。在接收首部的同时进行校验和的检查将首部接收的所有数据相加存入 32 位寄存器再将高 16 位与低 16 位相加直到高 16 位为 0 再将低 16 位取反判断其是否为 0如果是 0则检验正确否则错误进入IDLE 状态丢弃此帧数据等待下次接收。 IP层接收顶层接口如下
UDP发送
发送部分中udp_tx.v 为 UDP 发送模块第一步将数据写入 UDP 发送 RAM同时计算校验和第二步将 RAM 中数据发送出去。UDP 校验和与 IP 校验和计算方法一致。在计算时需要将伪首部加上伪首部包括目的 IP 地址源 IP 地址网络类型UDP 数据长度。 UDP发送顶层接口如下
UDP接收
在工程中udp_rx.v 为 UDP 接收模块在此模块首先接收 UDP 首部再接收数据部分并将数据部分存入 RAM 中在接收的同时进行 UDP 校验和检查如果 UDP 数据是奇数个字节在计算校验和时在最后一个字节后加上 8’h00并进行校验和计算。校验方法与 IP 校验和一样如果校验正确将拉高 udp_rec_data_valid 信号表明接收的 UDP 数据有效否则无效等待下次接收。 UDP接收顶层接口如下
ICMP应答 (ping)
在工程中icmp_reply.v 实现 ping 功能首先接收其他设备发过来的 icmp 数据判断类型是否是回送请求ECHO REQUEST如果是将数据存入 RAM并计算校验和判断校验和是否正确如果正确则进入发送状态将数据发送出去。 ICMP应答 (ping)顶层接口如下
CRC校验
一个 IP 数据包的 CRC32 校验是在目标 MAC 地址开始计算的一直计算到一个包的最后一个数据为止。以太网的 CRC32 的 verilog 的算法和多项式可以在以下网站中直接生成 http://www.easics.com/webtools/crctool
RGMII转GMII模块
util_gmii_to_rgmii.v 文件是将 RGMII 与 GMII 转换提取出控制信号与数据信号。与 PHY 连接是 RGMII 接口。 RGMII 接口是 GMII 接口的简化版在时钟的上升沿及下降沿都采样数据上升沿发送 TXD[3:0]/RXD[3:0]下降沿发送 TXD[7:4]/RXD[7:4]TX_EN 传送 TX_EN上升沿和 TX_ER下降沿两种信息RX_DV 传送 RX_DV上升沿和 RX_ER下降沿两种信息。 RGMII转GMII模块设计框图如下
IP地址、端口号修改
UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改通过顶层参数修改位置如下 由于QT上位机已将IP地址写死所以IP地址配置必须与代码里保持一致否则无法通信
PHY
本设计提供2套Pango Design Suite 2021.4版本的工程源码2套工程的区别在于使用网络PHY是YT8511或者RTL8211两者均工作于延时模式提供YT8511和RTL8211的硬件设计原理图
QT上位机
1目前QT上位机只是个测试版本支持支800x600分辨率的输入图像所以输入视频必须是800x600若不是请缩放到此分辨率 2目前QT上位机只是个测试版本不是很稳定若有时闪退或者无图像请多次关闭后重新打开QT上位机只提供上位机可执行程序不提供源码
4、PDS工程1OV7725输入YT8511版本
开发板FPGA型号紫光同创–PGL22G-6MBG324 开发环境Pango Design Suite 2021.4 输入OV5640分辨率为800x600 输出网口 网络PHYYT8511延时模式 工程作用紫光同创FPGA实现UDP协议栈网络视频传输 工程代码架构如下 工程的资源消耗如下 工程已经综合编译完成如下
5、PDS工程2OV5640输入RTL8211版本
开发板FPGA型号紫光同创–PGL22G-6MBG324 开发环境Pango Design Suite 2021.4 输入OV5640分辨率为800x600 输出网口 网络PHYRTL8211延时模式 工程作用紫光同创FPGA实现UDP协议栈网络视频传输 工程详情参考第4章节
6、上板调试验证并演示
准备工作
连接开发板 以PDS工程1–YT8511版本工程为例进行上板调试 修改本地电脑端IP地址为如下 然后下载bit致开发板即可开始测试
动态ARP测试
打开CDM做如下操作 可以看到PC已经识别并记录了FPGA网卡的ARP信息并标记为动态
ping测试
打开CDM做如下操作 单次ping还不够直接上连续ping如下
图像接收显示测试
打开QT上位机OV5640输入静态演示如下 鼠标指针停留在QT上位机区域按住鼠标右键不放当出现小手掌图标时表示此时已开始同步视频录制和图片抓拍视频录制和图片抓拍保存在电脑本地的如下文件夹里 打开QT上位机OV5640输入动态演示如下 紫光同创FPFA-UDP-OV5640 7、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下