第一個ZYNQ的實驗,用於熟悉開發環境和板卡,通過GPIO控制LED,由於P2在ps端沒有LED,所以需要通過axi總線控制PL端LED。
1、參考設計
參考的是黑金的《PL 端和 PS 端的協同設計流水燈實驗 》。
2、新建工程
新建一個工程,選擇zynq的FPGA,然後Create Block Design,然後右擊Add ip,輸入zynq,如下圖所示:
然後更改裏面配置,首先將時鐘設置爲50M,如下圖所示:
爲了使用SDK中的hellow world例程,需要選擇一路串口,U0和U1都可以,P2使用的是U0, ZEDBOARD使用的是U1打印。
再添加GPIO
步驟就是RunBlockAutomation-->GenerateOutputProducts-->GenerateOutputProducts
最後添加約束文件xdc
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[3]}]
set_property PACKAGE_PIN R14 [get_ports {gpio_rtl_tri_o[0]}]
set_property PACKAGE_PIN P14 [get_ports {gpio_rtl_tri_o[1]}]
set_property PACKAGE_PIN N16 [get_ports {gpio_rtl_tri_o[2]}]
set_property PACKAGE_PIN M14 [get_ports {gpio_rtl_tri_o[3]}]
生成bit文件,然後export,同時export bit文件,最後launch SDK。
3、SDK端設計
SDK的界面類似於eclipse,新建APP。
然後輸入隨意的名稱,選擇hello world的工程。
修改main文件如下所示:
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"
XGpio GpioOutput;
int main()
{
u32 Delay;
u32 Ledwidth;
init_platform();
XGpio_Initialize(&GpioOutput,XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_SetDataDirection(&GpioOutput, 1, 0x0);
XGpio_DiscreteWrite(&GpioOutput, 1, 0x0);
while (1)
{
for(Ledwidth =0x0;Ledwidth < 4; Ledwidth++)
{
XGpio_DiscreteWrite(&GpioOutput,1,1<< Ledwidth);
for(Delay = 0; Delay < 8000000; Delay++);
XGpio_DiscreteClear(&GpioOutput,1, 1 <<Ledwidth);
}
}
cleanup_platform();
return 0;
}
首先下載bit,然後運行軟件,流水燈就亮了。
4、問題解決
一開始SDK一直提示無法停止after reset,需要將SD卡取下來,並按SRST,就可以了。