教程:在ZYBO板卡实现PL-PS交互

2023-11-07

目的:学会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的改变而改变。

                


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教程:在ZYBO板卡实现PL-PS交互 的相关文章

随机推荐

  • Java远程调试(Remote Debug)可导致远程命令执行漏洞

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Java远程调试 Remote Debug 可导致远程命令执行漏洞 注释startup sh第2行 bin bash declare x CATALINA OPTS ser
  • css元素定位:通过元素的标签或者元素的id、class属性定位

    前言 大部分人在使用selenium定位元素时 用的是xpath元素定位方式 因为xpath元素定位方式基本能解决定位的需求 xpath元素定位方式更直观 更好理解一些 css元素定位方式往往被忽略掉了 其实css元素定位方式也有它的价值
  • python2.7下input()函数输入参数

    使用input 函数 在运行时输入字符需要用引号括起来 但在交互模式下不需要 question Traceback most recent call last File
  • 从零编写c++之http服务器(3)-http服务

    http全称超文本传输协议 可调试性高 扩展性也强 上两个篇章我们已经拥有了epoll事件驱动框架和线程池处理网络事件 接下来我们要先写一个基础网络套接字 然后在此基础上扩展出http的套接字 献上类图如下 完整源码见
  • 也要适当晋升

    和一个哥们聊天 说到要不要当组长这个话题 我说我被无良组长们坑坏了 自己搞不定老往下属身上推 我如果当组长 肯定也是无良组长 水平菜 成为自己讨厌的人 他说 哥们 你还是不懂职场规则啊 别说让当 就是不让当 也要创造条件去当 公司资源可以提
  • connect to host master port 22: No route to host 问题解决方案

    问题描述 connect to host master port 22 No route to host 问题分析 先去ifconfig能不能出现你自己配的网卡 一般情况是不能的 或者重启网卡会启动失败 当然了使用远程连接工具也会连接不上
  • h5微信公众号分享:错误40048,invalid url domain与错误63002,invalid signature问题解决

    1 错误 63002 config fail Error 系统错误 错误码 63002 invalid signature 20201207 15 10 10 1 发送当前接口请求的页面URL需要跟后台协商 是否需要编码 以什么样的形式发送
  • 【Docker】Swarm集群的配置与管理

    实现Docker Swarm集群部署安装 在线创建Swarm集群和自动编配 安装Docker Swarm 1 通过实训平台进入到操作系统界面 该实验需要两台虚拟机 首先修改主机名 修改第一台主机的主机名叫smoker 第二台主机的主机名叫j
  • 【Maki ‘ s Lab学习讲座】超前学习法

    作者 Maki Maki的完美算术教室 排版 Penguin IT鹅 当人们愉快地承受苦难时 苦难也会变得美丽 这不是麻木 而是由于心灵的伟大 亚里士多德 Maki s Lab简介 Maki s Lab核心成员来自多伦多大学 清华大学等世界
  • 咕咕驴AI短视频换脸小程序源码搭建教程

    咕咕驴AI短视频一键换脸小程序源码 带流量主搭建教程 源码下载 https github com peizhou faceoff 下载源码到本地后 修改appid 修改为你自己的微信小程序 打开 dist pages ele index j
  • python笔记7--常见异常处理

    python笔记7 常见异常处理 功能 代码 说明 异常处理是提高程序稳定 可靠的一个重要因素 笔者最近整理了下一常用的python异常处理方法 以及使用案例 记录在此处以便后续查阅 功能 包括raise try except两中常见异常处
  • 软件设计七大原则

    一 开闭原则定义 一个软件实体如类 模块函数应该对扩展开放 对修改关闭 是其他原则的基础或者说是总宗旨 其他原则可以说是此原则的一个延伸 说人话 不修改现有代码的基础上 去新增功能 二 依赖倒置原则定义 高层模块不应该依赖低层模块 二者都应
  • 头文件中string、string.h和cstring的区别

    string和string h的区别 h后缀都是c的头文件 与其相对应的不加 h的都是c 的头文件 在c 标准化的过程中 为了表示头文件来源于c 有时也在前面加上c 比如cmath就来源于math h 但是string和string h没有
  • Windows10子系统WSL修改默认安装目录到其他盘

    WSL修改默认安装目录到其他盘 1 查看WSL分发版本 2 导出分发版为tar文件到d盘 3 注销当前分发版 4 重新导入并安装WSL在d wsl ubuntu20 04 5 设置默认登陆用户为安装时用户名 6 删除tar文件 可选 7 结
  • tcp头、三次握手、四次挥手

    1 tcp头 1 源端口和目的端口 找到目标进程 实现分用 2 序号 seq tcp传送的字节流 每个都按顺序编号 首部中的seq是本报文段中首个字节的序号 3 确认号 ack 两个作用 确认收到报文段和下一次希望收到对方报文段首字节编号
  • JVM内存泄漏和内存溢出的原因

    文章目录 1 概念 2 分析内存溢出可能出现的地方 Java栈 Metaspace 堆 2 分析内存泄漏的原因 1 静态集合类 容器使用时引起的内存泄漏 2 各种连接时 未正确使用close 方法导致的内存泄漏 3 外部模块的引用 4 单例
  • unity shader中一些空间转换方法

    1 模型空间 世界空间 观察空间 裁剪空间 建模时在模型空间进行 模型自带的坐标均为模型空间下的表示 当模型被放到世界坐标系中时 表达某个模型的位置使用的是世界空间下的坐标 所以模型上对应的某一个点 必须相应的转化为世界空间下的坐标 从模型
  • Spark学习总结(一)

    RDD及其特点 1 RDD是Spark的核心数据模型 但是个抽象类 全称为Resillient Distributed Dataset 即弹性分布式数据集 2 RDD在抽象上来说是一种元素集合 包含了数据 它是被分区的 分为多个分区 每个分
  • rsync启动脚本

    rsync启动脚本 01 bin bash www ahlinux com 02 03 rsyncd This shell script takes care of starting and stopping 04 standalone r
  • 教程:在ZYBO板卡实现PL-PS交互

    目的 学会vivado PL PS协同开发流程 平台 ZYBO开发板 zynq 7010 clg400芯片 工具 Vivado 2014 4 功能 实现PL PS协同通信 PS通过AXI总线读取PL部分的GPIO状态 对应zybo的四个开关