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了。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章