基於Vivado的嵌入式開發
——PS走起
硬件平台:ZedBoard
開發工具:Vivado 2014.2
1、規划
廢話不多說,依然是流水燈,這次是采用PS+PL實現。
功能依舊簡單,目標是為了學習IP核的添加方式、熟悉嵌入式系統設計界面、熟悉Vivado下ChipScope的使用方法。
1) 項目功能:流水燈
2) 編程語言:C
3) 設計流程:建立工程à添加ARM內核、GPIO IPà綜合、實現、燒寫à板級測試(此處不再給現象,和上一篇相同)
2、設計
整體框圖為:
核心功能由ARM軟件實現。添加PL部分的GPIO IP主要目的是熟悉IP添加流程,如何和ARM內核連接,從而組建嵌入式系統。IP功能是從總線上取出數據,送至8個LED。
3、總結
這次來個倒敘,先上使用感受
1) Vivado將所有功能集成到一個框架下,不像原來那樣在設計過程中需要在各工具之間不斷切換主界面,使整個設計流程更加清晰、流暢。界面也有所美化,贊一個!
2) 雖然是第一次用Vivado做嵌入式設計,但也不是說和XPS、PlanAhead天差地別,變化主要是在原先由XPS完成的部分,其他和PlanAhead的使用是比較類似的。整個設計過程都是自己摸索出來,總體來說還是挺順利的,所以,想上手Vivado的朋友不必擔心不適應。
3) 對於嵌入式設計(准確的說是Block Design)而言,去除了一些自動連線,使開發人員手動或者利用工具完成整個連線過程,可以幫助開發人員更好地熟悉一些信號、總線(有可能糊里糊塗也能搞定,保險起見還是了解一下更好)。這貌似也從一個側面展現了Vivado開發團隊“自動化設計方式,不強制設計方式”設計理念。
4) 嵌入式設計雖然比純邏輯開發更加復雜,使用了硬核PS7和軟核GPIO,但整個design實現的時間並沒有大幅度增加,我的主觀感覺反而是比純邏輯開發耗的時間更短。由此可見Vivado在復雜設計上面要優於ISE。
5) 通過查看Vivado的工程目錄發現,Vivado的工程目錄相當清晰,不像ISE那樣,各種文件的堆在一個文件夾下。但是這種工程文件的組織也有缺點——會導致一些文件路徑很長。
4、添加資源
工程的建立,可以參考《Vivado實現純邏輯開發——從最簡單的開始》。
4.1、創建Block
在左側的Flow Navigator子窗口找到IP Integrator(默認展開),找到該目錄下的Create Block Design命令並單擊。
圖2
命名為system,如圖3所示。
圖3
進度條跑完之后界面發生變化,出現了Diagram子窗口,Sources自選項卡右邊多出了3個選項卡,如圖4所示
圖4
4.2、添加cpu
在Diagram子窗體中找到Add IP按鈕,位置如圖5所示的紅色方框內。
圖5
點擊按鈕后,彈出IP搜索對話框,如圖6所示。
圖6
輸入system,對IP進行過濾,結果如圖7所示。
圖7
雙擊ZYNQ7 Processing System,會自動添加該IP,結果如圖8所示。
圖8
除了雙擊之外,還可以選中后回車;還可以選中后拖拽至Diagram窗口中釋放。
4.3、添加其他IP
用4.2小節所述的方法添加GPIO IP。添加完成后的情形如圖9所示。
圖9
在XPS中添加AXI IP時,XPS會自動完成總線連接,創建相關端口,Vivado默認不做任何工作。還可以看到總線的時鍾和復位信號被單獨拿了出來,如果沒記錯的話,之前是和其他總線信號放在一起的,封裝在BUS_INTERFACE中的。
4.4、端口連接和IP配置
圖9中可以看到Run Block Automation和Run Connection Automation選項,Run Block Automation可以為模塊創建端口,Run Connection Automation可以完成端口的自動連線。
點擊Run Block Automation,進入圖10所示的界面。
圖10
看一下注釋,該過程是將開發板的預設置導入進來,並且將FIXED_IO(MIO)、DDR接口生成外部連接端口。OK,進度條跑完之后,界面發生變化,如圖11所示。
圖11
DDR,FIXED_IO已經連接到端口,還多出了TTC0_WAVE0_OUT等選項,應該是對PS7進行了參數配置造成的,雙擊PS7可以對之進行配置,界面如圖12所示,和XPS中大同小異,配置過程不多說了,這里沒有改動。
圖12
雙擊GPIO IP對之進行配置,主要是將位寬改為8bits,如圖13所示。
圖13
點擊Run Connection Automation,選擇,如圖14所示。
圖14
彈出對話框如圖15所示,提示將gpio的AXI接口映射到主端的地址空間。還詢問是否自動連接時鍾,這里不管它,直接OK。
圖15
連線結果如圖16所示。
圖16
系統自動添加了互聯模塊(AXI Interconnect,和XPS相同)和一個時鍾、復位控制模塊。
再次Run Connection Automation,將GPIO連接到輸出端口,在圖17所示對話框中選擇開發板端口為leds_8bits。
圖17
終於完成了,不容易啊,最終結果如圖18所示。
圖18
4.5、為Block Design創建wrapper文件
點擊Sources自選項卡,按照圖19的指示為該Block Design創建wrapper文件,bd文件是不可以作為設計頂層的,為了方便頂層調用,需要為之生成一個wrapper文件。
圖19
選擇讓Vivado幫助我們管理wrapper文件,如圖20所示。
圖20
4.6、添加約束文件
這里我也不確定是否需要添加DDR和MIO相關引腳的約束,暫時不管他們。由於所有連接都是自動完成的,有理由相信Vivado為這些引腳做了約束,所以,這里我忐忑的偷個懶,不寫約束代碼,直接Generate Bitstream。
果然直接過了,估計沒問題了,轉戰SDK。
圖21 啟動sdk
將硬件導出(1、FileàExport Hardware 2、FileàLaunch SDK,相當於PlanAhead和XPS的Export Hardware & Launch SDK)。進入SDK歡迎界面后,SDK會自動導入硬件信息,如圖22所示。
圖22
5、軟件設計
SDK的使用不多說了,和之前的變化不大,直接上代碼。
#include <stdio.h> #include "platform.h" #include "xparameters.h" #include "xgpio.h" #include "sleep.h" /************************** Constant Definitions *****************************/ /* * The following constant maps to the name of the hardware instances that * were created in the EDK XPS system. */ #define XPAR_LEDS_ID XPAR_AXI_GPIO_0_BASEADDR /* * The following constant is used to determine which channel of the GPIO is * used for the LED if there are 2 channels supported. */ #define LED_CHANNEL 1 /************************** Variable Definitions *****************************/ /* * The following are declared globally so they are zeroed and so they are * easily accessible from a debugger */ XGpio Gpio; /* The Instance of the GPIO Driver */ int main() { init_platform(); u8 i=0; int Status; /* \ Initialize the GPIO driver */ Status = XGpio_Initialize(&Gpio, XPAR_LEDS_ID); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* \ Set the direction for all signals to be outputs */ XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0x00); /* \ Loop forever run the LED */ while(1) { for(i=0;i<8;i++) { XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, (1<<i)); sleep(1); } } return 0; }
搞定,流水燈跑起來了。
6、ChipScope觀測內部信號
本來想在這一篇學一下ChipScope,寫着寫着發現又變成一篇長文,所以還是放在后面吧。
版權聲明:
本文由博主“cuter”發布。歡迎轉載,但不得擅自更改博文內容,也不得用於任何盈利目的。轉載時不得刪除作者簡介和版權聲明。如有盜用而不說明出處引起的版權糾紛,由盜用者自負。
博客官方地址:
ChinaAET:http://blog.chinaaet.com/cuter521
EDN China: http://bbs.ednchina.com/BLOG_cuter521_356737.HTM
轉載:http://blog.chinaaet.com/cuter521/p/35978