本文簡要介紹在vivado中建立PS工程。單純使用zynq芯片的PS部分就像使用普通ARM芯片同樣,只是多了創建Zynq硬件系統這一個步驟。vivado建立PL工程參見此處html
與vivado 建立FPGA工程相同算法
新建塊設計
編程
添加zynq處理器IP核
app
自動配置
函數
添加一個GPIO IP核,一樣自動配置,而後在空白處右擊選擇Regenerate Layout,從新佈局
佈局
能夠將GPIO核更名爲LED,核的端口也改成LED設計
雙擊zynq核進行配置,此處不須要配置
雙擊GPIO核,將端口設爲輸出,由於vivado有ZedBoard的信息,因此不用本身配置IP configuration
3d
先右擊system → Generate Output Products → Generate
再右擊system → Create HDL Wrapper → OK
Vivado會爲IP子系統生成一個頂層文件,以便對該系統進行綜合、實現並生成比特流code
工程配置完成,點擊左下側Generate Bitstream生成比特流,點擊Yes。若沒有其餘錯誤,比特流生成完成。htm
硬件工程設計好以後,可在如下窗口中看到系統分配給外設的地址
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實現方式有三種: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的管腳資源。