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

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

3. 新建一个vivado工程

1.1 vivado 部分

    输入工程名字。next。

    

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

  

   选择板卡PYNQ_Z2。next,

然后点击finish。

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

生成如下界面。

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

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

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

 

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

 

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

输入GPIO ,选择AXI GPIO

结果如下。

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

 

结果如图所示。

点击sources,右击test_led。

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

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

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

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

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

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

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

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

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

1.2 SDK 部分

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

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

等待一段时间,打开SDK。

   

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

   新建一个SDK工程

file->neew->application project

    输入工程名字为led_test

然后点击Next

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

右击src,添加led_test.c

在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

然后是SDK工程。

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

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

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

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

1.3 PYNQ_Z固化流程

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

点击Next

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

然后点击,Xilinx->Create Boot Image

选择Output BIF file path ,

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

然后是在boot image partition 这一栏。

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

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

然后单击 create image

然后点击Xilinx->program flash

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

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

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

1.4 SD卡启动

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

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

uImage获取方法是:

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

猜你喜欢

转载自blog.csdn.net/qq_42263796/article/details/101828046
今日推荐