目的:学会vivado PL-PS协同开发流程
平台:ZYBO开发板,zynq-7010 clg400芯片
工具:Vivado 2014.4
功能:实现PL-PS协同通信,PS通过AXI总线读取PL部分的GPIO状态(对应zybo的四个开关输入),然后根据读取值,写入GPIO(对应zybo的四个LED输出)
1) 打开vivado,点击create newproject:
2) 输入工程名、工程路径,如下图。然后点击next:
3) 在project type界面中,按如下图方式勾选,点击next:
4) 在search中输入xc7z010clg400,然后选择xc7z010clg400-1芯片(此芯片为zybo开发板采用的芯片)。如下图所示。点击next:
5) 点击finish,新建工程完成。
6) 工程界面如下图。在vivado下建立工程,有以下几种情况:1.如果没有涉及到PS部分,可以采用基于v文件或者diagram的工程。基于v文件的工程是由一个个的verilog或vhdl或ip组成的;基于diagram的工程是先新建一个diagram,然后在diagram中添加一个个的ip。2.如果用到了PS,那只能采用基于diagram的工程。
7) 此工程用到了PS部分,因此需要先建一个diagram,然后在diagram中添加PS,以及各种IP。点击工程左侧的createblock design:
8) 在新弹出的窗口中保持默认,点击ok,如下图。这样就创建了一个名为design_1的diagram:
9) 首先需要添加PS核。在diagram中右击鼠标,选择addip:
10) 在search中输入zynq,选择zynq核,双击完成PS的添加:
11) 双击添加后的PS核,然后点击上方的Import xps settings,导入zybo的板卡网表文件zybo_zynq_def.xml,然后点击ok。如下图红框所示。
12) 此时在zynq block design中,有一些接口的后面已经打上了√,如下图所示。点击ok完成配置。
13) 此PS核在diagram中如下图所示:
14) 点击run block automation,然后在弹出界面中直接点击ok。
15) 此时,可以发现,ps的DDR和FIX Io已经连接到板卡上了:
16) 然后再添加一个axi总线的gpio ip核。右击空白处,选择addip,然后搜索gpio,双击AXI GPIO完成IP的添加:
17) 双击GPIO IP,按如图配置,包含4bit的输入和4bit的输出,然后点击ok:
18) 此时diagram界面如下所示。我们需要建立IP与PS之间的通道。点击Run connection automation,如下图所示:
19) 勾选“all automation“,点击ok:
20) 等待几秒,diagram会自动连接,如图所示:
此处详解:PS核与PL的IP之间通信方式只有一种,那就是通过AXI总线。AXI interconnect IP是一个功能强大的IP,它能管理多个AXI接口的IP。用户如果用到多个AXI IP,那么只需PS将M_AXI_GP0引脚连接到AXI interconnect Ip的SO0_AXI引脚,再将AXI interconnect ip的输出分别连接到每个AXI IP的S_AXI引脚即可,省去了多个AXI互联的管理问题。Processor System Reset IP为其他IP提供复位信号。
连接完毕axi ip后,还需进行ip的地址分配,以便ps部分对IP的调用。在Address Editor一栏,直接点击左侧的auto assign address按钮。如下图所示:
21) 接下来将GPIO引脚重新命名。在diagram中点击gpio_rtl引脚,在External Interface Properities窗口中的name栏,可以将引脚重命名,如下图所示:
22) 在上图中name一栏将gpio_rtl改为sw,按回车键完成命名。同样将gpio_rtl_0命名为led。
23) 生成diagram的顶层v文件。在source窗口中右击,选择Create HDL Wrapper。如下图所示。在新对话框中直接点击ok。
24) 接下来需要添加引脚约束文件。点击工程界面左侧的Add Source,然后在Add Source窗口中选择第一个,如下图所示,然后点击next:
25) 点击create file,然后输入约束文件的名字为ps_pl_test。点击ok,然后在add source界面中点击finish,完成约束文件的创建。
26) 在source窗口的constrs_1下,双击xdc文件,输入以下约束内容(引脚约束关系请参阅zybo的reference manual):
#switchsignals
set_propertyPACKAGE_PIN G15 [get_ports {sw_tri_i[0]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {sw_tri_i[0]}]
set_propertyPACKAGE_PIN P15 [get_ports {sw_tri_i[1]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {sw_tri_i[1]}]
set_propertyPACKAGE_PIN W13 [get_ports {sw_tri_i[2]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {sw_tri_i[2]}]
set_propertyPACKAGE_PIN T16 [get_ports {sw_tri_i[3]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {sw_tri_i[3]}]
#ledsignals
set_propertyPACKAGE_PIN M14 [get_ports {led_tri_o[0]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {led_tri_o[0]}]
set_propertyPACKAGE_PIN M15 [get_ports {led_tri_o[1]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {led_tri_o[1]}]
set_propertyPACKAGE_PIN G14 [get_ports {led_tri_o[2]}]
set_propertyIOSTANDARD LVCMOS33 [get_ports {led_tri_o[2]}]
set_propertyPACKAGE_PIN D18 [get_ports {led_tri_o[3]}]
set_property IOSTANDARD LVCMOS33[get_ports {led_tri_o[3]}]
如下图所示:
27) 此时,直接点击工程界面左侧的generate bitstream。工程会自动综合、实现、生成bitstream。
28) 生成bit后,会弹出以下窗口。直接关闭即可。
29) 在工程顶部菜单栏,点击file->export->export hardware,在弹出窗口中勾选includebitstream,点击ok:
30) 然后点击file->launch SDK,在新窗口中点击ok,启动SDK
31) 此时SDK界面如下所示:
32) 点击file->new->new application project,然后在Projectname中输入hello,保持其他默认,点击next:
33) 保持默认的helloworld工程模板,点击finish:
34) 修改helloworld.c的代码如下,然后ctrl+s保存。保存后sdk会自动build。
#include <stdio.h>
#include "platform.h"
#include "xgpio.h"
XGpioSW_LED;
#define SW_CHANNEL 1
#define LED_CHANNEL 2
#define SW_IN XGpio_SetDataDirection(&SW_LED, SW_CHANNEL, 0x0f)
#define LED_OUT XGpio_SetDataDirection(&SW_LED, LED_CHANNEL, 0x00)
#define SW_VALUE XGpio_DiscreteRead(&SW_LED, SW_CHANNEL)
int init_gpio()
{
int Status;
/*
*Initialize the IIC GPIO
*/
Status= XGpio_Initialize(&SW_LED, XPAR_AXI_GPIO_0_DEVICE_ID);
if (Status != XST_SUCCESS){
return XST_FAILURE;
}
SW_IN;
LED_OUT;
return XST_SUCCESS;
}
int main()
{
init_platform();
print("Hello World\n\r");
init_gpio();
intvalue;
while(1)
{
value = SW_VALUE;
XGpio_DiscreteWrite(&SW_LED, LED_CHANNEL,value);
}
cleanup_platform();
return0;
}
35) 连接好ZYBO板卡,上电,等待自动安装完驱动。然后点击programFPGA按钮,如下图:
在弹出的Program FPGA 窗口中直接点击program。等待板子上绿色灯亮起,下载bit完毕。
36) 下载bit完毕,接着就是运行PS了。在工程左侧Procject Explorer栏,右击hello->RunAs->Launch on Hardware,如下图:
37)稍等几秒,就可以操作SW了。LED的状态随着SW的改变而改变。