天天看點

初學Zynq與Vivado

前言

LDPC的項目終于進行到了最後的部分,落到我身上的任務是把視訊資料傳入闆子供FPGA編譯碼,然後再把結果傳回電腦處理。

闆子型号是 Xilinx Zynq-7000 XC7Z045 FFG900 – 2

也就是這一塊:【可能需要科學上網】

http://www.xilinx.com/products/boards-and-kits/ek-z7-zc706-g.html#hardware

這幾天對它的學習,簡直颠覆了我對FPGA的認識。

感覺應該要寫好幾篇才能完全把這幾天學到的東西記錄下來。

Vivado

在講Zynq之前,需要先講Vivado

Vivado是Xilinx公司的一款EDA,2012年出第一版,現在已經成為Xilinx官方指定的開發軟體了。

而ISE,呵呵哒的ISE,早在2013年就停止更新,被它的Xilinx粑粑抛棄了。

是以,在2013年及之後生産的闆子和晶片,都不要用ISE開發。

雖然在ISE的建立工程清單下能找到新的晶片和闆子,也能綜合布線生成比特流,但是依然不推薦。

原因有如下幾個:

  • 來自Xilinx官方的所有支援,包括示例工程、IP核、操作說明文檔等,全部都是基于Vivado的。也就是說,如果你用ISE,那麼就會發生很尴尬的事情——你無法得到來自官方的任何支援。
  • Vivado跟ISE的開發理念完全不一樣,ISE适合快速開發小型項目,而Vivado更适合開發大型項目。
  • ISE是面向檔案的開發,.v檔案、IP核、層次調用結構,講道理更适合用于教學而不是工程開發。在ISE裡甚至沒有封裝IP核這麼一種說法…
  • Vivado則是面向IP核的開發,Xilinx公司認為,未來要快速開發大型的項目,實際上就是要堆砌IP核,是以在Vivado裡一切皆是IP核,調用起來非常友善,很多協定也直接內建在裡面了,例如AXI總線協定之類的,不用擔心協定不比對。

Zynq7000

衆所周知,Xilinx有很出名的“7系列”:Artix7,Kintex7,Virtex7

而Zynq7是一個特殊的7系列,它是唯一一款內建了ARM9核的産品。雖然我覺得在FPGA裡內建一個ARM有種脫褲放屁的無聊感,但是看新聞貌似大家都很激動的樣子,可能是我的水準太低,不能看到這款産品真正的價值所在。

學習過程

首先跟着BIST測試一遍,既能測試闆子是否能用,也能稍微了解一下這個闆子都有些什麼東西在上面。

然後看代碼,你會發現Zynq根本不像一個FPGA,它更像一個ARM,在Vivado搭好硬體電路(一般都會有一個Zynq processing system7軟核),生成bitstream,然後就可以到SDK去進行軟體開發,編寫C語言燒到ARM核裡,就連啟動的boot都是由ARM帶動的,而FPGA更像一個ASIC,用來給ARM調用的。

Vivado有兩種形式的設計,一種是source,跟一般的FPGA開發一樣,沒有用到ARM核;另一種是Block Design,就是IP核的堆砌,實際上一般都會用這種,因為Vivado可以把source封裝成IP核,是以完全可以寫一個source的Project,然後封裝成一個IP加入到Block Design。但是這個端口連接配接是個問題,Block Design一般會用AXI總線互聯,但是我們自己寫的哪有這麼規範…如果全部用GPIO互聯,不僅浪費,GPIO還可能不夠用,速度也不會很理想,反正還需要慢慢摸索。。。

總結

這幾天看Xilinx的技術文檔,看代碼,上網慢慢找不懂的知識,還要連蒙帶猜的,真是心累。感覺做Zynq比做單純的FPGA門檻要高一些,既要有FPGA的程式設計知識,還要會嵌入式軟體編寫,貌似還能在FPGA上跑Linux,這麼說還需要嵌入式Linux的知識,簡直有夠麻煩的,兩三個人的工作量壓到一個人身上,簡直慘,學起來也麻煩。幸好我C語言和彙編的基礎還算不錯,不然就那一大堆嵌入式C代碼就夠搞幾天的了。