前情提要:参考的是下面所说的原网页,只是原作者用的是vivado 2014.4,我用vivado 2018.2跑的,图是新的,内容大多“换汤不换药”,但是我在做的时候存在一些问题,我记录了下来并将解决方法加到了下面的文字中,因此在我的主机上是可以跑通的。不当之处多多包涵。如有侵权请联系删除。

目的:学会vivado PL-PS协同开发流程

平台:ZYBO开发板,zynq-7010 clg400芯片

工具:Vivado 2018.2

功能:实现PL-PS协同通信,PS通过AXI总线读取PL部分的GPIO状态(对应Zybo的四个开关输入),然后根据读取值,写入GPIO(对应Zybo的四个LED输出)

原网页http://www.digilent.com.cn/community/4.html


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:等待几秒,diagram会自动连接,如图所示:

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栏,可以将引脚重命名,如下图所示:(*GPIO连接的管脚改名为sw,GPIO 2连接的管脚改名为led)

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)(*(汗)原作者的set_property PACKAGE_PIN中间没有空格,本人作为新手,傻fufu的直接复制,到值最后比特流始终产生不出来,找了好久。另外实际测验,LVCMOS33改为LVCMOS18 ):

 #switchsignals
set_property PACKAGE_PIN G15 [get_ports {sw_tri_i[]}]
set_property IOSTANDARD LVCMOS18 [get_ports {sw_tri_i[]}]
set_property PACKAGE_PIN P15 [get_ports {sw_tri_i[]}]
set_property IOSTANDARD LVCMOS18 [get_ports {sw_tri_i[]}]
set_property PACKAGE_PIN W13 [get_ports {sw_tri_i[]}]
set_property IOSTANDARD LVCMOS18 [get_ports {sw_tri_i[]}]
set_property PACKAGE_PIN T16 [get_ports {sw_tri_i[]}]
set_property IOSTANDARD LVCMOS18 [get_ports {sw_tri_i[]}]
 
#ledsignals
set_propertyPACKAGE_PIN M14 [get_ports {led_tri_o[]}]
set_propertyIOSTANDARD LVCMOS18 [get_ports {led_tri_o[]}]
set_propertyPACKAGE_PIN M15 [get_ports {led_tri_o[]}]
set_propertyIOSTANDARD LVCMOS18 [get_ports {led_tri_o[]}]
set_propertyPACKAGE_PIN G14 [get_ports {led_tri_o[]}]
set_propertyIOSTANDARD LVCMOS18 [get_ports {led_tri_o[]}]
set_propertyPACKAGE_PIN D18 [get_ports {led_tri_o[]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led_tri_o[]}]

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 ");
   init_gpio();
   intvalue;
   while()
   {
    value = SW_VALUE;
    XGpio_DiscreteWrite(&SW_LED, LED_CHANNEL,value);
   }
 
   cleanup_platform();
   return0;
}

35. 连接好ZYBO板卡,上电,等待自动安装完驱动。然后点击programFPGA按钮,如下图:

在弹出的Program FPGA 窗口中直接点击program。等待板子上绿色灯亮起,下载bit完毕。(*在Bitstream框里可能什么都没有,需要自己去找,路径为..\..\PS_PL_Test\PS_PL_Test\PS_PL_Test.runs\impl_1

36. 下载bit完毕,接着就是运行PS了。在工程左侧Procject Explorer栏,右击hello->RunAs->Launch on Hardware,如下图:

37. 稍等几秒,就可以操作SW了。LED的状态随着SW的改变而改变。

zybo的板卡网表文件链接:
http://f.digilent.com.cn/image_20160727_vrtgajdbzljjs.zip?attname=Vivado%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.zip

在ZYBO板卡上实现PL-PS交互(通过AXI的方式)的更多相关文章

  1. jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题

    jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互.特效.小部件及主题.无论您是创建高度交互的 Web 应用程序还是仅仅向窗体控件添加一个日期选择器,jQuery ...

  2. 基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

    在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交,方便页面和服务器后端进行数据的交互处理.本文主要介绍利用Jquery处理数据交互的几种方式,包括 ...

  3. Android中WebView的JavaScript代码和本地代码交互的三种方式

    一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...

  4. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  5. (转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

    http://www.cnblogs.com/wuhuacong/p/4085682.html 在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交, ...

  6. Android中H5和Native交互的两种方式

    Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...

  7. 如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证?

    如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证? 在 Windows Server 2008 R2 发布后,gOxiA 就开始着手于相关的测试和评估.IIS 是重点测试和评估之一!而今 ...

  8. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  9. 1、win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现)

    1.win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现) 一.准备知识:win10下打开Administrator的方式 在win10操作系统中,Administrator ...

随机推荐

  1. 阿里云(ecs服务器)使用1-安装Mongdb数据库以及远程部署

    1.下载mongodb 百度云盘连接 :链接:https://pan.baidu.com/s/1b-hTS0XHQKpatecFoumLxw  提取码:z9ax 并送上可视化工具:链接:https:/ ...

  2. ECfinal-D-Ice Cream Tower-二分+贪心

    传送门:https://vjudge.net/problem/Gym-101194D 题意:在一堆数中,找到对多的组合,使得每个组合的个数为K,且满足在排序后,后一个是前一个的两倍: 思路:二分,贪心 ...

  3. yzoj P2350 逃离洞穴 题解

    题意 跑两边spfa的水题,注意判断有人才取最大值 代码 #include<bits/stdc++.h> using namespace std; inline int read(){ i ...

  4. 【Offer】[53-1] 【数字在排序数组中出现的次数】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 统计一个数字在排序数组中出现的次数.例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出 ...

  5. Marrkdown基础用法

    目录 前言 markdown简介 用法列表 标题 字符效果和横线 引用 锚点与链接 代码高亮 图片 有序列表&无序列表 表格 特殊符号与颜色处理 markdown进阶技巧 参考文章 前言 因为 ...

  6. Python中流程控制语句之IF语句

    生活中经常遇到的各种选择和判断在程序中也会遇到,比如玩色子,猜大小,比如选择哪条路回家?Python程序中同样也会遇到.IF语句就是用作条件判断的控制语句. 语法一: if 条件: # 引号是将条件与 ...

  7. JDK、Spring和Mybatis中使用到的设计模式

    一.JDK中的设计模式 (1)结构性模式 1.适配器模式 java.util.Arrays#asList() java.io.InputStreamReader(InputStream) java.i ...

  8. ConcurrentHashMap 的工作原理及代码实现

    ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组.Segment继承了ReentrantLock,所 ...

  9. asp.net core 使用 signalR(一)

    asp.net core 使用 signalR(一) Intro SignalR 是什么? ASP.NET Core SignalR 是一个开源代码库,它简化了向应用添加实时 Web 功能的过程. 实 ...

  10. flume learning---Flume 集群搭建

    在flume搭建集群模式时,首先需要进入conf目录, 1.cp flume-env.sh.template flume-env.sh 2.cp flume-conf.properties.templ ...