1 概述

本文用于讲解ZYNQ中的EMIO的作用以及使用方法。

ZYNQ说明:

1)ZYNQ分为PL侧与PS侧。

2)PL侧为逻辑部分,即常说的FPGA。

3)PS侧为软件侧,即常说的RAM侧。

4)本文以ZYNQ-7000系列 xc7z045ffg676为例讲解EMIO。

使用开发工具:vivado 2017.4 ,SDK

本文例程:设置两个EMIO,第一个作为输出,点亮LED,第二个作为输入,输入KEY的电平。

2 参考


3 EMIO定义及作用

EMIO 是扩展的MIO,MIO在PS侧,EMIO是在PL侧扩展MIO的功能。

即EMIO是在PL侧连接使用PS侧资源的扩展通道接口。可扩展到pin上,也可以扩展到运用上,如下图所示:

zynq vitis烧写emmc zynq的emmc_zynq vitis烧写emmc

EMIO与MIO一样归属于GPIO,ZYNQ-7000的GPIO共有54(MIO)+64(EMIO)=118个。如下图所示:

zynq vitis烧写emmc zynq的emmc_GPIO_02

当然这个EMIO的序号也可通过PS侧的xgpiops.h中查看,比如下图:

zynq vitis烧写emmc zynq的emmc_zynq_03

4 PL侧设置

在做ZYNQ的开发时,是PL与PS协调的一个过程。需要先在PL侧建立工程,之后再将PL侧的bit导出到PS侧进行开发。

PL侧设置如下:

\1) 在vivado中新建工程后在bd中添加zynq的ip。

\2) 之后双击IP点开设置界面,如下所示:

zynq vitis烧写emmc zynq的emmc_zynq vitis烧写emmc_04

\3) 再点击GPIO,找到EMIO的设置,选择想要设置的位宽,本例程设置为2。如下所示:

zynq vitis烧写emmc zynq的emmc_EMIO_05

\4) 再点击ok完成zynq的ip设置。

\5) 再点击run block automation完成ip周围的设置

zynq vitis烧写emmc zynq的emmc_zynq_06

\6) 在bd上点击greate HDL wrapper创建顶层文件,之后再设置gpio的连接管脚xdc即可完成PL侧的工程设置

zynq vitis烧写emmc zynq的emmc_EMIO_07

\7) 再点击generate bitstream 生成bit文件,

\8) 再通过file/export/export hardware 将bit硬件导出到ps侧

\9) 再通过file/launch sdk 启动sdk进入ps侧的代码操作。

zynq vitis烧写emmc zynq的emmc_GPIO_08

5 PS侧的设置

\1) 在导出的SDK中,点击file/new/application project建立运用工程,设置好工程名后点击下一步。

zynq vitis烧写emmc zynq的emmc_zynq_09

\2) 之后点击hello world工程模板。

zynq vitis烧写emmc zynq的emmc_zynq vitis烧写emmc_10

\3) 之后在*bsp下面点击system.ss即可看见驱动,导入gpio的examples。

zynq vitis烧写emmc zynq的emmc_zynq_11

\4) 之后根据需要在例程中到gpio的初始化代码、输入输出使能代码搬移到自己工程的main.c文件下。

\5) 再根据自己的运用场景设置输入输出值以及运用即可。比如本例程

zynq vitis烧写emmc zynq的emmc_GPIO_12

6 上板操作

\1) 连接上线缆后,点烧写PL的BIT文件;

zynq vitis烧写emmc zynq的emmc_EMIO_13

\2) 再运行PS侧的debug AS/1 launch***即可烧写完成

zynq vitis烧写emmc zynq的emmc_zynq vitis烧写emmc_14

\3) 之后在板子上即可看见LED的闪烁,以及在SDK terminal上看见打印的读出数据。

zynq vitis烧写emmc zynq的emmc_GPIO_15

7 Sdk terminal说明

SDK terminal是SDK自带的串口调试助手,用于SDK内部的串口打印与数据发送。

打开方式为:在sdk terminal串口点击+号,选择端口,之后点击ok即可。如下图所示。

zynq vitis烧写emmc zynq的emmc_zynq_16