文章目录

  • 1. 前言
  • 2. MIO介绍
  • 3. Vivado工程编写
  • 4. Vitis工程编写
  • 5. 实验小结
    • A. 附录
    • B. 工程源码下载

1. 前言

本实验介绍如何使用ZYNQ芯片PS端的MIO。MIO是ZYNQ芯片PS端的基础外设IO,可以连接诸如SPI,I2C,UART,GPIO等,通过Vivado软件设置,软件可以将信号通过MIO导出,同样也可以将信号通过EMIO(后续试验会介绍EMIO)连接到PL端的引脚上。

MIO共有两个BANK,BANK0有16个引脚,BANK1为38个引脚,共54个引脚,两个BANK的电压需要注意选择正确。
本实验通过实现PS端LED灯的闪烁演示MIO的操作。


2. MIO介绍

先来了解GPIO的BANK分布,在UG585文档GPIO一章中可以看到GPIO是有4个BANK,注意与MIO的BANK区分。

GPIO的BANK0控制32个信号,BANK1控制22个信号,总共是MIO的54个引脚,也就是诸如SPI、I2C、USB、SD等PS端外设接口;

BANK2和BANK3共能控制64个PL端引脚,注意每一组都有三个信号,输入 EMIOGPIOI,输出EMIOGPIOO,输出使能EMIOGPIOTN,类似于三态门,共192 个信号。可以连接到PL端引脚,通过PS控制信号。

3. Vivado工程编写

虽然本实验仅仅使用了FPGA的PS端,但是还要建立一个Vivado工程,用来配置PS管脚。虽然PS端的ARM是硬核,但是在ZYNQ当中也要将ARM硬核添加到工程当中才能使用。本实验使用的Vivado版本为Vivado2021.1。

(1)本实验使用的Vivado工程延用《ZYNQ 串口打印输出——FPGA Vitis篇》中使用的Vivado工程,大家可以查看该文章来了解Vivado工程的建立。

(2)Vivado工程唯一需要修改的地方如下:控制PS的MIO是需要将GPIO MIO 勾选,如下图所示。

(3)实验使用的硬件为ZedBoard,根据ZedBoard的原理图可知,MIO bank0上的 MIO7管脚连接了1个LED外设。


因此,根据原理图,需要将Bank0 I/O Voltage设置为LVCMOS3.3V,由于该管脚接的为LED外设,可以将“Speed”选为“slow”。

(4)至此,Vivado工程编写结束,保存工程,点击Vivado “Flow Navigator”一栏里的“Generate Bitstream”,等待Vivado生成好bit文件后,在菜单栏“File -> Export -> Export Hardware…”导出硬件信息(.xsa文件),这里就包含了PS端的配置信息。该步骤如有疑问,可以参考以前的文章《ZYNQ串口打印输出——FPGA Vitis篇》。

4. Vitis工程编写

(1)点击 Vivado 菜单“Tools-> Launch Vitis IDE”,启动 Vitis。
(2)新建 Vitis平台工程。Vitis工程的建立可以参考以前的文章《ZYNQ串口打印输出——FPGA Vitis篇》。
(3)下图为GPIO的控制框图,实验中会用到输出部分的寄存器,数据寄存器 DATA,数据掩码寄存器MASK_DATA_LSW,MASK_DATA_MSW,方向控制寄存器 DIRM,输出使能控制器OEN。

UG585手册中,在“Appx. B: Register Details”中的“General Purpose I/O (gpio)”能查询到关于GPIO寄存器的详细使用说明。

(4)实验中可能会用到的寄存器:
数据掩码寄存器: 例如接LED的MIO 7管脚在GPIO的BANK0,可以通过以下寄存器来屏蔽其他BANK0中的其他31位。

方向寄存器: 控制数据的方向

输出使能寄存器:

数据寄存器:

(5)新建 Vitis应用工程:一开始编写代码可能会无从下手,我们可以导入Xilinx提供的example工程。打开刚建立的Vitis工程,点击“Board Support Package”,通过选择“ps7_gpio_0”的“Import Examples”,可以导入官方提供的PS端GPIO例程。

由于本实验只是通过PS端的GPIO来点亮LED灯,不涉及中断使用,因此我们选择“xgpiops_polled_example”工程。

(6)这个example工程是测试PS端MIO的输入输出的,由于ZedBoard开发板PS端的LED是MIO7,因此我们需要在文件中修改Output_pin为7,测试 MIO7的LED灯。

(7)编译工程,将工程下载到硬件板卡上(编译和下载方式见《ZYNQ 串口打印输出——FPGA Vitis篇》),打开串口助手。
实验结果为板卡的MIO7灯会闪烁;

串口助手打印信息如下:

注:Xilinx官方MIO测试工程里也包含了MIO输入测试代码,用户要将其注释掉,以免串口打印错误信息同时会阻塞“main”主函数正常运行。

5. 实验小结

本实验介绍了ZYNQ如何使用PS端的MIO进行输入输出控制。
实验使用Xilinx官方的例子比较方便,但是它的代码看起来比较臃肿,我们可以通过学习它的方法,简化下工程。简化的工程见附录。

A. 附录

本小结介绍如何简化官方的工程,来建立一个MIO输出控制的测试工程。
(1)延用第4章建立的Vitis平台工程。
(2)新建Vitis应用工程,这里我们套用官方的“Hello World”模板工程。

(3)修改Vitis应用工程的代码:在“Hello World”模板工程的“helloworld.c”文件中修改。
程序步骤如下:

  1. 初始化GPIO;
  2. 设置方向;
  3. 输出使能;
  4. 控制GPIO输出值;

代码修改如下:

(4)编译工程,将工程下载到硬件板卡上。实验结果为LED每秒会闪烁一次。

B. 工程源码下载

如果大家对我们的文章感兴趣,可以关注我们的公众号:“FpgaHome”:
该工程对应的源码可以通过关注该微信公众号,在公众号输入ZYNQ_PS_MIO来获取工程的下载链接,工程采用的是Vivado2021.1版本。


参考文献:
[1] http://www.alinx.com.cn/.
[2] Zynq-7000 SoC Technical Reference Manual(UG585). Xilinx官方文档
[3] ZYNQ 串口打印输出——FPGA Vitis篇. 图灵研究院

ZYNQ PS端MIO的使用——FPGA Vitis篇相关推荐

  1. ZYNQ AXI GPIO中断实验——FPGA Vitis篇

    文章目录 1. 前言 2. Vivado工程的编写 2.1 Block Design工程设计 2.2 创建XDC管脚约束 3. Vitis工程的编写 4. 实验小结 5. 工程源码下载 1. 前言 使 ...

  2. ZYNQ PS端输出不准确时钟供PL使用

    1.1 ZYNQ PS端输出不准确时钟供PL使用 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)ZYNQ PS端输出不准确时钟供PL使用: 5)结束语. 1.1.2 本 ...

  3. ZYNQ PS端输出无效时钟供PL使用

    1.1 ZYNQ PS端输出无效时钟供PL使用 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)ZYNQ PS端输出无效时钟供PL使用: 5)结束语. 1.1.2 本节引 ...

  4. ZYNQ HDMI输出实验——FPGA Vitis篇

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. 前言 1.1 HDMI介绍 1.2 TMDS介绍 1.3 HDMI传输周期 2. Vivado工程的编写 3. Vit ...

  5. ZYNQ PS端模块读书笔记-中断

    作者:ShownSun 工作室:时沿科技 文章目录 ZYNQ PS端模块读书笔记-中断 0 引言 1 环境 1.1 私有.共享和软件中断 1.2 通用中断控制器 1.3 复位和时钟 1.4 模块框图 ...

  6. ZYNQ PS端模块读书笔记-XADC

    作者:ShownSun 工作室:时沿科技 文章目录 ZYNQ PS端模块读书笔记-XADC 1 介绍 1.1 特色 1.2 系统视角 1.3 PS-XADC接口框图 1.4 编程指南 2 功能描述 2 ...

  7. 自定义AXI IP核实验——FPGA Vitis篇

    文章目录 1. 前言 2. Vivado工程的编写 2.1 创建自定义IP 2.2 添加自定义IP到工程 3. Vitis工程的编写 A. 工程源码下载 1. 前言 Xilinx官方为大家提供了很多I ...

  8. ZYNQ PS GPIO MIO 基础知识

    CLG400------XC7Z010 500 501 502 属于ps端bank 502 部分的引脚 专门用于连接ddr 500 501 部分引脚 用于连接MIO 500 + 501 的引脚个数为5 ...

  9. zynq PS端通过EMIO访问PL资源

    最近在研究zynq 中EMIO的使用,看了许多文章都是裸跑的,没有将zynq ARM的功能发挥出来,此处将介绍如何在linux下操作PL的资源,本文通过gpio-leds驱动操作emio管脚进行点灯实 ...

最新文章

  1. linux bash sh,linux bash shell.sh编程实例
  2. oracle字符串转in方法,Oracle 逗号分割的字符串转换为可放入in的语句
  3. Python 技巧篇 - 英文单词首字母大小写转换功能实例演示,字符串切片实现
  4. 知识图谱学习笔记-非结构化数据处理
  5. CV之FDFA:利用MTCNN的脚本实现对LFW数据集进行FD人脸检测和FA人脸校准
  6. 磁盘剩余空间策略_MySQL磁盘消耗迅猛掌握这点就够了,包你事半功倍
  7. Geodatabase - 修改字段别名(Field Alias)
  8. docker gogs安装
  9. 关于前端程序员写前端用什么框架更好?
  10. 《深入浅出Python》2 共享你的代码
  11. 负载电流对电感值和电感尺寸的影响 // 《精通开关电源设计》P50:负载电流对电感值和电感尺寸的影响
  12. 调试bootmgrwinload vistawin7 x86x64
  13. 期刊分类abcde_ABCD期刊分类目录
  14. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法
  15. 论文阅读-Face X-ray for More General Face Forgery Detection
  16. 数据分析SQL环比增长率、同比增长率
  17. LSD-SLAM运行过程及报错 “what(): Duration is out of dual 32-bit range“
  18. 关于寒武纪的前世今生与未来
  19. obs 推流编码在哪设置_直播软件OBS推流的设置方法
  20. 《第一堂棒球课》:王牌捕手·棒球2号位

热门文章

  1. GitHub上下载量突破100000+阿里巴巴的开源项目
  2. c语言m62429音量控制程序,音量控制M62446的驱动C程序
  3. 抖音矩阵系统/短视频矩阵系统开发分享
  4. python 批量下载 代码_python 批量下载文件
  5. 使用clickhouse时mysql表引擎从mysql获取数据时时区自动加八小时[已解决]
  6. 从“多品牌”到“多品类”,家电行业的颠覆才刚开始
  7. html5地区级联选择,js 省地市级联选择
  8. 自考总结(运筹学和管经)
  9. React Native for OS X发布
  10. d3d9查询(Queries Direct3d9)