前言
本文簡要介紹在vivado中創建PS工程。單純使用zynq芯片的PS部分就像使用普通ARM芯片一樣,只是多了建立Zynq硬件系統這一個步驟。vivado創建PL工程參見此處
新建工程
建立Zynq硬件系統
新建塊設計
添加zynq處理器IP核
自動配置
添加一個GPIO IP核,同樣自動配置,然后在空白處右擊選擇Regenerate Layout,重新布局
可以將GPIO核改名為LED,核的端口也改為LED
配置
雙擊zynq核進行配置,此處不需要配置
雙擊GPIO核,將端口設為輸出,因為vivado有ZedBoard的信息,所以不用自己配置IP configuration
新建約束文件
生成頂層文件
先右擊system → Generate Output Products → Generate
再右擊system → Create HDL Wrapper → OK
Vivado會為IP子系統生成一個頂層文件,以便對該系統進行綜合、實現並生成比特流
生成比特流
工程配置完成,點擊左下側Generate Bitstream生成比特流,點擊Yes。若沒有其他錯誤,比特流生成完成。
外設地址
硬件工程設計好之后,可在以下窗口中看到系統分配給外設的地址
將硬件工程導出到SDK
VIVADO -> File → Export Hardware 導出硬件到SDK,打鈎,包括比特流,點擊OK
新建軟件工程
注意點next選擇empty application
新建.c源文件
錄入代碼
//點亮燈,需要流水燈代碼請自行修改
#include "xparameters.h"
#include"xgpio.h"
#define LED_CHANNEL 1
XGpio GpioOutput;
int main()
{
XGpio_Initialize(&GpioOutput,XPAR_LED_DEVICE_ID);
XGpio_SetDataDirection(&GpioOutput,LED_CHANNEL,0x0);
while (1)
{
XGpio_DiscreteWrite(&GpioOutput,LED_CHANNEL,0xFF);//點亮全部LED燈
}
}
下載
回到Vivado,program device
再到SDK,運行
效果
說明
bsp是與硬件配置有關的板級支持包,可以方便調用bsp包內的函數實現對外設的控制,而不用關心底層驅動實現。
.elf文件是生成的可執行文件
關於處理器系統
Zynq搭載的是一顆雙核ARM-Cortex-A9處理器,是一顆“硬”處理器,而Xilinx MicroBlaze是由可編程邏輯組成的“軟”處理器,MicroBlaze也可以在Zynq芯片上實現
上圖綠框是應用處理單元(APU),包含兩個ARM核等處理資源。NEON引擎實現了單指令多數據功能來實現DSP類算法的加速,NEON指令是對ARM指令集的擴展,可以直接使用。浮點擴展(FPU)則實現了浮點運算的硬件加速
zynq的GPIO
zynq的GPIO實現方式有三種:MIO、EMIO、AXI_GPIO。PS通過這三種GPIO和外部接口通信。上面例子點亮LED燈使用的是AXI_GPIO,是一個IP核,消耗PL邏輯資源和PL管腳資源,掛載在AXI總線上,通過AXI總線地址訪問。MIO直接和PS相連接,不消耗PL資源,共有54個。EMIO接口位於PS和PL之間,連接到PL的管腳時不消耗PL邏輯資源,連接到PL實現的外設時不消耗PL的邏輯資源也不消耗PL的管腳資源。