PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程

1. vivado的安装

    不得不说赛灵思vivado安装比较费时,有时候还装不上。比较好的解决办法是找一台网卡比较好的电脑下载安装包。我这里安装的是web design 2019.1。

    安装直接去赛灵思官网下载就行。

 2. PYNQ_Z2 board file

    使用pynq_z2,我们首先要从官网下载boardfile。

    https://d2m32eurp10079.cloudfront.net/Download/pynq-z2.zip

    解压,将文件复制到安装路径下。如图所示。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第1张图片

3. 新建一个vivado工程

1.1 vivado 部分

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第2张图片

 

 

    输入工程名字。next。

 

    PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第3张图片

   这里不需要添加源文件,勾选,do not specify sources at this time。next。

  PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第4张图片

   选择板卡PYNQ_Z2。next,

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第5张图片

然后点击finish。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第6张图片

   vivado界面介绍在这里不做解释。现在直接操作。点击 create block design.。输入名字test_led。点击OK。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第7张图片

生成如下界面。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第8张图片

点击中间的加号添加IP核 。并在弹出的框输入zynq,选择zynq7 processing sysem。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第9张图片

然后点击,run block automation。默认,不用操作。.

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第10张图片

手动连接CLK,结果如下,然后双击这个IP核。

 PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第11张图片

在这里,双击IP后,不需要做任何操作。如图所示。

 PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第12张图片

点击加号,或者右击空白处,选择添加IP核。

输入GPIO ,选择AXI GPIO

结果如下。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第13张图片

同样的,点击run connection automation 。选择GPIO接口为leds_4bits。

 PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第14张图片

结果如图所示。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第15张图片

点击sources,右击test_led。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第16张图片

单击,create HDL wrapper,生成顶层文件。并选择,let vivado manage wrapper and auto-update

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第17张图片

这样一个vivado工程已经完成了。

接下来是逻辑综合和下载了。

现在把目光看到左边的栏目flow navigation.

单击 generate bistream, 生成比特流文件。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第18张图片

点击OK,等待一段时间。时间长短看电脑性能(一般半个小时左右吧),完成后会自动弹出下图的对话框,右上角显示状态,是正在执行还是完成,完成了显示打勾。

完成后选择implementation点击OK。(也可以直接 view report)

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第19张图片

 

 

然后点击open implemented design,再点击 report ultilization。如图所示,查看资源使用情况。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第20张图片

 

然后接下来是加载到SDK了。

1.2 SDK 部分

点击,file,选择export ->export hardware。然后需要勾选 include bistream,点击OK

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第21张图片

然后再次点击file,选择 launch SDK ,再点击OK

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第22张图片

等待一段时间,打开SDK。

   PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第23张图片

SDK界面就不一一详细介绍啦,自己需要的话可以自己点击一下看看。

   新建一个SDK工程

file->neew->application project

 

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第24张图片

    输入工程名字为led_test

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第25张图片

然后点击Next

选择empty appllication,点击finish。打开led_test->src

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第26张图片

右击src,添加led_test.c

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第27张图片

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第28张图片

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第29张图片

在led_test.c输入以下代码。

/*
 * led_test.c
 *
 *  Created on: 2019年10月1日
 *      Author: wwccss
 */

/* Include Files */
#include "xparameters.h"
#include "xgpio.h"
#include "xstatus.h"
#include "xil_printf.h"

/* Definitions */
#define GPIO_DEVICE_ID  XPAR_AXI_GPIO_0_DEVICE_ID	/* GPIO device that LEDs are connected to */
#define led_delay 10000000							/* Software delay length */
#define led_channel 1								/* GPIO port for LEDs */
#define printf xil_printf							/* smaller, optimised printf */
unsigned int mled = 0x01;							/* first led*/
XGpio Gpio;											/* GPIO Device driver instance */

int LEDOutputExample(void)
{

	volatile int delay;
	int Status;

		/* GPIO driver initialisation */
		Status = XGpio_Initialize(&Gpio, GPIO_DEVICE_ID);
		if (Status != XST_SUCCESS) {
			return XST_FAILURE;
		}

		/*Set the direction for the LEDs to output. */
		XGpio_SetDataDirection(&Gpio, led_channel, 0x00);

		/* Loop forever blinking the LED. */
			while (1) {
				/* Write output to the LEDs. */
				XGpio_DiscreteWrite(&Gpio, led_channel, mled);
				mled = mled<<1;
				if(mled>0x8)
					mled = 1;
				/* Wait a small amount of time so that the LED blinking is visible. */
				for (delay = 0; delay < led_delay; delay++);
			}

		return XST_SUCCESS; /* Should be unreachable */
}

/* Main function. */
int main(void){

	int Status;
	/* Execute the LED output. */
	Status = LEDOutputExample();
	if (Status != XST_SUCCESS) {
		xil_printf("GPIO output to the LEDs failed!\r\n");
	}
	return 0;
}

注意:这个SDK需要ctrl+s,保存后编译有效。

编译无误后,下载验证。

首先是program FPGA这是逻辑部分。

单击左上角的Xilinx -> program FPGA -> program

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第30张图片

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第31张图片

 

然后是SDK工程。

板子的跳线帽选择,QSPI(固化时候可选,JATG)点击,等待。。。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第32张图片

然后点击运行。可以看到PYNQ_Z2板子上的LED轮流依次点亮。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第33张图片

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第34张图片

先点击中间的,disconnect,然后点击右上角第二个图标,退出调试状态,返回编辑状态。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第35张图片

接下来就是程序的固化了。

1.3 PYNQ_Z固化流程

   首先建立一个FSLB工程,FSBL是干什么的,自行百度。

点击Next

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第36张图片

 

然后选择Zynq_FSBL,点击OK,等待。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第37张图片

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第38张图片

然后点击,Xilinx->Create Boot Image

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第39张图片

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第40张图片

选择Output BIF file path ,

结果如下boot为了区分,自己新建的。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第41张图片

然后是在boot image partition 这一栏。

需要添加一个bootloader文件和两个datafile,结果如下。

 

 

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第42张图片

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第43张图片

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第44张图片

 

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第45张图片

上述添加的文件要按照如上顺序,否则会出问题。

然后单击 create image

然后点击Xilinx->program flash

添加刚刚生成的镜像文件,以及fsbl file,这里选择flash type 为qspi-4x-single(这个具体看板子的介绍会有说明)

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第46张图片

 

这里PYNQ_Z2板子跳线帽选择的是QSPI,如果失败,会提示选择JATG.。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第47张图片

 

重新上电,会看到LED灯和刚才调试的一样的方式,轮流点亮。

1.4 SD卡启动

将刚刚制作的镜像文件复制到SD卡,如图所示。

PYNQ_Z2从vivado到SDK的PS到PL点灯以及固化流程_第48张图片

这里还需要uImage,否者启动失败,.bin修改为其他名字也会无法启动。

uImage获取方法是:

首先烧录PYNQ_Z2的镜像到SD卡,然后格式化SD卡会剩下BOOT.bin和uImage,然后就可以得到想要的uImage了。

 

 

 

 

你可能感兴趣的:(PYNQ,vivado,入门教程)