1. 程式人生 > >閒話Zynq UltraScale+ MPSoC (連載1)——憶老前輩Zynq-7000

閒話Zynq UltraScale+ MPSoC (連載1)——憶老前輩Zynq-7000

閒話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:北京剛下了第二場雪,真個就一冰天雪地天寒地凍啊,熊貓在山裡,得自己燒鍋爐取暖氣。有沒有軟妹子啊,求安慰!!!