P2中ZYNQ的PS控制PL端LED

时间:2024-04-04 21:06:01

第一个ZYNQ的实验,用于熟悉开发环境和板卡,通过GPIO控制LED,由于P2在ps端没有LED,所以需要通过axi总线控制PL端LED。

1、参考设计

参考的是黑金的《PL 端和 PS 端的协同设计流水灯实验 》。

2、新建工程

新建一个工程,选择zynq的FPGA,然后Create Block Design,然后右击Add ip,输入zynq,如下图所示:

P2中ZYNQ的PS控制PL端LED

然后更改里面配置,首先将时钟设置为50M,如下图所示:

P2中ZYNQ的PS控制PL端LED

为了使用SDK中的hellow world例程,需要选择一路串口,U0和U1都可以,P2使用的是U0, ZEDBOARD使用的是U1打印。

P2中ZYNQ的PS控制PL端LED

再添加GPIO

P2中ZYNQ的PS控制PL端LED

步骤就是RunBlockAutomation-->GenerateOutputProducts-->GenerateOutputProducts

P2中ZYNQ的PS控制PL端LED

最后添加约束文件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。

P2中ZYNQ的PS控制PL端LED

P2中ZYNQ的PS控制PL端LED

3、SDK端设计

SDK的界面类似于eclipse,新建APP。

P2中ZYNQ的PS控制PL端LED

然后输入随意的名称,选择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,就可以了。