XilinxVivado的使⽤详细介绍(4):Zedboard+vivado之流⽔灯
(加SDK)
Vivado+zedboard之初学流⽔灯
Author:zhangxianhe 环境:vivado 2016.3(已验证适⽤于2015.4)
开发板:Zedboard version xc7z020clg484-1
实验:使⽤Vivado和SDK进⾏Zedboard开发,制作⼀个简单的流⽔灯程序以说明软硬件协同设计的⽅法、开发流程等。
本⽂将分为三个部分:
1. 使⽤Vivado创建⼀个⼯程,并构建⼀个Zynq嵌⼊式处理系统。
2. 在上述基础上,将完成后的硬件导⼊到SDK中进⾏软件设计。
3. 最后下载到ZedBoard上进⾏调试。
具体步骤如下:
1. 使⽤Vivado创建⼯程
1.1新建⼯程
  1).⿏标左键双击Vivado2016.3图标,打开Vivado 2016.3;
  2).单击Create New Project创建⼀个新的⼯程;
  3).单击Next执⾏下⼀步;
  4).选择⼯程所在的位置,并输⼊⼯程名ledflow,单击Next;
  5).在Vivado中新建⼀个RTL⼯程,暂不添加⽂件(勾选 Do not specify sources at this time),后⾯需要的时候添加,单击Next;
  6).这⼀步要注意,在左上⾓Select处选择Boards,选择ZedBoard Zynq Evaluation and Development Kit version D器件,单击Next;
  7).单击Finish
  8).等待软件根据设定新建⼀个RTL⼯程。
这样新建⼯程的步骤就完成了,下⾯进⾏硬件设计步骤;
1.2 Vivado硬件设计
  1). 单击Create Block Design,创建并添加IP核;
  2).输⼊⼯程名led,单击OK;
  3).等待软件Create Block Design
  4).Add IP.右边空⽩处⼀般会提⽰This design is empty. To get started, Add IP from the catalog,单击 Add IP会出现IP的⽬录,如果此处没有提⽰,可以单击Diagram左边框的Add IP添加;
  5). 在⽬录Search中输⼊ZYNQ7 Processing System;
  6).双击ZYNQ7 Processing System完成IP核的添加;
  7).等待软件Add IP,接下来⼯程窗上部分会出现Run Block Automation,点Run Block Automation,直接点OK。
  8).接下来继续添加IP,Add Ip 并在在搜索中寻AXI GPIO,双击添加。
  9).完成后继续点Run Connect Automation,出现窗⼝先打钩S_AXI,右边设置保持不变,直接点OK。之后继续点run connect automation,打钩剩下的,注意此时右侧选择leds_8bits(LED)。之后OK.点击Diagram的Regenerate Layout,重新布局,完成后出现如下界⾯。
1.3硬件处理
  1). Tools >Validate Design
  2).等待软件运⾏,运⾏后的界⾯如下:
  3).单击OK;
  4).Right-Click the Top-level Subsystem Design->Generate Output Products,默认设置,直接点generate,运⾏结束后,点击OK。
  5). Right-Click the Top-level Subsystem Design->Create HDL Wrapper,选择第⼆项 Let Vivado manage Wrapper and auto-update,点击OK,
  6). 在左侧Flow Navigator中最下边,单击Generate Bitstream,点击save(如果有提⽰)然后单击Yes,直接⽣成⽐特流⽂件。执⾏此过程⾸先会⾃动进⾏分析综合和实现。(这⾥也可以直接先点击Run Synthesis进⾏综合,然后点击Run Implementation进⾏实现,然后再点击Generate Bitstream⽣成⽐特流) 需要等待运⾏的时间⽐较长,耐⼼等待;
  7).运⾏完成后,会⾃动弹出对话框,选择Open Implemented Design,单击OK:
  8).运⾏完成后的界⾯如下:
  9).在关联到SDK时,需要将Package和Device都打开,如果运⾏后只是⾃动打开了Device,需要在Flow Navigator下到Synthesis并在其下点击Open Synthesized Design来打开Package,单击NO,将Package和Device同时显⽰出来;
  10).单击Open Block Design to invoke the IP integrator design
  11).准备两条USB线,⼀条连接 micro-usb cable between the PC and the PROG port of the board;另外⼀条 micro-usb cable between the PC and the UART port of the board,打开Zedboard板的电源,如下图所⽰,打开电源之后POWER灯会亮;
  12).单击左侧导航窗⼝最下⽅Hardware Manager中的Open Target,然后选择Auto Connect
  13).单击Hardware Manager中的Program Device,单击xc7z020_1默认设置,单击Program将⽐特流烧写到ZedBoard板上;完成后板上的DONE蓝灯会亮,提⽰⽐特流⽂件下载到ZedBoard板上成功:
  14).单击File中的Export,单击Export Hardware,注意打钩include bitstream,点击OK。
  15).单击File中的Launch SDK,默认设置,单击OK,这时会⾃动启动SDK。
这样在Vivado中的操作就完成了,软件会⾃动打开。
1.4 SDK中的软件设计
打开后的SDK界⾯如下:
  1). 单击File > New > Application Project
  2).输⼊⼯程名ledflow,其它默认,注意勾选 Use default location(默认已经勾选)单击Next;
  3). 选择⼀个空的模板:empty application,单击Finish,等待⼯作环境的建⽴;
  4). 单击ledflow>右击src>New > Source File
  5).输⼊⼯程名ledflow.c(⼀般命名为main.c),单击Finish;
  6). 编写如下程序:
1 * ledflow.c
2  *
3  *  Created on: 2017年11⽉16⽇
4  *      Author: zhangxianhe
5  */
6 #include"xparameters.h"
7 #include"xgpio.h"
8 #include"xil_printf.h"
9 #include"xil_cache.h"
10#define GPIO_BITWIDTH 8
11#define GPIO_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID
12#define LED_DELAY 100000000
13#define LED_MAX_BLINK 0x1
14#define LED_CHANNEL 1
15#define printf xil_printf
16 XGpio Gpio;
17 XGpio GpioOutput;
18
19int GpioMarquee(u16 DeviceId,u32 GpioWidth)
20 {
21volatile int Delay;
22    u32 LedBit;
23    u32 LedLoop;debug灯
24int Status;
25    Status=XGpio_Initialize(&GpioOutput,DeviceId);
26if(Status!=XST_SUCCESS)
27    {
28return XST_FAILURE;
29    }
30    XGpio_SetDataDirection(&GpioOutput,LED_CHANNEL,0x0);
31    XGpio_DiscreteWrite(&GpioOutput,LED_CHANNEL,0x0);
32for(LedBit=0x0;LedBit<GpioWidth;LedBit++)
33    {
34for(LedLoop=0x0;LedLoop<LED_MAX_BLINK;LedLoop++)
35        {
36            XGpio_DiscreteWrite(&GpioOutput,LED_CHANNEL,1<<LedBit);
37for(Delay=0;Delay<LED_DELAY;Delay++);
38            XGpio_DiscreteClear(&GpioOutput,LED_CHANNEL,1<<LedBit);
39for(Delay=0;Delay<LED_DELAY;Delay++);
40        }
41    }
42return XST_SUCCESS;
43 };
44int main(void)
45 {
46while(1)
47    {
48        u32 status;
49        status=GpioMarquee(GPIO_DEVICE_ID,GPIO_BITWIDTH);
50if(status==0)
51            printf("SUCCESS!.\r\n");
52else
53            printf("FAILED.\r\n");
54    }
55return XST_SUCCESS;
56 }
然后Ctrl+S,保存的同时,软件会⾃动开始编译,在左下⾓problem处可以看到相应的warning和error(如果存在),在console⾥⾯可以看到编译成功的效果;⽆误后,如果有错误Click Project-> clean (in case you get any errors with the BSD).
  7).单击Xilinx Tools > program FPGA将⽐特流烧写到板上(在Vivado中就先将⽐特流烧写到板上有两个原因:1.如果SDK调试时出现问题,这样可以检测⾸先是不是Vivado的问题,如果成功烧写,说明板
的连接没有问题,并且Vivado软件本⾝没有问题;2.在之前的调试过程中出现过直接Xilinx Tools > program FPGA⽆法烧写的情况;因此,保险起见,选择在Vivado中就先将⽐特流烧写到板上)
  8).单击Program(和在Vivado中烧写的现象⼀样,完成后DONE蓝⾊指⽰灯会亮)
注:如果软件本⾝以及板的连接没有问题,那么这个步骤会在三秒左右完成,如果⼀直卡在⼀半的进度,说明SDK和Vivado没有很好的建⽴关联;
  9). 选择按钮. 如果不到这个标志选择 Window > Show view > Terminal.
  10).单击并且选择合适的 COM port (取决你⾃⼰的电脑), and configure the terminal with the parameters as shown below.
  11).在⽤到串⼝打印时,需要设置的COM⼝,为设备管理器中的USB Serial Port(本机为COM5),因此要选择COM5,注意波特率为115200:
  12).右键⼯程⽬录中的ledflow⽬录,选择Debug As > Debug Configurations,双击Xilinx C/C++ application (GDB),⾃动选择⼯程,然后选择Reset Entire System。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。