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