xilinx zcu106 vcu demo

北城以北 提交于 2020-08-10 02:23:39

board:zcu106

tool: vivado 2019.2   vitis 2019.2   petalinux 2019.2

doc:PG252 UG1209

ref:http://www.zynqnotes.com/a-simple-vcu-design

ref:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/176783395/Zynq+UltraScale+MPSoC+VCU+TRD+2019.2

zcu106_hdmitx

想demo一个简单的例子,编解码SD卡上的数据,在PC上验证是否成功

 

  • 逻辑设计:

vivado 2019.2

  1. 新建工程(采用zcu106模板)
  2. 添加PS:ZYNQ UltraScale+ MPSoC (Run Block Automation),可以将zcu106默认的一些器件都自动配置好,这一步不要忘
  3. 添加VCU:ZYNQ UltraScale+ VCU (Run Block Automation)

PG252 Ch12 Design Flow Steps (P149)可以大概参考一下,可是照着做好像不行。

 

VCU有6个AXI接口

S_AXI_LITE:APU主,VCU从,用于APU访问配置VCU寄存器

M_AXI_ENC0,M_AXI_ENC1,M_AXI_DEC0,M_AXI_DEC1,M_AXI_MCU(32bit 其余128bit):VCU主,system memory从,VCU从memory取video数据和MCU软件

还有vcu_resetn 复位 vcu_host_interrupt 中断 还有AXI要连接一个时钟信号,已经整个vcu有一个参考时钟 pll_ref_clk

上面这些对外管脚都要连接到APU上。

   

  4.配置 Zynq UltraScale+ MPSoC

使能 AXI slave interfaces, clocking, 和PL-PS interrupt 

 

5.用connection automation 连接 S_AXI_LITE interface of VCU IP to the M_AXI_HPM0_LPD interface.

会自动加入processor system reset和AXI interconnect

6.手动连接AXI,中断,复位和时钟等信号

        

 

 

 复位和时钟参考zcu106_hdmitx,复位最开始采用PG252方式,用了一个constant,可以生成位流,但是启动kernel时候会报错(reset没有定义之类)

所以参考zcu106_hdmitx,从EMIO拉了reset到VCU,slice配置见下图

 

 加入clocking wizard,配置如下图:

参考zcu106硬件原理图zcu106-schematic-xtp469

 

 

 

输入时钟配置为差分,300MHz。

输出时钟clk_out1--33.33MHz,连接至VCUpll_ref_clk,clk_out2--200MHz,连接至mspoc和VCU的AXI的aclk。

完整连线见下图:

7.自动分配地址(点击红框中的自动分配地址)

对于PS端,可访问vcu的寄存器,地址为0x00_A000_0000 - 0x00_A000_FFFF

VCU做为主,访问DDR,可访问空间为

0x000_0000_0000 - 0x000_7FFF_FFFF

0x008_0000_0000 - 0x00F_FFFF_FFFF

还有OCM QSPI,这里都是自动分配好了,我还要花点时间理解一下。(可以看一下https://www.eefocus.com/antaur/blog/17-08/423773_0818c.html

8.Validate Block Design

9.Generate Output Products   生成Diagram Block Design的HDL源文件以及相应端口癿约束文件。

 10.Create HDL Wrapper  

 11.添加约束文件

File-->add sources--> add or create constraints--> create file (zcu106_vcu.xdc)

内容如下:

set_property PACKAGE_PIN AH12 [get_ports {si570_user_clk_p}]
set_property IOSTANDARD LVDS [get_ports {si570_user_clk_p}]

12.Run Synthesis

13.Run Implementation

14.Generate Bitstream

至此,vivado部分工作已经完成,生成了bit流

 

  • petalinux部分

vcu trd 下载了 rdf0428-zcu106-vcu-trd-2019-2 

rdf0428-zcu106-vcu-trd-2019-2\apu\vcu_petalinux_bsp里有bsp

将xilinx-vcu-zcu106-v2019.2-final.bsp拷贝到ubuntu中

 

1. petalinux-create -t project -s ../xilinx-zcu106-v2019.2-final.bsp

2. cd ./xilinx-vcu-zcu106-v2019.2-final

将vivado生成的zcu106_vcu_wrapper.xsa copy到zcu106_vcu.hw 然后传到ubuntu的xilinx-vcu-zcu106-v2019.2-final中

3. petalinux-config --get-hw=./zcu106_vcu.hw   #参考UG1209设置为SD启动 P48

4. vim ./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

加入以下部分:

&sdhci1 {
no-1-8-v;
}; 

&vcu_0 {
reset-gpios = <&gpio 119 0>;
};

为了fix sd mount error和加入vcu reset (No reset gpio info from dts for vcu)

5. petalinux-config -c rootfs   增加 packagegroup-petalinux-gstreamer。 gstreamer 是用于驱动 VCU 的软件组件。

6. git clone git://anongit.freedesktop.org/gstreamer/common (编译过程中会报错 所以手动下载 具体依报错信息拷贝到相应目录)

7. petalinux-build

8. cd ./images/linux/

9. petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot --force --fpga zcu106_vcu_wrapper.bit

  

  • 运行
  1. 将 images/linux 目录下的 BOOT.BIN 和 image.ub 拷贝到 SD 卡
  2. 将 ZCU106 设置为从 SD 卡启动: SW6[1:4] = ON, OFF, OFF, OFF,上电启动
  3. 连接串口,Interface 0
  4. Login: root, password: root
  5. Mount SD 卡: mount /dev/mmcblk0p1 /mnt
  6. 尝试从 MP4 文件解码: gst-launch-1.0 filesrc location=/mnt/sun_xuan.mp4 ! qtdemux ! h264parse ! omxh264dec ! queue max-size-bytes=0 ! filesink location=./sun_xuan.yuv
  • 播放编解码后的视频文件

在 PC 上安装 ffmpeg,运行指令 ffplay.exe -f rawvideo -pixel_format nv12 -video_size 640x360 -i suan_xuan.yuv

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!