视频加静态字幕-设计与仿真
方案概述
在学习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寄存器转换底层与显示器色彩格式(后来又去掉了):

如果使能了1个及以上的叠加图层,需要注意的是,如果设置叠加图层为streaming类型,在视频流中断时会使IP卡死,所以须改用memory映射类型。
我这里IP采用硬复位,复位电平至少16个时钟周期。
设计检查与码流生成
全部连接后做设计检查,报错均为时钟错误,AXI同一总线路径需用相同时钟。

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

AXI VIP仿真
搭建好设计原理图后,用AXI VIP进行仿真,可以更好发现上板前的设计问题。
AXI VIP core可模拟ARM对AXI接口IP进行仿真,产生读写指令与响应并检查传输完整性,可作Master、Slave或传输通道来使用。

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

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

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

下面是对自己的项目进行仿真,参考示例工程。
先简化项目,仅保留axi_interconnect_0连接的v_tc:

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

运行仿真,一切OK。
多IP同时仿真
对单个v_tc仿真成功后,加入v_tpg、v_mixer。接下来对主要寄存器配置情况进行介绍,因为PS主要就是操作这些寄存器完成配置和使能的。
对v_tpg的control寄存器写0x1开启IP:

尺寸寄存器设宽高:

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

v_mixer的control置1使能IP:

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

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

问题排查
初次运行mixer无输出、tready一直拉低,因未配置背景尺寸寄存器。
补齐后,m_axis_TDATA为XXXX不定态:

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

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

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

起初怀疑是不是空闲实践设置的不合理,后来发现v_axi4s_vid_out_0复位信号未连接可能是原因。
另外手册还要求vtc时序滞后视频输入以保证fifo预填充,约4帧后才输出locked。
而原仿真中vtc超前v_mix视频信号,第一帧后vtg_ce拉低关断了vtc:

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

后面将会在实物上测试,看看能不能用显示屏正确显示测试图案。
本文来自博客园,作者:不高工程师,转载请注明原文链接:https://www.cnblogs.com/y0011/articles/23127507
浙公网安备 33010602011771号