PYNQ-Z2 HDMI用法- 4:视频处理无缝开关
扫描二维码
随时随地手机看文章
这篇文章增加了Sobel过滤器的开关,确保屏幕保持稳定,没有停电。
正如标题所述,这一次我们的目标是在我们之前建立的设计基础上实现无缝的视频处理过渡。
这篇文章还需要先阅读前面的部分,以便更容易实现。
Vivado
块设计主要是基于前面的设计。由于早期的视频测试模式发生器(TPG)仅用作旁路,因此我们可以用axis4流广播器替换它。
AXI4-流广播器是一个IP核心,它将输入AXI4数据流复制到多个输出通道,从而允许同时分发数据。这使得并行处理应用程序,如视频处理和通信系统。
但是,请注意,当从axi4流广播器输出时,它必须连接到axi4流数据FIFO;否则,不输出任何数据。这主要是因为后续IP需要等待所有接口断言tvalid,而S00接口不是这种情况。欲了解更多详细信息,请参阅赛灵思的官方解释。
对于axis4流数据FIFO复位,我们选择在Vitis中使用GPIO来自定义何时复位。
因此,我们现在有两个相同的HDMI输入源。一个输入通过索贝尔滤波器处理,而另一个作为旁路直接通过。这些信号中的每一个都由它自己的VDMA进行缓冲和同步处理。
从各个vdma的输出,我们可以连接一个AXI4-stream开关或一个AXI4-stream合并器来实现源切换。使用axis4 -stream开关将完全切换到不同的源,这将在转换期间导致短暂的中断。相比之下,AXI4-stream合并器通过tuser信号对齐不同的信号,然后将它们合并(例如,将24位tdata和24位tdata合并为48位tdata)。由于信号被组合成一个单一的源——选择tdata[47:24]或tdata[23:0]作为输出——转换发生时不会停电。
下面是AXI4-Stream接口中的一些关键信号:
•TDATA:携带主数据负载。
•TVALID:表示TDATA上的数据是有效的,可以传输。
•trready:表示下游组件准备好接收数据。
•TKEEP:标记TDATA的哪些字节通道是有效的,对于不是全宽的数据流很有用。
•TLAST:表示数据包或帧的最后一个数据字。
•TUSER:提供额外的用户定义边带信息,通常用于对齐或元数据目的。
因此,您可以看到这些信号之间的关系,如下面的波形所示。
如前所述,由于确认的输出是tdata[47:24]或tdata[23:0],我们可以编写一个简单的RTL代码IP来确定使用哪一个。
首先,定义输入和输出。
•为了对齐来自不同源的tuser信号,AXI4-Stream Combiner将它们组合成一个2位信号。只有当两个位都设置为1时,我们才能可靠地确定输出数据。
•开关信号由PYNQ-Z2板上的物理开关控制,通过GPIO实现。
因此,只有当开关模式被确认并且来自不同源的tuser信号被对齐时,才确定当前模式。
编写的RTL代码可以直接拖到块设计中以形成IP。
最后,连接AXI4-Stream子集转换器,形成一个适当的AXI4-Stream,然后连接AXI4-Stream Data FIFO,以确保正确输出tvalid、tuser和tready等信号。
对于PYNQ-Z2上的物理开关与通过GPIO控制信号源的关系,如下图所示,首先从GPIO通道1读取物理开关的值。然后,该值通过GPIO通道2输出到自定义IP。
将物理交换机引脚配置添加到XDC后,整个模块设计就完成了。
Vitis
要构建新的平台和应用程序,或在现有平台上更新XSA,您可以参考前面的帖子并按照以下方式更新代码:
需要注意的一点是,你必须在for循环中包含以下两行;否则,只输出第一帧。
结果
本文编译自hackster.io