Zynq-PS-SDK(11) 之 AXI4-Stream To Video Out

2024-01-15 22:10
文章标签 sdk stream ps video zynq axi4

本文主要是介绍Zynq-PS-SDK(11) 之 AXI4-Stream To Video Out,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、Architecture

2、Signals

3、Timings

4、General Design Guidelines


1、Architecture

前面介绍了《Zynq-PS-SDK(9) 之 VDMA》和《Zynq-PS-SDK(10) 之 VTC》,数据流和时序流;从 VDMA 出来的是 AXI-Stream 流式数据,从 VTC 出来的是像素时钟得到的 Hsync,Vsync,Hbank,Vbank等时序信号,而我们最后对应到 HDMI 的是像素和时序一起的信号,所以这里需要一个将 AXI-Stream 流式数据和 Timing 信号转为一组同步的像素+Timing信号的 IP Core,Xilinx 提供了一个叫做 AXI4-Stream To Video Out 的软核:

axi4s_vid_out

下面是 AXI4-Stream Video Out 的内部结构:

我分别使用不同颜色进行了标记,接下来我们围绕这个结构来进行分析如何使用这个 IP;

从左到右,自上而下进行分析:

1、AXI4-Stream To Video Out 第一个输入为深红色的 AXI4-Stream 数据流,我标记红色的两个通道第一个为 s_axis_tvalids_axis_tready他们用于 AXI4-Stream 和 AXI4-Stream To Video Out 的握手信号,能够起到流控作用;

2、蓝色方框内,称之为 Stream Coupler,它左边接受来自 AXI4-Stream 的图像数据,将数据存储到 ASync FIFO 中,右边将缓存的数据输入到下方黄色的同步单元;异步 FIFO 的使用,主要是因为可能输入的 AXI-4 Stream 速率可能和图像的输出速率不一致,双方时钟不同步,所以,这里可以看到,这个 ASync FIFO 的 full 信号,接到了 AXI4-Stream 的s_axis_tready 上,就是为了流控;

3、左下方的红色为 Video Clock,像素时钟,它给到 4 个模块:VTC、Output Synchronizer、Data Formatter、Async FIFO;

4、黄色的 Output Synchronizer 作为同步模块,接收来自 ASync FIFO 的数据和 SOF(Start Of Frame)、EOL(End Of Line)以及 VTC 的时序信号,同步锁定后,生成 Locked 信号;

5、Output Synchronizer 的 Locked 信号作用到绿色的 Data Formatter 模块,Data Formatter 的信号输出由 Locked 信号作为 Mux 选择信号;

官方针对数据吞吐量有一个说明:

Throughput:

The average data rates of active pixels on the Video output bus matches the average rate of active pixels in on the AXI4-Stream bus. The data throughput is dictated by the video line standard and clock rate. However, the clock rates of the input need not match the output. 

Furthermore, since the AXI4-Stream bus does not carry blank pixels, the clock rate can be lower than the video clock rate and still have sufficient bandwidth to meet the average rate requirement. Additional FIFO depth is required in order to smooth the mismatch in instantaneous rates.

Both the AXI4-Stream Clock (Faclk) and the rate of the AXI4-Stream Clock (Faclk) is limited by the overall Fmax.

我简单的翻译一下,就是:

1、输出的视频(或者说是图像)的速率是由视频相关的标准规定的,比如你 RGB888 1080p 60Hz 的分辨率,其实是可以计算出你需要的带宽的,所以在输出端的带宽是可以计算出来的,并且一定是遵循了视频标准的;

2、输入的 AXI4-Stream 数据速率没必要和输出的视频速率匹配(因为是可以支持到异步 FIFO),但是为了视频输出正常,最好是输入速率不能够太低,否则无法满足正常的视频帧的输出;

3、输入的 AXI4-Stream 速率可以比像素时钟稍微小一些,因为随着像素时钟输出的视频数据,存在消隐区,也就是说,随着像素时钟输出的并不是 100% 的显示数据,但是随着 AXI4-Stream 输入的数据,是 100% 的有效显示数据;

4、为了满足正常显示并合理的数据率(比如 1080p 60Hz),输出端速度已定,输入端需要足够的带宽,所以 AXI4-Stream 的数据率不能够太低;

 

2、Signals

这个 AXI4-Stream To Video Out 模块的输入输出如下:

这里的描述不再多说,已经非常清晰了,针对几个点,多说几句:

AXI4-Stream Data Interface Signal Descriptions
Signal Name
Direction
Width
Description
s_axis_video_tvalidInputAXI4-Stream TVALID,Active video data enable
s_axis_video_tuserInput1AXI4-Stream TUSER. Start Of Frame
s_axis_video_tlastInput1AXI4-Stream TLAST. End Of Line
s_axis_video_treadyOutput1

AXI4-Stream TREADY. Inverted FIFO full

s_axis_video_tdataInputNAXI4-Stream Data

可以看到,s_axis_video_tvalid 和 s_axis_video_tready 用于交互握手和流控;

s_axis_video_tuser 用于代表一行视频帧数据的开始,即 SOF;

s_axis_video_tlast 用于代表一行视频帧的结尾,即 EOL;

s_axis_video_tdata 是实际的视频数据,必须是 8bits 的倍数;对于非 8bits 倍数的,需要在 MSB 上使用 0 来补齐;

 

说明:

在 AXI4-Stream 协议中,USER 信号的含义是自定义,在视频通路搭建中,s_axis_video_tuser 信号用作了 SOF 信号;

SOF 针对的是一帧数据的开始;

EOL 针对的是图像每一行的末尾;

 

3、Timings

针对 SOF 和 EOL 的信号的一个例子如下:

T0:ACLK 上升沿检测到  EOL,说明某一帧的某一行完毕,Pn-1 是该行的最后一个数据;

T1:ACLK 上升沿检测到 VALID 和 READY 握手有效,开始传输该帧的下一行的第一个数据 P0;

T2:ACLK 上升沿检测到 EOL,说明该帧的某一行结束;

T3:ACLK 上升沿检测到 VALID 和 READY 握手有效,并且 SOF 有效,说这是下一帧的第一行数据;

T4:ACLK 上升沿检测到 VALID 和 READY 握手有效,并且 EOL 有效,说明这是这一帧第一行的最后一个数据;

 

4、General Design Guidelines

AXI4 Stream to Video Out 这个 IP 需要连接的是 Video Sink,也就是设备端,比如显示器等;典型的设计是,增加一个 Video Timing Controller 来提供时序,如下所示:

红色部分就是我们今天的重点:AXI4 Stream to Video Out,它接收来自左边 source 的 AXI4 Stream 数据,同时接收来自左下角的 Video Timing Controller(配置成为 generator)的时序,自生输出右边的信号;

在我们的设计中,这个 Source 后面会被设计成为 VDMA 的 AXI4 Stream 输出信号;

这里需要注意的一点是,这个时钟信号(紫色)连接到了 Source 和 AXI4 Stream to Video Out;

这个还有一个 Timing mode 的概念,可以配置为 Master 或者 Slave:

Timing Mode 的 Slave mode 是指 VTC 是时序的 Slave,由 Video Out 模块通过 clock enable 控制时序的输出。Master Mode 指 VTC 是时序的 master,不由 Video Out 控制;

 

 

参考文献:

http://xilinx.eetrend.com/d6-xilinx/blog/2018-04/12794.html

 

这篇关于Zynq-PS-SDK(11) 之 AXI4-Stream To Video Out的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/610369

相关文章

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java之并行流(Parallel Stream)使用详解

《Java之并行流(ParallelStream)使用详解》Java并行流(ParallelStream)通过多线程并行处理集合数据,利用Fork/Join框架加速计算,适用于大规模数据集和计算密集... 目录Java并行流(Parallel Stream)1. 核心概念与原理2. 创建并行流的方式3. 适