ZYNQ_SDK EMIO

zynq设计学习笔记3——GPIO之EMIO按键控制LED实验 在本设计中,我们将PS端外设GPIO通过EMIO来调用PL端的引脚资源。由于小编此时只有pynq-z2的开发板,暂且用这个来学习zynq系列。这个开发板上PS端没有任何MIO引脚牵出给用户使用,因此该实验极为关键。首先什么是EMIO?EMIO是拓展的MIO,当PS的引脚不够用的时候,可以通过EMIO来进行扩展,从而使用PL的引脚。是PS和PL之间的一个接口。 在该实验中,通过EMIO来调用PL端的引脚实现两个拨码开关分别控制两个LED灯的亮灭。 首先我们创建工程: Create Block desgin, 阅读详情

ZYNQ_SDK EMIO

PS 和外部设备之间的通信主要是通过复用的输入/输出(Multiplexed Input/Output,MIO)实现的。除此之外,PS 还可以通过扩展的 MIO(Extended MIO,EMIO)来实现与外部设备的连接。

EMIO 使用了 PL 的I/O 资源,可以用来扩展PS引脚,也可以用来连接PL中实现的IP模块。

简介

ZYNQ GPIO 接口信号被分成四组,分别是从 BANK0 到 BANK3。

  • 其中 BANK0 和 BANK1 中共计 54个信号通过 MIO 连接到 ZYNQ 器件的引脚上,这些引脚属于 PS 端

  • BANK2 和 BANK3 中共计 64 个信号则通过 EMIO 连接到了 ZYNQ 器件的 PL 端

在这里插入图片描述

PS 端经由 EMIO 引出的接口会直接连接到 PL 端的器件引脚上,通过 IO 管脚约束来指定所连接 PL 引脚的位置。( MIO 不需要手动指定引脚约束 )

通过这种方式,EMIO 可以为 PS 端实现额外的 64 个输入引脚或 64 个带有输出使能的输出引脚。

输入引脚 和 带输出使能的输出引脚

EMIO 还有一种使用方式,就是用于连接 PL 内实现的功能模块(IP 核),此时 PL 端的 IP 作为 PS 端的一个外部设备
在这里插入图片描述

硬件设计

框图

在这里插入图片描述

因为 EMIO 使用了 PL 端的 IO 资源,所以增加了 PL 部分,PL 端与按键 KEY和LED相连的引脚直接通过 EMIO 连接到 PS 端。

步骤
step1: 配置EMIO

MIO Configuration -> GPIO -> 勾选EMIO GPIO -> 位宽 2

将 EMIO 扩展一个 2 位的 GPIO 接口信号,此信号将用于连接 PL 端的引脚

在这里插入图片描述

在 Diagram 窗口中可以看到 ZYNQ7 Processing System多了一个 GPIO_0 端口

在这里插入图片描述

点击选中该端口,然后点击鼠标右键,在弹出的列表中选择"Make External"( 引出 ),可以看到ZYNQ7 Processing System 引出了一个名为GPIO_0_0的接口
在这里插入图片描述

点击选中该接口,在左侧 External Interface Properties一栏中将该接口的名称修改

在这里插入图片描述

step2: 生成顶层HDL

在 Sources 窗口中展开 Design Sources,然后右键点击 sysetm_wrapper 下的 system.bd,在弹出的菜
单中选择 Generate Output Products

在这里插入图片描述

step3: 创建顶层HDL Wrapper

在这里插入图片描述

step4: 生成Bitstream文件导出到SDK

Flow Navigator 导航栏中找到 RTL ANALYSIS,点击该选项中的"Open Elaborated Design"

I/O Planning:在 I/O Ports 窗口中对 PL 部分的接口进行管脚分配

如果是MIO的输入/输出接口不需要手动进行管脚分配,选择"Generate Output Products"之后,Vivado 工具会自动创建 PS 端的管
脚约束文件。

自行扩展的GPIO的接口信号,需要手动将其分配引脚,要与原理图对应。
按键SW :

在这里插入图片描述

LED:

在这里插入图片描述

引脚绑定:

在这里插入图片描述

step5: 导出硬件

File -> Export -> Export Hardware

在弹出的对话框中,勾选“Include bitstream”

在这里插入图片描述

如果设计使用了 PL 的资源,比如使用了 PL 的引脚,或者在 PL 内实现了部分功能模块,那么就需要生成 Bitstream 文件,并在导出硬件的时候包含该文件。

资源消耗

在 IMPLEMENTED DESIGN 界面可以查看设计对 PL 资源的使用情况。

在左侧 Flow Navigator 导航栏中找到 IMPLEMENTATION,点击该选项中的"Report Utilization"

在这里插入图片描述

软件设计

导出的为硬件设计文件

在这里插入图片描述

步骤
step1: 在SDK中创建应用工程

File > New > Application Project,新建一个 SDK 应用工程

在这里插入图片描述

  • Project name : 指定项目名称
  • Hardware Platform 指定硬件设计文件
  • Board Support Package : BSP 板级支持包,可以指定名称
step2: 应用程序编写
/**
 * Create by wkk 2023.3.20
 * read sw state to control led
 */

#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"

#define GPIOPS_ID XPAR_XGPIOPS_0_DEVICE_ID //PS 端 GPIO 器件 ID

#define EMIO_LED 54 //PL_LED 连接到 EMIO0
#define EMIO_KEY 55 //PL_KEY 连接到 EMIO1

int main()
{
	XGpioPs gpiops_inst; //PS 端 GPIO 驱动实例
	XGpioPs_Config *gpiops_cfg_ptr; //PS 端 GPIO 配置信息

	//根据器件 ID 查找配置信息
	gpiops_cfg_ptr = XGpioPs_LookupConfig(GPIOPS_ID);
	//初始化器件驱动
	XGpioPs_CfgInitialize(&gpiops_inst, gpiops_cfg_ptr, gpiops_cfg_ptr->BaseAddr);

	//设置 LED 为输出
	XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_LED, 1);

	//使能 LED 输出
	XGpioPs_SetOutputEnablePin(&gpiops_inst, EMIO_LED, 1);

	//设置 KEY 为输入
	XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_KEY, 0);

	//读取按键状态,用于控制 LED 亮灭
	while(1){ // 按键按下与抬起是不同的状态
		XGpioPs_WritePin(&gpiops_inst, EMIO_LED,~XGpioPs_ReadPin(&gpiops_inst, EMIO_KEY));
	}
	return 0;
}

说明:

  1. 引脚编号

    #define EMIO_LED 54 //PL_LED 连接到 EMIO0
    #define EMIO_KEY 55 //PL_KEY 连接到 EMIO1
    

    引脚编号可以在xgpiops.h头文件中查找, 0-53为MIO, 后面为EMIO,依次编号

    在这里插入图片描述

  2. 下载说明

    使用了PL内的资源,在下载软件编译生成的elf文件之前,需要先下载硬件设计生成的bitstream文件,对PL部分进行配置。
    在这里插入图片描述
    在这里插入图片描述

也可以在Run Configuration 中配置,先进行系统复位,然后Program FPGA, 然后再Run as
在这里插入图片描述
点击Run 后,SDK软件首先会复位整个系统,清除FPGA逻辑,重新下载bitstream 和 elf 文件。

总结

通过 EMIO 扩展的 GPIO 接口的使用方法和 MIO 没有任何区别。

头文件说明:

  • xparameters.h 定义了 设备地址、参数等等信息
  • xgpiops.h 包含了 ps操作gpio相关的操作

基本操作流程:

  • 根据器件 ID 查找配置信息

    XGpioPs_Config *gpiops_cfg_ptr; //PS 端 GPIO 配置信息
    //根据器件 ID 查找配置信息
    gpiops_cfg_ptr = XGpioPs_LookupConfig(GPIOPS_ID);
    
  • 初始化器件驱动

    XGpioPs gpiops_inst; //PS 端 GPIO 驱动实例
    //初始化器件驱动
    XGpioPs_CfgInitialize(&gpiops_inst, gpiops_cfg_ptr, gpiops_cfg_ptr->BaseAddr);
    
  • 设置输入输出模式

    // 0 for Input Direction, 1 for Output Direction.
    XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_LED, 1);
    
  • 读写操作

    XGpioPs_WritePin(&gpiops_inst, EMIO_LED,0x01)
    XGpioPs_ReadPin(&gpiops_inst, EMIO_KEY));
    
ZYNQ-Linux下EMIO使用教程,GPIO分配及编号 这是目录一、项目概述二、vivado工程设计三、端口分配 本文使用环境: 主控:ZYNQ-7020 一、项目概述 ^^^^这篇教程主要介绍ZYNQ中Linux下EMIO的使用,之前有同学在群里问到过,正好有时间好好整理一下,EMIO的使用。这篇文章主要介绍EMIO端口的配置和编号,不涉及具体的端口的输出和输入程序设计,有需要的看如下文章: 链接: 上篇文章. 二、vivado工程设计 1、第一步是建立vivado工程. ^^^^具体的操作步骤各位看官应该都知道了,这里只介绍关键的引脚分配。打开vivado工 阅读详情

相关推荐

ZYNQ PS端GPIO开发实战:从MIO到EMIO的Vivado与SDK全流程解析

本文详细解析了ZYNQ PS端GPIO开发的全流程,重点对比MIO与EMIO的本质区别及适用场景。通过Vivado环境搭建、处理器系统配置、硬件设计到SDK软件开发的实战演示,帮助开发者掌握从MIO直接控制到EMIO灵活引出的完整解决方案,提升FPGA嵌入式开发效率。

jenkins8butler的博客 286

ZYNQ PL通过EMIO ETHE1外接PHY由GMII转RGMII

1,设置EMIO方式引出ETHE1 2,从GMII过度到RGMII GMII: 发送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er 接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er RGMII: 发送 tx_clk tx_d[3:0] tx_ctrl 接收 rx_clk rx_d[3:0] rx_ctrl 首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1

wangjie36的博客 1万+

别再只盯着MIO了!深入理解Zynq EMIO:原理、地址映射与SDK API实战解析

本文深入解析Zynq EMIO的硬件架构与SDK实战应用,详细讲解其工作原理、地址映射机制及Vivado配置流程。通过SDK API实战演示,展示如何高效利用EMIO扩展PS的I/O能力,实现与PL的高性能通信,为嵌入式系统开发提供实用指导。

weixin_30882895的博客 261

ZYNQ之EMIO详解与例程说明

本文用于讲解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的电平。......

风中月隐的博客——FPGA加速者 1万+

Zynq PS与FPGA联调入门:5分钟搞定EMIO信号从配置到SDK驱动的完整流程

本文详细介绍了Zynq PS与FPGA联调中EMIO信号的完整配置流程,从Vivado硬件设计到SDK软件驱动的实现。通过5分钟快速入门指南,帮助工程师解决PS与PL通信中的常见问题,提升Zynq开发效率。重点解析了EMIO信号配置、引脚约束、驱动代码编写及调试技巧。

weixin_27038245的博客 135

ZYNQ ZCU102 SPI自测避坑实录:手把手教你搞定EMIO连接与SDK调试

本文详细解析了ZYNQ ZCU102开发板SPI接口的EMIO连接与SDK调试实战经验,重点揭示了EMIO信号线处理、Vivado配置陷阱及SDK API使用技巧。通过对比PS端MIO/EMIO与PL端AXI QSPI方案差异,提供硬件配置规范、代码模板和故障排查工具箱,帮助开发者高效完成SPI通信开发。

weixin_42628280的博客 344

FPGA - ZYNQ 基于EMIO的PS和PL交互

在sdk开发中,sdk软件中提供了一些例程,在学习和开发的过程中可以查看学习这些例程更好的帮助我们学习和开发。

博客 8966

告别迷茫!Vivado 2017.4 + ZYNQ-7000 EMIO配置全流程,从Block Design到SDK调试一气呵成

本文详细介绍了Vivado 2017.4与ZYNQ-7000 EMIO配置的全流程,从Block Design创建到SDK调试一气呵成。通过GPIO扩展和EMIO接口的灵活应用,开发者可以高效协调PS和PL资源,实现硬件与软件的完美配合。特别针对xc7z045ffg676开发板提供了实用例程和调试技巧,帮助FPGA开发者快速上手。

weixin_30312563的博客 262

Zynq开发实践(SDK之PS接口扩充EMIO)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         前面说过,在zynq ps里面固化了很多的ip,这些ip用不用都在那里放着。但是我们也知道,一颗soc的封装上,外设pin脚的数量都是有限的。就拿7020来说,它的ps只有54个。这种情况下,如果ps的全部54个pin都用完了,那就只能借用pl的引脚了,这就是所谓的ps接口扩充,也是所谓的emio。

嵌入式-老费,一个分享专业嵌入式知识的blog 824

Zynq-PS-SDK(2) 之 EMIO 实战:从硬件约束到软件驱动的完整流程

本文详细介绍了Zynq芯片中EMIO(Extended Multiplexed I/O)的完整开发流程,从硬件约束到软件驱动实现。通过Vivado配置、SDK驱动开发及调试技巧,帮助开发者掌握PS与PL之间的GPIO控制,特别适合需要动态配置硬件功能的场景。

weixin_30631587的博客 239

ZYNQ ZCU102 SPI自测避坑指南:从EMIO管脚分配到SDK代码调试的完整流程

本文详细解析了ZYNQ ZCU102开发板SPI接口的EMIO配置与SDK调试全流程,重点揭示了信号分配、PL端配置和代码调试中的常见陷阱。通过实战经验分享和关键代码示例,帮助开发者规避SPI开发中的典型错误,实现稳定的高速数据传输。

weixin_30562507的博客 283

Zynq EMIO引脚编号全解析:从Vivado配置到SDK编程的完整指南

本文全面解析Zynq芯片EMIO引脚编号规则,提供从Vivado配置到SDK编程的完整指南。详细介绍了EMIO基础概念、Vivado配置实战、SDK编程应用及高级优化技巧,帮助开发者解决EMIO引脚编号混乱问题,提升嵌入式系统开发效率。

uuu88的博客 211

别再只盯着MIO了!手把手教你用Vivado 2017.4和SDK玩转ZYNQ-7000的EMIO(附LED+KEY完整例程)

本文详细介绍了如何在Vivado 2017.4和SDK环境下开发ZYNQ-7000的EMIO功能,通过LED输出和按键输入的双功能例程,深入解析EMIO的核心概念、配置步骤及优化技巧。内容涵盖硬件设置、软件开发到系统调试的全流程,帮助开发者高效利用EMIO扩展GPIO资源,实现PS与PL的协同设计。

weixin_42521843的博客 318

Zynq-PS-SDK(2) 之 EMIO 使用

目录 1、Descriptions 1、Usage 1.1、PL 配置 1.2、PS 代码 1、Descriptions 在前面一篇里面写了《Zynq-PS-SDK 之 MIO 使用》,MIO 可以理解为 PS 端(ARM 端)的硬连线到外部,Zynq 也提供了一种方式,从 PS 端连到 PL 端的 IO,称之为 EMIO(External 的意思); GPIO Bank 和前面的一些概念这里不再重复,直接参考《Zynq-PS-SDK 之 MIO 使用》;这里看到 EMIO 有 32.

StephenZhou 5403

ZYNQ PS端IIC实战:手把手教你用EMIO配置ADV7611 HDMI接收芯片(Vivado 2017.4 + SDK)

本文详细介绍了如何在ZYNQ PS端使用EMIO配置IIC控制器驱动ADV7611 HDMI接收芯片的全过程。从Vivado硬件工程搭建到SDK软件编程,提供了完整的寄存器配置例程和优化技巧,帮助开发者高效实现稳定通信。

weixin_30859423的博客 286

ZYNQ ZCU102 SPI实战避坑:从EMIO管脚分配到SDK代码调试的完整流程

本文详细解析了ZYNQ ZCU102开发板上SPI接口的完整开发流程,重点探讨了EMIO模式下的硬件配置、PL管脚分配策略以及SDK软件调试技巧。通过对比MIO与EMIO实现方式的优劣,提供实用的避坑指南,帮助工程师高效完成从硬件设计到软件调试的全过程,特别适合需要灵活使用SPI接口的嵌入式开发者。

weixin_30614109的博客 199

从Vivado配置到SDK代码:ZYNQ EMIO扩展LED闪烁保姆级教程(附避坑点)

本文提供了一份完整的ZYNQ EMIO控制PL端LED的实战指南,涵盖从Vivado环境配置到SDK代码编写的全流程。详细介绍了Block Design构建、ZYNQ处理器配置、PL端引脚约束以及常见问题排查,帮助开发者快速掌握EMIO扩展技术,实现高效的嵌入式系统开发。

weixin_30367873的博客 380

机器学习——Anaconda下载安装教程

Anaconda详细下载安装教程

2401_83693485的博客 3064
上一篇: RAM IP核
下一篇: FPGA 串口通信
暴风雨中的白杨
博客等级 码龄6年 1070粉丝 162原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值