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). 编写如下程序:
* ledflow.c
*
* Created on: 2017 年 11 月 16 日
- * Author: zhangxianhe
- */
- #include"xparameters.h"
- #include"xgpio.h"
- #include"xil_printf.h"
- #include"xil_cache.h"
- #define GPIO_BITWIDTH 8
- #define GPIO_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID
- #define LED_DELAY 100000000
- #define LED_MAX_BLINK 0x1
- #define LED_CHANNEL 1
- #define printf xil_printf
- XGpio Gpio;
- XGpio GpioOutput;
- int GpioMarquee(u16 DeviceId,u32 GpioWidth)
- {
- volatile int Delay;
- u32 LedBit;
- u32 LedLoop;
- int Status;
- Status=XGpio_Initialize(&GpioOutput,DeviceId);
- if(Status!=XST_SUCCESS)
- {
- return XST_FAILURE;
- }
- XGpio_SetDataDirection(&GpioOutput,LED_CHANNEL,0x0);
- XGpio_DiscreteWrite(&GpioOutput,LED_CHANNEL,0x0);
- for(LedBit=0x0;LedBit<GpioWidth;LedBit++)
- {
- for(LedLoop=0x0;LedLoop<LED_MAX_BLINK;LedLoop++)
- {
- XGpio_DiscreteWrite(&GpioOutput,LED_CHANNEL,1<<LedBit);
- for(Delay=0;Delay<LED_DELAY;Delay++);
- XGpio_DiscreteClear(&GpioOutput,LED_CHANNEL,1<<LedBit);
- for(Delay=0;Delay<LED_DELAY;Delay++);
- }
- }
- return XST_SUCCESS;
- };
- int main(void)
- {
- while(1)
- {
- u32 status;
- status=GpioMarquee(GPIO_DEVICE_ID,GPIO_BITWIDTH);
- if(status==0)
- printf("SUCCESS!.\r\n");
- else
- printf("FAILED.\r\n");
- }
- return XST_SUCCESS;
- }
然后 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). 选择 按钮. 如果找不到这个标志选择 Windows> 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.
在 STDIO Connection 中, 勾选 Connect STDIO to Console 设置 COM 5 和波特率 115200;
13). 单击 Apply, 再单击 Debug, 再点击图示箭头所指图标, 即可看到现象.
(第一次的时候会出现选择, 直接选择第一个运行方式), 看到流水灯的效果, 每次跑完一圈 Console 窗口会出现 SUCESS!. 的消息.
至此, Vivado+Zedboard 的流水灯实验就完成了, 板子不使用时要记得关闭电源.
来源: https://www.cnblogs.com/zhangxianhe/p/9795826.html