闲话Zynq UltraScale+ MPSoC (连载1)——忆老前辈Zynq-7000

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haoxingheng/article/details/50076591

闲话Zynq UltraScale+  MPSoC

                                                                                                                                                                                                                                                                    作者: Hello,Panda

        时隔三年,Xilinx推出了其全新的异构SoC,大名叫ZynqUltraScale+。相比它的前辈Zynq-7000,这款SoC功能显得更加强劲:最显著的变化是新加入了GPU和视频编解码器,PS端的高速接口更加丰富。按照Xilinx官方的说法,Zynq UltraScale+主要针对控制、图像和网络这三大块,比如说汽车辅助驾驶、8K图像、100G网、物联网等等领域(兵马未动,粮草先行啦,Xilinx早早的就针对这些差异化应用推出了SDx集成开发环境)。别的熊猫君不知道,但图像这一块也算是熟悉,使用Zynq-7000别的都好说,美中不足的是只能做处理,还得另外挂一个DSP专门做压缩和存储,熊猫君曾经为此愁得黑眼圈重了许多。看到Xilinx迈出的这一大步,熊猫君高兴得晚上多啃了几根竹笋才睡着,总算是遂了三年来的一个大愿望,终于可以单片搞定我所有的活儿啦。为此,熊猫君代表熊猫君给个高度的评价,在通用的异构SoC圈子里,Xilinx算是奠基了。好了好了,熊猫趁着啃竹子的间隙,仔细认真的掰一掰这神秘的新生事物。当然了,熊猫的水平实在有限,有操心下雪竹子不好采,这说出来的话肯定有很多不那么靠谱的地方,还请大家多多指正,不要喷熊猫啦。熊猫是做图像的,这闲话的重点必然还是三句话不离本行啦,见谅见谅。

前言:

        其实说这个就是为了讲讲历史,顺便吐下槽,就酱紫。记得Xilinx刚刚推出Zynq的时候,那是一个秋天,气温还不太低,这个新生事物的暖风就吹醒了熊猫君。熊猫当时兴奋得不睡觉不啃竹子(此时的竹子特别香),就呆在电脑旁,两眼放着精光不停的刷呀刷网页,心里想啊:哈哈,劳资再也不用在弄图像的时候采用DSP+FPGA的这种东西了。

       <1>开发环境选择。刚刚接触Zynq,什么也不太懂,领导是要求用ISE做开发,所示大家都熟悉,有了什么问题也可以一起讨论下。但我总是对ISE里边PlanAhead+XPS 的这种开发方式不是很感冒,总觉得不要那么的操作界面不友好,熊猫喜欢简单粗暴最好不用脑的,然后就坚持用了Vivado。领导让说出为什么要用Vivado,有什么优势?!那时候咱不懂,就直接说,好处说不来,总觉得新事物萌生必然有它战胜旧事物的优势,然后就毅然决然的在Vivado下开发了。同学们,Vivado用顺溜以后不知道比ISE爽多少倍,切记切记一定要学会写TCL脚本,有了它,你就可以啪啪啪的一句调用脚本的命令搞定所有的事情,这是装逼必备技能,必备技能,必备技能,重要的说三遍。

       Zynq的软件开发其实也有过考量,经过慎重考虑后还是觉得使用Linux传统开发方式比较好,毕竟Xilinx不是专业的,也不可能包罗万象,SDK下的那个东东还是有太多太多的限制了。

       <2> 顶层例化方式。因为Xilinx铺天盖地的宣传其IP InteGrator的开发目标,曾经一度选择采用图形化界面的IP集成方式开发。过了一阵子发现实际上现在还没有条件这么做,有两个理由:(1)Xilinx的IP占用资源特别多,比如说VDMA,一个就用了近20K逻辑,想想一个片子能有几个20K;(2)因为自己写的代码需要经常修改,修改一次就要更新封装IP,很麻烦,也不好做版本管理。几番纠结以后,还是决定回归传统,就是IP InteGrator开发方式只是创建一个Block Design用来配置PS及一些必要的总线接口,时钟和AXI仲裁器等。然后再通过顶层模块例化这个Block Design,也就是说让它和用户代码处于同一个层级。

       <3>自立更生。当初选择Zynq,目的就是要单片搞定图像处理、存储、显示的所有工作。但理想很丰满,现实很骨感,这个渐渐走近大家的新生命并不能一下子长大成人。我们的方案是这样的,打字说不明白,用下面的图1来描述(请原谅熊猫君毫无美感的图风)。


 图1  系统简图

从图1可以看到,这是一个带SDI接口的IP相机。大致分为两大块:

    a)PL负责原始数据采集、Bayer域处理、ISP和图像编码;

    b)PS负责对PL的管理、控制和协处理、RTSP服务器、千兆网和SD卡数据存储。

    这个方案看起来很好很强大,实际实现起来确有相当的难度,除去图像处理已经有相当的积累,我们一群探路者实现了以下的所有工作:

    a) 数据交互:Xilinx的VDMA实在是太强大了,以至于它占用的资源也是不一般的多,我们必须重写底层所有基于AXI接口的DMA逻辑。

    b) 图像编码:很遗憾,Zynq-7000没有压缩模块,要实现这个功能,要么买第三方IP,要么另外接入一个DSP专门干这个事儿,最坏的选择是自己实现。受成本、逻辑资源(资源也是成本之一)的限制,最终没有办法,我们自己编写了一个不完整的H264编码器,现在看来这个多余也无必要了。

    c) SDI输出:有人说,Zynq-7000不是有带GTP的吗?可是现实永远有那么一点尴尬,用Z7015不够(就差那么一丢丢),用Z7035太贵,所以只能用Z7020,所以挂了一个很大的SDI PHY在上边。

    d) RTSP:Zynq不是专业的,RTSP是吭哧吭哧从TI的方案里面移植过来的,呵呵哒。

   总算是顺利,奋战半年也啃下了以上所有的骨头,追忆当年,还是很不容易的,熊猫君的黑眼圈到现在还有。

   说这么多,其实就是想说上一代的Zynq其实并不能完美满足熊猫君的要求,首先是有那么多的功能项没有,再者就是DDR的带宽实在是不够,图像处理能够满足1080P60已经很不错了,再在PL上挂DDR也不太好。这个不能怪Xilinx,毕竟人家也是大姑娘上花轿嘛,她也有自己的考虑不。

    好了,吐槽就到这儿了,明天继续,熊猫君加一铲子煤了就睡觉,不然这黑眼圈真的没得治了。BS:北京刚下了第二场雪,真个就一冰天雪地天寒地冻啊,熊猫在山里,得自己烧锅炉取暖气。有没有软妹子啊,求安慰!!!

     

 

 

猜你喜欢

转载自blog.csdn.net/haoxingheng/article/details/50076591