1. 程式人生 > >ZedBoard+Vivado(二)——PS + PL實現流水燈

ZedBoard+Vivado(二)——PS + PL實現流水燈

硬體:Zedboard 軟體:Vivado2018.2 + Win10

本文參考了http://blog.chinaaet.com/cuter521/p/35978的設計

1 設計

功能:PS + PL流水燈 語言:C 流程:建立工程->IP Integrator->綜合、實現、生成Bitstream->SDK 在這裡插入圖片描述

2 流程

2.1 建立工程

跟上一篇步驟完全相同,這裡不用新增原始檔

2.2 IP Integrator

IP Integrator是一個圖形化、模組化的IP核開發工具,利用該工具可以很方便的開發基於現有晶片或板子的複雜系統。 首先,在IP INTEGRATOR下選擇Create Block Design 在這裡插入圖片描述

在彈出的視窗可以修改Design name,不修改直接OK就行 在這裡插入圖片描述 這樣就進入BLOCK DESIGN介面,點選Diagram工具欄或中間的“+”號新增IP核 在這裡插入圖片描述 輸入ZYNQ7 Processing System,雙擊 在這裡插入圖片描述 這樣在Diagram裡就出現了ZYNQ7 Processing System,繼續新增AXI GPIO 在這裡插入圖片描述 在出現了AXI GPIO之後點選Run Block Automation, 在這裡插入圖片描述 這裡可以使用預設或使用者定製的ZYNQ7 Processing System配置,勾選Apply Board Preset即表示使用預設配置,否則由使用者定製。這裡採用預設配置,點OK 在這裡插入圖片描述 使用預設配置後,ZYNQ7 Processing System模組會出自動連線DDR和FIXED_IO,並且出現TTC的埠,這些暫時不用去理會,接下來雙擊AXI_GPIO模組,注意不要雙擊埠在這裡插入圖片描述
在IP Configuration裡按如下配置修改,點OK 在這裡插入圖片描述 接下來點選Run Connection Automation 在這裡插入圖片描述 這裡先將所有埠勾選,然後選定GPIO 在這裡插入圖片描述 在GPIO下選擇leds_8bits(LED),點OK 在這裡插入圖片描述 vivado自動為我們完成了連線 在這裡插入圖片描述 接下來,為該設計新增一個wrapper,在Sources->design sources下右鍵該設計模組,選擇Create HDL Wrapper 在這裡插入圖片描述 選擇Let Vivado manage wrapper and auto-update 在這裡插入圖片描述

2.3 綜合、實現、生成Bitsteam

這裡直接點Generate Bitstream,然後等待。等待的時長與電腦的配置有關 在這裡插入圖片描述

執行成功後,右上角會顯示write_bitstream Complete,中間彈出的框選擇Cancel 在這裡插入圖片描述 接下來把硬體配置匯入SDK,首先依次點選File->Export->Export Hardware 在這裡插入圖片描述 勾選Include bitstream,點OK 在這裡插入圖片描述 接下來,依次點選File->Launch SDK 在這裡插入圖片描述 點OK 在這裡插入圖片描述

2.4 SDK

正常情況下,Project Explorer裡會出現我們剛才匯入的硬體配置,接下來依次點選左上角File->New->Application Project 在這裡插入圖片描述 按如下配置輸入,點選Next 在這裡插入圖片描述 選擇Hello World,然後點Finish 在這裡插入圖片描述 這樣Project Explorer裡出現led和led_bsp,我們雙擊led->src下的helloworld.c 在這裡插入圖片描述 將檔案內容替換為如下內容然後儲存

#include <stdio.h>
#include "platform.h"
#include "xparameters.h"
#include "xgpio.h"
#include "sleep.h"


/************************** Constant Definitions *****************************/

/*
 * The following constant maps to the name of the hardware instances that
 * were created in the EDK XPS system.
 */
#define XPAR_LEDS_ID XPAR_AXI_GPIO_0_BASEADDR


/*
 * The following constant is used to determine which channel of the GPIO is
 * used for the LED if there are 2 channels supported.
 */
#define LED_CHANNEL 1

/************************** Variable Definitions *****************************/

/*
 * The following are declared globally so they are zeroed and so they are
 * easily accessible from a debugger
 */

XGpio Gpio; /* The Instance of the GPIO Driver */

int main()
{
    init_platform();
    u8 i=0;
    int Status;

	/*
	\ Initialize the GPIO driver
	*/
	Status = XGpio_Initialize(&Gpio, XPAR_LEDS_ID);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}

	/*
	\ Set the direction for all signals to be outputs
	*/
	XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0x00);

	/*
	\ Loop forever run the LED
	*/
    while(1)
    {
    	for(i=0;i<8;i++)
    	{
			XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, (1<<i));
			sleep(1);
    	}
    }

    return 0;
}

在這裡插入圖片描述 接下來給板子上電,正確連線JTAG線,然後點選Xilinx->Program FPGA 在這裡插入圖片描述 點選Program,完成後可以看見板子上藍色LED點亮,表示PL配置成功 在這裡插入圖片描述 接下來,右鍵led,點選Run As->Launch on Hardware(GDB),成功後就可以在板子上看見流水燈現象 在這裡插入圖片描述