视频加静态字幕-设计与仿真

方案概述

在学习KR260开发板使用过程中做的一个小练习:在PL侧搭建design block,通过PS侧简单配置,实现视频画面叠加静态logo。本文主要对设计和仿真过程进行记录,用仿真代替实物PS软件上要实现的功能,以验证PL侧是否能够正常运行。

Video Mixer IP核

Video Mixer支持最多17个图层混合及1个logo层,动态字幕用图层、静态字幕用logo层。

接口包含ap_clk(上升沿有效)、ap_rst_n(低电平有效同步复位)、interrupt;IP提供全局、CSC参数、图层、logo层寄存器,并能够自动完成YUV到RGB转换(默认BT.601)。

IP配置如下图所示,此处仅用一层输入配合logo层测试静态字幕叠加,并开启CSC寄存器转换底层与显示器色彩格式(后来又去掉了):

image

如果使能了1个及以上的叠加图层,需要注意的是,如果设置叠加图层为streaming类型,在视频流中断时会使IP卡死,所以须改用memory映射类型。

我这里IP采用硬复位,复位电平至少16个时钟周期。

设计检查与码流生成

全部连接后做设计检查,报错均为时钟错误,AXI同一总线路径需用相同时钟。

image

生成码流须先生成HDL文件;比特流在实现阶段报错,但最终生成成功,可能为路径问题。

image

AXI VIP仿真

搭建好设计原理图后,用AXI VIP进行仿真,可以更好发现上板前的设计问题。

AXI VIP core可模拟ARM对AXI接口IP进行仿真,产生读写指令与响应并检查传输完整性,可作Master、Slave或传输通道来使用。

image

据此创建testbench,Master VIP的仿真原理如下:

image

仿真过程分为事务创建、配置、发送三步,一行AXI4LITE_WRITE_BURST即可完成一次AXI操作。可以先运行示例工程,方便理解流程(含3个IP,覆盖全部VIP类型与事务模式),示例工程的硬件原理图如下所示:

image

仿真过程

对参考例程仿真时vivado提示“系统无法访问此文件”,增加独立环境变量后可以解决,仿真正常启动。

image

下面是对自己的项目进行仿真,参考示例工程。

先简化项目,仅保留axi_interconnect_0连接的v_tc:

image

添加master VIP代替MPSoc并与S00_AXI连接、分配地址空间:

image

运行仿真,一切OK。

多IP同时仿真

对单个v_tc仿真成功后,加入v_tpg、v_mixer。接下来对主要寄存器配置情况进行介绍,因为PS主要就是操作这些寄存器完成配置和使能的。

对v_tpg的control寄存器写0x1开启IP:

image

尺寸寄存器设宽高:

image

背景寄存器写0x9以生成彩条:

image

v_mixer的control置1使能IP:

image

图像层寄存器置0x000001使能主层:

image

尺寸寄存器必须配置,否则无法输出:

image

 

问题排查

初次运行mixer无输出、tready一直拉低,因未配置背景尺寸寄存器。

补齐后,m_axis_TDATA为XXXX不定态:

image

追溯至mix内部,mac_muladd的in1为XX,根源是logo RAM未初始化:

image

在头文件中增加logo RAM初始化写操作后,mix输出与输入tdata一致,说明视频数据通过mix输出成功了:

image

加入axi4_stream_to_video_out IP

添加该IP后,v_tc默认VSync Start与VSync End相同,却无VSync Out输出、dp信号也无翻转。我的v_tc配置:

image

起初怀疑是不是空闲实践设置的不合理,后来发现v_axi4s_vid_out_0复位信号未连接可能是原因。

另外手册还要求vtc时序滞后视频输入以保证fifo预填充,约4帧后才输出locked。

而原仿真中vtc超前v_mix视频信号,第一帧后vtg_ce拉低关断了vtc:

image

修改激励使vtc滞后视频输出使能128个时钟(约1.8µs),经过连续5帧,完成对齐,locked拉高,第6帧终于开始输出vid视频信号:

image

后面将会在实物上测试,看看能不能用显示屏正确显示测试图案。

posted @ 2026-09-26 16:47  不高工程师  阅读(9)  评论(0)    收藏  举报