在Digilent Nexys Video Artix-7板卡上实现HDMI I/O视频处理系统

Adam Taylor FPGA开发圈

Nexys Video多媒体音视频开发板


音视频处理,带你从入门到放肆

嵌入式视觉是当今科技最激动人心的领域之一。

关于使用Zynq SoC的嵌入式视觉应用,热心群众们说的太多,我就不赘述了。今天我们换一个新的视角,来看看如何使用纯FPGA来实现嵌入式视觉方案。

这篇文章,将带你了解如何使用Digilent Nexys Video Artix-7 FPGA多媒体音视频开发板来实现一个简单的HDMI输入/输出视频处理系统。特别是如果你是一名新手,通过本文,你会对基于FPGA的视频处理有更多基本的理解。

坦白说,Digilent Nexys Video开发板可能是市面上性价比最高的音视频处理FPGA口袋实验室了。作为一款专用于音视频处理教学以及视频和视觉应用原型开发的评估板,此板搭载了Xilinx Artix-7系列中资源最大的器件Aritx-7 XC7A200T FPGA。

今天我们就来介绍一下如何使用Nexys Video来实现一个简单的HDMI输入/输出视频处理系统。先来看下此板所集成的支持视频接收、处理和生成/输出的下列I/O和外设接口:

  • HDMI输入
  • HDMI输出
  • 显示输出端口
  • 以太网
  • UART
  • USB
  • 512MB DDRSDRAM
  • 线路输入(Line In)/麦克输入/耳机输出/线路输出(Line Out)
  • FMC

使用VHDL与RTL方法,要创建一个简单的图像处理流水线,我们需要实现如下架构:

(点击可查看大图)

监控处理器(本例中采用Xilinx Artix-7 FPGA实现的MicroBlaze软核RISC处理器)用于监控与用户接口间的通信并根据应用的要求配置图像处理流水线。在本例这个简单的架构中,HDMI输入口接收的数据从原始的并行格式的视频数据、Hsync和VSync转换为AXI Streaming(AXIS)格式。我们想要将数据转换成AXIS格式是因为Vivado提供多个使用这种数据格式的图像处理IP。如果我们使用Vivado HLS来创建我们自己的图像处理模块,那么能够支持AXIS接口也很重要。

MicroBlaze处理器需要支持如下外围设备:

  • AXI UART – 支持系统的通信和控制
  • AXI Timer – 使MicroBlaze可以实时运行事件
  • MicroBlaze调试模块 – 支持MicroBlaze的调试
  • MicroBlaze本地存储 – 连接到DLMB和ILMB(数据&指令本地存储总线)
    我们将使用存储接口生成器来创建与板上SDRAM对接的DDR接口。这个接口和SDRAM创建了一个公共的存储框架,可以访问图像处理管道以及使用AXI interconnect访问监控处理器。

创建一个简单的图像处理流水线需要使用如下IP:

  • DVI2RGB – Digilent提供的HDMI输入IP
  • RGB2DVI – Digitlent提供的HDMI输出IP
  • Video In to AXI4-Stream – 将并行视频输入转换为AXI Streaming协议(Vivado IP)
  • AXI4-Stream to Video Out – 将AXI-Stream转换为并行视频输出(Vivado IP)
  • Video Timing Controller Input – 检测输入视频流参数(Vivado IP)
  • Video Timing Controller Output – 生成输出视频流时序参数(Vivado IP)
  • Video Direct Memory Access – 支持图像写入和从DDR SDRAM读出

视频处理链的核心是VDMA,我们借助它来将图像移动到DDR内存中。


(点击可查看大图)

上图展示了IP如何将流式数据转换为读和写管道中内存映射的数据。两个VDMA通道都提供了在流式数据和内存映射数据之间转换的能力。写通道支持流到内存映射的转换而读通道提供内存映射到流的转换。

当把所有这些集中到Vivado中创建初始的基本系统,我们得到了如下架构,这是Nexys Video HDMI示例提供的。

(点击可查看大图)

如果你想对此图像处理流水线所需的软件配置做进一步的了解,我会在下一篇推送文章中做详细介绍。

©著作权归作者所有:来自51CTO博客作者mb5fd86d05a0afe的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 在Digilent Nexys Video板卡上实现HDMI I/O视频处理系统之软件配
  2. 获取input框输入值异常
  3. LSTM网络学习分享
  4. 练习2-10 计算分段函数[1] (10分)
  5. 【vue】 export、export default、import的用法和区别
  6. chrome查看网站字符集编码的方法(不需要安装charset)
  7. shell脚本之awk工具的使用
  8. centos 7中的文本处理工具sed命令的使用
  9. Dynamics 365中自定义工作流活动更新了输入输出参数后获取的方法

随机推荐

  1. 在php中get和post区别
  2. php header的作用
  3. 什么是php工厂模式
  4. php join的用法
  5. php中define的用法
  6. asp与php网站优缺点
  7. php保留两位小数的方法
  8. php构造函数的作用
  9. 排序算法—归并排序【附代码】
  10. php中include_once的意思