zu mpsoc hdmi设计移植案例分享​-9479威尼斯

zu mpsoc hdmi设计移植案例分享​


zu mpsoc器件在汽车电子、工业控制、机器视觉、智能安防、智慧城市等行业中已经有着广泛的应用,三年前在做一个zcu106开发板的trd(target reference design)向用户自研板卡移植hdmi设计时,遇到了一些问题,我翻出之前的笔记整理成文,与大家分享。


当时使用的vivado版本为2018.3,因此通篇描述都是基于vivado 2018.3的操作。
首先,zcu106开发板的trd参考设计在wiki上都是以tcl脚本形式提供的,需要我们执行脚本创建工程,我选用的参考设计源文件为rdf0428-zcu106-vcu-trd-2018-3\pl\scripts\vcu_audio_proj.tcl,选用这个设计的原因是这个设计包含hdmi tx、hdmi rx、audio,可以完整地检验客户的hdmi硬件设计是否正确。创建工程的步骤如下:


1. 打开vivado 2018.3 gui或者打开vivado 2018.3 tcl command prompt,在tcl命令行的部分输入命令打开vcu_audio_proj.tcl文件的存放目录文件夹;

1.png


zcu106 trd文件目录


2.  source vcu_audio_proj.tcl,创建工程,此时vcu_audio_proj.tcl会调用vcu_audio_bd.tcl;

3.  然后我们在打印信息中可以看到如下错误,原因是vcu_audio_proj.tcl中的路径定义问题;

2.png


trd tcl脚本执行错误信息


3.png

                                                                         

 路径定义命令

4. 解决办法为把vcu_audio_proj.tcl和vcu_audio_bd.tcl拷贝到向上一级目录,让vcu_audio_proj.tcl中的路径定义生效即可;拷贝后的路径如下:

4.png


拷贝脚本后目录


5. 使用vivado 2018.3 gui或者vivado 2018.3 tcl command prompt打开新的vcu_audio_proj.tcl路径位置,source vcu_audio_proj.tcl创建工程;

6. 此时建议备份zcu106的trd工程,下一步有用;



接下来我们把设计移植到用户自己设计的硬件板卡,我的操作步骤如下:

1. 在工程设置中把project device从zcu106修改为客户的pn,我的设计中使用的是xczu4ev-1fbvb900i;然后vivado会提示需要upgrade ip;

5.png


upgrade ip

2. 点击report ip status,upgrade所有ip;

3. upgrade ip之后会出现连线报错,是因为vivado upgrade ip的时候vcu block里面的时钟没有upgrade正确,请参考zcu106 trd工程把vcu里面的clk_wiz_0配置为差分输入、不要reset端口、两路输出时钟、clk_out2连接好,并且连接在block design中丢失的信号连接;


6.png


信号连接丢失

7.png


需要修改的block design信号连接


8.png

需要修改的clk_wiz输入时钟配置 


9.png


需要修改的clk_wiz输出时钟配置


9.png

 

需要修改的reset端口


4. 然后我们去执行block design的validate,可以通过,但是在综合之前产生block design的输出文件时会遇到frame_buffer的错误如下,这个错误是因为工程路径超过了260个字符,需要把工程拷贝到某个盘符的根目录下;


10.png


frame buffer错误信息 


5. 这时候整个设计可以综合完,我们需要根据用户的硬件原理图设计修改管脚位置约束、电平标准约束等信息;如果所有约束都修改完后编译遇到gth的参考时钟无法布线成功,是因为block design中vid_phy_controller中参考时钟的位置和用户在硬件上的管脚、器件自身的位置关系等不一致;

[drc rtstat-1] unrouted nets: 3 net(s) are unrouted. the problembus(es) and/or net(s) are vcu_audio_i/gt_refclk_buf/ibufds_gt/u0/ibuf_out[0],vcu_audio_i/vid_phy_controller/inst/gt_usrclk_source_inst/gtrefclk0_in[0], and vcu_audio_i/vid_phy_controller/inst/gt_usrclk_source_inst/gtrefclk1_in[0].

以zu4ev-fbvb900封装为例,结合用户的原理图设计、zu mpsoc ev系列的gth位置关系,决定了block design中的连线和vid_phy_controller中的配置:

在用户的原理图中,tx_refclk_p/n和hdmi_rx_clk_p/n和hdmi的数据线都是放在gth bank225,tx_refclk_p/n接bank225的refclk1,hdmi_rx_clk_p/n接bank225的refclk0,因此在vid_phy_controller的配置中我们要选择gt starting channel location中要选择x0y8,tx ref clock selection选择gtrefclk1,rx ref clock selection选择gtrefclk0;

在用户的原理图中,dru_clk_p/n从gth bank224的mgtrefclk1进入,根据zu4ev-fbvb900封装的gth位置关系,bank224处于bank225的north位置,所以在vid_phy_controller的配置中ni-dru ref clock selection选择gtnorthrefclk1;


11.png 


block design中的信号连接关系


12.png

video_phy_controller中的配置信息


13.png


zu mpsoc ev gth location



14.png


用户原理图设计


6. 但是在map阶段会遇到如下错误,原因是这个设计使用的lut超出了zu4ev芯片的总量;可以使用 set_param drc.disablelutoverutilerror 1命令让设计向下编译,如果不用audio部分,也可以删除掉block design里面的audio部分;删除audio部分之后这个设计在zu4ev是可以放下的;


15.png


map错误信息

7. 若上一步使用删除block design中的audio部分,block design中还有有一些信号线连接丢失,需要自己手动连接;


16.png

删除audio模块后手动连线

17.png


删除audio模块后手动连线


8. 此时编译又遇到了uram占用量超过zu4ev器件总量的报错,原因是trd设计中vcu的默认配置为encoder和decoder都是4kx60fps分辨率,且encoder buffer全部使用uram实现,zu4ev没有这么多的uram,可以修改uram的资源实现方式来编译通过;也可以减小分辨率以减少uram占用;


18.png

vcu配置信息


最后,强调一下hdmi的时钟结构,请参考xilinx官方文档pg235、pg236。

19.png

hdmi时钟结构图

ingdan fpga微信公众号,是科通知识分享平台,欢迎关注。

微信图片_20210427104647.jpg


公司地址:深圳市南山区高新南九道55号微软科通大厦10楼    客服电话:( 86)755-26743210    邮箱:cs@comtech.com.cn

© 9479威尼斯 copyright 2018 www.comtech.com.cn | |

网站地图