FDMA3.1数据缓存方案全网最细讲解,自创升级版,送3套视频和音频缓存工程源码

这篇具有很好参考价值的文章主要介绍了FDMA3.1数据缓存方案全网最细讲解,自创升级版,送3套视频和音频缓存工程源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

FDMA数据缓存方案发布也有五六年了,但真正能熟练使用的兄弟却很少,其实还是没有好的例程作为参考和同熟易懂的讲解,这里我做如下解析:
FDMA部分:这部分是米联客封装了用户接口的AXI4-FULL协议代码,我之前写过一篇文章,逐行讲解这个模块,感兴趣的兄弟可以去参考FDMA代码逐行讲解
我这里对IP做了重新封装,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
这里的AXI数据位宽并不是任意设置的,比如设置为110,这是非法的,米联客原来的IP并没有意识到这一点,也没有提示用户,所以我修改为可选项如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
根据AXI4协议,AXI4数据位宽必须与内存相映射,说人话就是必须是8的倍数;且最大只能是256;
AXI最大突发是长度:同理,AXI突发是长度也不是任意值,可选的只有1,2,4,8,32,64,128,256,米联客原来的IP并没有意识到这一点,也没有提示用户,所以我修改为可选项如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
这里是指最大值,所以直接选256;
另外:重点:拿出小本本:
AXI数据位宽与AXI突发长度必须遵循如下公式:
AXI数据位宽/8*AXI突发长度<=4096;即4k边界,当然,这里米联客依然没说;
AXI ID以及ID位宽:如果需要调用多个FDMA IP,就要用到这里,我的修改如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
最大ID位宽给到了4,即最多可同时调用16个IP,一般用不到这么多,所以这里选1;
下面看更重要的FDMA控制器:
关于FDMA控制器我之前写过文章,感兴趣的可以参考FDMA控制器
当然,同样的道理,米联客原来的IP也没有给出更细的东西,这里我来说说:
先看FDMA控制器IP:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
IP配置页面如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
下面的讲解全是干货,注意听!!!!!
SDK读使能:
一般用不到,他的作用是在SDK里读当前帧的序号等,具体取看代码吧,不懂的也可以问我;
图像场同步检测使能:
作用是检测输入视频场同步的上升沿,以触发FDMA传输,如果缓存视频肯定要使能,如果缓存其他类型数据看情况,比如后面的缓存音频的工程就没有使能该信号;
AXI读写数据使能:
即读和写可选择,这里应该表扬米联客,如果你的工程不需要用到读,那你就只使能写,这样可以节约fpga资源;
AXI数据位宽:
必须与FDMA的配置保持一致;这里我将IP做了修改,该参数修改为可选项有限,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3

读写FIFO缓存深度:
IP内部有用到FIFO,这里就是FIFO的数据深度设置,具体为什么要用FIFO以及用FIFO的作用请看我之前的文章FDMA控制器这里我将IP做了修改,该参数修改为可选项有限,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
如果数据量小的话可以选1024,数据量大的话可以选4096,具体情况具体选择吧,不懂的也可以联系问我;
读写数据的起始地址:
这里指的是数据缓存的首地址,IP内部根据一帧数据的完成对起始地址进行了累加,具体看代码吧,也可以参考我之前的文章FDMA控制器
读写数据“偏移”地址:
这里的偏移打了引号,因为他不是正真的偏移,IP内部代码关于读写地址部分如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
其中fdma_wbufn就是根据一帧数据的完成对起始地址进行了累加,W_addr就是根据突发数据进行的所谓偏移地址的增加,可能讲不清楚,具体可以联系问我吧;
读写缓存帧数:
这里很好理解,就是存几帧,这里我将IP做了修改,该参数修改为可选项有限,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
输入和输出数据位宽:
这里选32是为了和FIFO深度和AXI数据位宽进行适配;
FDMA单次突发的分传次数:
这里是为了解决4K边界的问题,具体参考我之前的文章FDMA控制器这里我将IP做了修改,该参数修改为可选项有限,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
读写单次突发的长度和次数:
因为DFMA控制器直接略过了AXI突发长度的问题,用FDMA单次突发的分传次数完美取代了,所以读写单次突发的长度可以由用户自定义,无需再考虑4K对齐,以1080P视频为例,完全可以设置单次直接突发为一行数据,即1920,突发次数为1080行,一次类推;
单次突发跨度:
比如我想写如720p视频,却以1080P视频时序读出来,这里就有用了,跨度直接设置为1280,后面的工程由讲解;
米联客还配套给出了一个地址切换的IP,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
这个ip米联客干脆就没有介绍,可能觉得太简单了,我这里解析如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
可以看到,这个IP其实还是有点绕的,使用方法官方也没有说,这里我给的注释应该能看得懂吧,这里我将IP做了修改,该参数修改为可选项有限,如下:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
工程讲解:
工程1:
开发板:Kintex7开发板;
开发环境:vivado2019.1;
输入:HDMI视频1080P,IT6802解码;
输出:HDMI视频1080P;
BD工程:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
IP配置:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
代码架构:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
工程2:
开发板:Kintex7开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头720P;
输出:HDMI视频1080P;
BD工程:
同工程1;
IP配置:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
这里是720P输入1080P输出,所以跨度这里的设置不一样,要好好理解,不懂得联系问我吧;
代码架构:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
工程3:
开发板:Kintex7开发板;
开发环境:vivado2019.1;
输入:音频数据,WM8731解码;
输出:音频数据,WM8731编码;
BD工程:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
IP配置:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
这里说明一下:
音频串并转换后一个音频点是32为数据,采样率48K,双通道,所以每秒的数据量就是:
48000*2=96000;
IP里的单次突发读写长度设置为960,实际就是单次读写10ms的音频;
IP里的突发读写次数设置为1000,实际就是一共读写10s的音频;
具体可参考我之前写得文章音频缓存
代码架构:
fdma代码逐行讲解,菜鸟FPGA图像处理专题,菜鸟FPGA AD/DA采集转换专题,fpga开发,图像处理,AXI,verilog,DDR3
输出结果:工程1如下:

工程1输出效果


工程2如下:

工程2输出效果文章来源地址https://www.toymoban.com/news/detail-717043.html


福利:送以上3套工程及其源码,联系我吧兄弟!!!!!!

到了这里,关于FDMA3.1数据缓存方案全网最细讲解,自创升级版,送3套视频和音频缓存工程源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】Docker+Nacos+MySQL,Docker安装启动Nacos(详细讲解、全网最细),手把手教你Docker搭建nacos单机版

    点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文描述了如何用Docker安装Nacos的单机版,含单机非持久化版本和单机持久化版本 Nacos作为微服务的配置中心,无论是在开发测试和生产中,用户更希望Nacos能保存用户的配置

    2024年02月12日
    浏览(49)
  • FPGA GTP全网最细讲解 aurora 8b/10b协议OV5640摄像头视频传输 提供2套工程源码和技术支持

    没玩过GT资源都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端

    2024年02月09日
    浏览(52)
  • 全网最细RocketMQ源码四:消息存储

    看完上一章之后,有没有很好奇,生产者发送完消息之后,server是如何存储,这一章节就来学习 SendMessageProcessor.processRequest 实际真正的负责存储就是DefaultMessageStore, 不过在讲述DefaultMessageStore的时候,我们是自底往上学,因为DefaultMessageStore比较复杂,从顶往下学容易学乱。先

    2024年01月16日
    浏览(42)
  • 全网最细JAVA窗口背景图片设置

     一.通过重写paint()方法设置背景图片 1.首先建立保存图片的文件夹,如下图所示建立文件夹; 2.在左侧找到你所建立的文件夹名称,然后把需要设置的背景图片复制进去  3.建立窗口,重写paint方法,绘制图片 4.建立工具类 5.效果如图所示 二.通过Jlabel()文本,设置背景图片

    2024年02月11日
    浏览(50)
  • Kali Linux全网最细安装教程

    ① 官网地址:https://www.kali.org/get-kali/#kali-virtual-machines ② 点击Bare Metal,下载ISO镜像 ③也可以继续往下翻,选择下载官方压缩包 ④ 也可以下载我的包 ISO镜像: 链接:https://pan.baidu.com/s/1WwP_dn8yqz8OwOdd-0pHhg?pwd=oqpa 提取码:oqpa VMWare版本Kali的7z压缩包 链接:https://pan.baidu.com/s/1f

    2024年02月03日
    浏览(36)
  • OpenCV安装教程(全网最细,小白直接上手!!!)

    OpenCV是Python、Ruby、MATLAB的接口,OpenCV在计算机视觉的发展中发挥了重要的作用,使成千上万的人能够在视觉上做更多的工作。由于在VSLAM技术研究过程中,经常会涉及OpenCV不同版本在ubuntu系统下的安装。文章简单总结了一下两个版本的OpenCV在ubuntu系统下的步骤,对小白超级友

    2024年02月03日
    浏览(47)
  • Vue3全网最细介绍使用

    1.性能的提升 打包大小减少41% 初次渲染快55%, 更新渲染快133% 内存减少54% 2.源码的升级 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现和Tree-Shaking 3.拥有TypeScript Vue3可以更好的支持TypeScript 4.新的特新 Composition API(组合API) – Setup配置 – ref与reactive – watch与watchEffect

    2024年02月13日
    浏览(22)
  • 动态规划——0/1背包问题(全网最细+图文解析)

    ✨动态规划——0/1背包问题(全网最细+图文解析) 作者介绍: 🎓作者 :青花瓷✨ 👀作者的Gitee :代码仓库 📌系列文章推荐: ✨1.数据结构与算法—算法篇之动态规划(一) ✨2.【Java刷题特辑第一章】——【点进来花两把游戏的时间学习晚上睡觉都踏实了】 ✨3.【Java刷题特辑第二章

    2024年02月03日
    浏览(47)
  • RocketMQ的下载与安装(全网最细保姆级别教学)

    下载地址 下载地址 推荐使用官网下载  Windows/Linux 64位系统  JDK1.8(64位)  源码安装需要安装Maven 3.2.x 要是需要GPT Plus账号的小伙伴可以联系我~ 下载地址 变量名:ROCKETMQ_HOME 变量值:MQ解压路径MQ文件夹名(bin目录的上一级即可) 首先启动NameServer 在bin目录下执行cmd命令呼

    2024年02月12日
    浏览(49)
  • Ubuntu20.04配置深度学习环境(全网最细最全)

    目录 一、NVIDIA显卡驱动安装 二、安装CUDA 三、安装cuDNN 四、安装Anaconda 五、Anaconda的简单使用 5.1 管理环境 5.2 管理包(package) 5.3 conda install 与 pip install 5.4 conda configuration        默认你已经完成Ubuntu20.04的安装,如果没安装的话可以参考其他博客,我的显卡是GTX1660Ti     

    2024年04月09日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包