1. 程式人生 > >ZED-Board從入門到精通(五):軟硬體協同設計

ZED-Board從入門到精通(五):軟硬體協同設計

Zynq最大的優勢在於,同時具備軟體、硬體、IO可程式設計,即All Programmable。在設計Zynq過程中,同樣要建立一種意識,就是從原來單純的軟體思維(或單純的硬體思維)中解脫,轉向軟硬體協同設計的開發方法。

軟體設計,即基於ARM的軟體開發,我們第三節裡面已經做過例子了,基本就是通過某一硬體地址對映暫存器與相應的硬體進行互動,這類硬體包括ARM外設如GPIO,EMIO,SPI,Timer等,也包括掛載到AXI總線上的PL。除此之外,軟體還要處理好諸如作業系統、網路等高層任務。

硬體設計,即基於FPGA的邏輯開發,主要通過例項化一些現成的IP,利用狀態機實現自身邏輯功能,然後實現AXI介面與ARM進行通訊。 

將軟硬體結合進行設計,需要AXI匯流排。我們反覆強調了AXI的重要性,可以說它決定了軟硬體協同設計的成敗。

關於Zynq的網路教程也有很多了,像懶兔子的http://www.openhw.org/bbs/article_1237_523288.html,筆者初學Zynq時是按照他的教程一步步做實驗的。本教程不會重複這些步驟,而是幫助初學者建立一個框架,剩下的就是自己通過查文件、做實驗去填充這些具體內容。

我們大體劃分一下Zynq開發的框架:

首先是需求分析,確定要做什麼;之後將任務進行細分,一般可以看哪些適合在FPGA上實現,單獨提出;剩下的則用PS。接著選擇通訊介面,物理鏈路選擇GP或HP或ACP,協議選AXI-Lite,AXI-FIFO或AXI-Stream。劃分完畢,則邏輯工程師與ARM工程師從這裡分道揚鑣,按照各自任務進行實現。

邏輯工程師需要集中精力做IP設計,將功能整合到一個使用者IP中,並留出通訊介面與AXI通訊。

ARM工程師則根據需求建立ARM裸機軟體工程或基於嵌入式Linux的工程,前者開發週期較短,後者功能較強但需要為Linux做很多準備工作(引導,核心,檔案系統,驅動,圖形介面開發等)。雖然基於嵌入式Linux的開發看上去很“酷”,但我們要把握好分寸,能用裸機實現的堅決不用作業系統,否則只會勞民傷財。

各自開發工作完成後,進入聯調,ARM通過讀寫PL對映暫存器來檢視相應功能是否正常,如果不正常則需要返工修改,反覆測試,直到解決問題為止。