跳转到主要内容

【工程师分享】ZCU106在PLDDR实现超低延时编码

作者:付汉杰,<a href="mailto:hankf@xilinx.com">hankf@xilinx.com</a&gt;,文章转载自:<a id="link_3" href="https://forums.xilinx.com/t5/%E5%B5%8C%E5%85%A5%E5%BC%8F-%E5%B7%A5%E5%8…;

Xilinx提供超低延时编解码方案,在ZCU106单板上可以验证。文档<a href="https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1010368999/Zynq+U…; target="_blank" rel="noopener nofollow noreferrer">MPSoC VCU TRD 2020.2 Low Latency XV20</a> 提供了详细命令。

缺省情况下,编码使用的是PS DDR。如果PS DDR已经被其它应用占用,也可以让编码使用的PL DDR。在VCU TRD 2020.2的例子zcu106_llp2_xv20基础上,做如下更改,可以实现使用PL DDR编码。

<strong>1. 硬件连接</strong>

和编码访问的DDR相关的硬件连接有下列AXI Master端口。

1. HDMI_in axi_m port 0
2. HDMI_in axi_m port 1
3. HDMI_in axi_m port 2
4. HDMI_in axi_m port 3
5. Sync IP axi_m port 0
6. Sync IP axi_m port 1
7. vcu mcu axi_m port
8. vcu enc axi_m port 0
9. vcu enc axi_m port 1

其中vcu enc axi_m port 0和vcu enc axi_m port 1连接到了Sync IP; vcu mcu axi_m port已经连接到了PS DDR和PL DDR。
对于剩下的axi_m port,都要连接到PL DDR。

下面是经过验证的修改。实际验证表明,它支持PL DDR编码。其中,蓝色的连接,是做了修改的;红色的连接,是新增的。
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100100138-195169-tu1…; alt=""></center>

修改连接后,要检查各个AXI Master的地址分配。
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100100138-195170-tu2…; alt=""></center>

<strong>2. 软件设置</strong>

在devicetree中,要保留内存,并分配给VCU编码模块、HDMI输入模块使用。
<pre>/ {
reserved-memory {
#address-cells = &lt;0x2&gt;;
#size-cells = &lt;0x2&gt;;
ranges;

plmem_multimedia: pl_dma_mem_region {
compatible = "shared-dma-pool";
no-map;
reg = &lt;0x48 0x0 0x0 0x70000000&gt;;
};
};

};

&encoder {
memory-region = &lt;&plmem_multimedia&gt;;
};

&amba_pl {

vcap_hdmi {
compatible = "xlnx,video";
dma-names = "port0";
dmas = &lt;&hdmi_input_v_frmbuf_wr_0 0&gt;;
memory-region = &lt;&plmem_multimedia&gt;;
vcap_hdmi_ports: ports {
#address-cells = &lt;1&gt;;
#size-cells = &lt;0&gt;;
vcap_hdmi_port: port@0 {
direction = "input";
reg = &lt;0&gt;;
vcap_hdmi_in: endpoint {
remote-endpoint = &lt;&vpss_scaler_out&gt;;
};
};
};
};

};

&vcap_hdmi2 {
memory-region = &lt;&plmem_multimedia&gt;;
};

&vcap_hdmi3 {
memory-region = &lt;&plmem_multimedia&gt;;
};

&vcap_hdmi4 {
memory-region = &lt;&plmem_multimedia&gt;;
};</pre>