0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十八章PS端EMIO的使用

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-01-30 10:05 次阅读

原创声明:

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。

适用于板卡型号:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

实验Vivado工程目录为“ps_emio/vivado”。

实验vitis工程目录为“ps_emio/vitis”。

如果想用PS点亮PL的LED灯,该如何做呢?一是可以通过EMIO控制PL端LED灯,二是通过AXI GPIO的IP实现控制。本章介绍如何使用EMIO控制PL端LED灯的亮灭。同时也介绍了,利用EMIO连接PL端按键控制PL端LED灯。

1. 原理介绍

先来了解GPIO的BANK分布,从图中可知BANK0~BANK2的MIO有78个。BANK3~BANK5的EMIO有96个,本章就是采用EMIO控制PL端LED。

pIYBAGAKMtWAAnZlAACl3gJi4K8830.jpg

FPGA工程师工作内容

以下为FPGA工程师负责内容。

2. Vivado工程建立

1)以ps_hello工程为基础,另存为一个名为ps_emio的工程,打开ZYNQ配置,把GPIO EMIO勾选上。利用PL端的1个LED,1个按键,在MIO配置中选择EMIO的位宽为2位,配置结束,点击OK。

o4YBAGAKMtaAZ1PsAAB6FxzeNKM756.jpg

2)点击多出的GPIO_0端口右键选择Make External,将端口信号导出

pIYBAGAKMtaASK96AACF1KU8yaQ524.jpg

3)点击引脚并修改引脚名称为emio,也可以根据自己需求修改名称。保存设计。

pIYBAGAKMteAM_tqAACz8Xd7Vco111.jpg

4)点击xx.bd右键选择Generate Output Products,重新生成输出文件

o4YBAGAKMtiAIHw1AABsP0aq0M0697.jpg

5)结束后,顶层文件会更新出新的管脚,下面需要对其进行引脚绑定

pIYBAGAKMtmARWQEAACM7asTL78018.jpg

3. XDC文件约束PL管脚

1)新建XDC文件,绑定PL端引脚

o4YBAGAKMtmAER-EAABdBbeFzqs927.jpg

设置文件名称为emio

pIYBAGAKMtmAbWjjAAB0hgFyrnw784.jpg

2)emio.xdc添加一下内容,端口名称一定要和顶层文件端口一致

##################Compress Bitstream############################set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]set_property IOSTANDARD LVCMOS33 [get_ports {emio_tri_io[*]}]#pl ledset_property PACKAGE_PIN W13 [get_ports {emio_tri_io[0]}]#pl keyset_property PACKAGE_PIN AA13 [get_ports {emio_tri_io[1]}]

3)生成bit文件

o4YBAGAKMtqAGZ_0AAAKb9wKyjA142.jpg

4)虽然说没有用到PL端的逻辑,但是用到了PL端的引脚,因此导出硬件要选择“Include bitstream”

pIYBAGAKMtuAKM4AAAA-hieL5ac016.jpg

软件工程师工作内容

以下为软件工程师负责内容。

4. Vitis程序编写

4.1 EMIO点亮PL端LED灯

下图为GPIO的控制框图,实验中会用到输出部分的寄存器,数据寄存器DATA,数据掩码寄存器MASK_DATA_LSW,MASK_DATA_MSW,方向控制寄存器DIRM,输出使能控制器OEN。

o4YBAGAKMtuAP2KEAACcPBmy4CE401.jpg

一开始编写代码可能会无从下手,我们可以导入Xilinx提供的example工程,在BSP里找到psu_gpio_0,点击Import Examples

pIYBAGAKMtyAB3qiAACQ3p9J9I0714.jpg

在弹出窗口选择“xgpiops_polled_example”,点击OK

o4YBAGAKMtyAA0OpAABC5Y-aRuk730.jpg

会出现一个新的APP工程

pIYBAGAKMt2AcAqCAABP4OZjSjQ155.jpg

1)这个example工程是测试PS端MIO的输入输出的,由于LED是EMIO引出来的,EMIO的MIO号是从78开始的,需要在文件中修改Output_pin为78,测试LED灯。

o4YBAGAKMt2AJMexAABqZXAhHXc661.jpg

由于只测试LED灯,也就是输出,我们把输入功能注释掉。保存文件。

pIYBAGAKMt2ACDJJAAAiCJ9vNLg001.jpg

2)编译工程

o4YBAGAKMt6ACWrGAACpn1Dyeyw098.jpg

3)Run AsLaunch on Hardware(Single Application Debug),下载结束后,即可看到PS_LED快速闪烁16次

pIYBAGAKMt-AKLQXAADPP3pEjo0441.jpg

4)虽然用官方的例子比较方便,但是它的代码看起来比较臃肿,我们可以通过学习它的方法,自己简化写一遍。我们新建一个APP工程。可以在空白处右键NewApplication Project。在ps_led_test的helloworld.c中修改。其实程序步骤很简单,初始化GPIO设置方向输出使能控制GPIO输出值。

o4YBAGAKMuCAEZ-PAABThGV2JBs961.jpg

第一页跳过

pIYBAGAKMuCAD603AACMtsm0KW4994.jpg

选择硬件描述工程

o4YBAGAKMuGAQZEYAACWywyzuxU581.jpg

填入工程名称,并选择相应的CPU

pIYBAGAKMuGAb1cDAAB0n1uWP5Y450.jpg

下一步

o4YBAGAKMuKAZ5A0AABlY64AI-Q578.jpg

模板选择Hellow World即可

o4YBAGAKMuKAUrezAABrNPb4nSE608.jpg

5)可以看到多了一个APP工程,仍然是基于名为standalone on psu_cortexa53_0的BSP,也就是一个Domain,与前面的example工程共用一个BSP

pIYBAGAKMuOAEGfGAAB7-AD1fUg588.jpg

6)可以将例程的代码复制到helloworld.c中,保存并Build Project

o4YBAGAKMuOAMQl3AAA0GECnElM288.jpg

7)编译并下载

pIYBAGAKMuOACav1AADLI3Z6tIw077.jpg

即可看到LED1闪烁。

4.2 EMIO实现PL端按键中断

前面介绍了EMIO作为输出控制LED灯,这里讲一下利用EMIO作为按键输入控制LED灯。

1)通过ug1085文档看下GPIO的结构图,中断的寄存器:

INT_MASK:中断掩码

INT_DIS: 中断关闭

INT_EN: 中断使能

INT_TYPE: 中断类型,设置电平敏感还是边沿敏感

INT_POLARITY: 中断极性,设置低电平或下降沿还是高电平或上升沿

INT_ANY: 边沿触发方式,需要INT_TYPE设置为边沿敏感才能使用

设置中断产生方式时需要INT_TYPE、INT_POLARITY、INT_ANY配合使用。具体寄存器含义请参考ug1085部分。

o4YBAGAKMtuAP2KEAACcPBmy4CE401.jpg

2)本实验设计为按下按键LED灯亮,再按下LED灭。

主程序设计流程如下:

GPIO初始化设置按键和LED方向设置产生中断方式设置中断打开中断控制器打开中断异常打开GPIO中断判断KEY_FLAG值,是1,写LED

中断处理流程:

查询中断状态寄存器判断状态清除中断设置KEY_FLAG值

3)新建名为emio_key的工程,模板为hello world,拷贝例程的程序

o4YBAGAKMuSAVxW2AAApIJggpI4628.jpg

4)定义PS按键编号为79,PS LED为78

pIYBAGAKMuWAVgiOAAAZBG__7Ik597.jpg

5)在main函数中,设置LED和按键,将按键中断类型设置为上升沿产生中断。在本实验中,即按键信号的上升沿产生中断。

o4YBAGAKMuWAARJFAAAq4ApzeUU930.jpg

6)中断控制器设置函数IntrInitFuntions是参考PS定时器中断实验所做,而下面的语句是设置中断优先级和触发方式。即操作ICDIPR和ICDICFR寄存器。

pIYBAGAKMuWAWkMRAAALVZjzd4o828.jpg

7)在中断服务程序GpioHandler中,判断中断状态寄存器,清除中断,并将按键标志置1。

o4YBAGAKMuaASaGIAAASy8ZDBWs855.jpg

8)在main函数中,判断按键标志key_flag,向LED写入数据。

pIYBAGAKMuaATsVgAAAQSdr2-20856.jpg

9)编译工程并下载程序,观察实验现象,按下KEY1,就可以控制LED1灯亮灭。

5. 固化程序

前面介绍过没有FPGA加载文件情况下如何生成固化程序(详情参考“体验ARM,裸机输出”Hello World”一章)。本章内容生成了FPGA的加载文件,在这里演示一下如何生成固化程序。

与前面一样,也是点击system,右键Build Project即可

o4YBAGAKMueAUqHWAABhQvj6GDA450.jpgpIYBAGAKMuiASs96AAAq2WUPNB0507.jpg

软件会自动添加三个文件,第一个引导程序fsbl.elf,第二个为FPGA的bitstream,第三个为应用程序xx.elf,下载方法与前面一样,不再赘述。

6. 引脚绑定常见错误

1)在block design设计中,比如下图,GPIO模块的引脚名设置为了leds和keys,很多人想当然的在XDC里按照这样的名称绑定引脚。

o4YBAGAKMumAV-FuAABiQ2F7rY0601.jpg

如果打开顶层文件就会发现引脚名称是不一样的,一定要仔细检查,以顶层文件里的引脚名称为准。

pIYBAGAKMuqAcU7RAABrGzFikcw470.jpg

否则就会出现以下引脚未绑定的错误

o4YBAGAKMuqAFn-mAACPfcApyxs012.jpg

2)如果是手写XDC文件,切记注意空格,这也是非常常见的错误

pIYBAGAKMuqAX5zGAAAXQ1zS29E935.jpg

7. 本章小节

本章进一步学习了PS端的EMIO的使用,虽然将EMIO连接到了PL端的引脚上,但Vitis中的用法还是一样的,从这个例子我们也可以看出,一旦与PL端发生了联系,就需要生成bitstream,虽然几乎没有产生逻辑。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21653

    浏览量

    601520
  • 按键
    +关注

    关注

    4

    文章

    223

    浏览量

    57561
  • GPIO
    +关注

    关注

    16

    文章

    1191

    浏览量

    51879
  • Zynq
    +关注

    关注

    9

    文章

    607

    浏览量

    47118
  • MPSoC
    +关注

    关注

    0

    文章

    197

    浏览量

    24236
收藏 人收藏

    评论

    相关推荐

    ZYNQ Ultrascale+ MPSOC FPGA教程】第二十九章PLAXI GPIO的使用

    使用zynq最大的疑问就是如何把PS和PL结合起来使用,在其他的SOC芯片中一般都会有GPIO,本实验使用一个AXI GPIO的IP核,让PS通过AXI总线控制PL
    的头像 发表于 02-01 10:06 6675次阅读
    【<b class='flag-5'>ZYNQ</b> <b class='flag-5'>Ultrascale+</b> <b class='flag-5'>MPSOC</b> <b class='flag-5'>FPGA</b>教程】<b class='flag-5'>第二十</b>九章PL<b class='flag-5'>端</b>AXI GPIO的使用

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制器

      如何调试Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+
    发表于 01-07 16:02

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制器

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?
    发表于 01-22 06:29

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    发表于 02-02 07:53

    闲话Zynq UltraScale+ MPSoC(连载1)

    Zynq-7000,这款SoC功能显得更加强劲:最显著的变化是新加入了GPU和视频编解码器,PS的高速接口更加丰富。按照Xilinx官方的说法,Zynq
    发表于 02-08 08:24 722次阅读
    闲话<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>(连载1)

    闲话Zynq UltraScale+ MPSoC(连载5)

    作者:Hello,Panda Part3 I/O资源 和Zynq-7000相比较,Zynq UltraScale+ 增强了PS的IO性能;
    发表于 02-08 08:29 697次阅读
    闲话<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>(连载5)

    Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞

    本文试图搞清楚在 Xilinx 基于 ARM 的 Zynq-7000、Zynq UltraScale+ MPSoCZynq
    发表于 06-28 15:53 2660次阅读

    Zynq UltraScale+ MPSoC的发售消息

    Zynq®UltraScale+MPSoC,现已开始发售。视频向您重点介绍了Xilinx UltraScale +产品组合的第一位成员
    的头像 发表于 11-27 06:47 3568次阅读

    米尔科技Zynq UltraScale+ MPSoC技术参考手册介绍

    Zynq UltraScale+ MPSoC是Xilinx推出的第二代多处理SoC系统,在第一代Zynq-7000的基础上做了全面升级,在单
    的头像 发表于 11-18 11:03 3116次阅读
    米尔科技<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>技术参考手册介绍

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?

    Zynq UltraScale+ MPSoC VCU DDR 控制器是一款专用 DDR 控制器,只支持在 Zynq UltraScale+
    发表于 02-23 06:00 15次下载
    如何调试 <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b> VCU DDR 控制器?

    米尔电子zynq ultrascale+ mpsoc底板外设资源清单分享

    米尔电子推出的国内首款zynq ultrascale+ mpsoc平台核心板(及开发板):MYC-CZU3EG吸引了人工智能、工业控制、嵌入式视觉、ADAS、算法加速、云计算、有线/无线通信等
    发表于 01-07 15:20 3次下载
    米尔电子<b class='flag-5'>zynq</b> <b class='flag-5'>ultrascale+</b> <b class='flag-5'>mpsoc</b>底板外设资源清单分享

    ZYNQ Ultrascale+ MPSoC系列FPGA芯片设计

    基于 Xilinx 公司ZYNQ Ultrascale+ MPSoC系列 FPGA 芯片设计,应用于工厂自动化、机器视觉、工业质检等工业领域
    发表于 11-02 14:35 1552次阅读

    Zynq UltraScale+ MPSoC中的隔离方法

    电子发烧友网站提供《Zynq UltraScale+ MPSoC中的隔离方法.pdf》资料免费下载
    发表于 09-13 17:11 1次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>中的隔离方法

    Zynq UltraScale+ MPSoC的隔离设计示例

    电子发烧友网站提供《Zynq UltraScale+ MPSoC的隔离设计示例.pdf》资料免费下载
    发表于 09-13 11:28 3次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的隔离设计示例

    Zynq UltraScale+ MPSoC验证数据手册

    电子发烧友网站提供《Zynq UltraScale+ MPSoC验证数据手册.pdf》资料免费下载
    发表于 09-15 10:13 0次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>验证数据手册