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

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

3天内不再提示

【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十九章PL端AXI GPIO的使用

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-02-01 10:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

原创声明:

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

适用于板卡型号:

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

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

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

可能有些人就会问,怎么又在讲GPIO,LED灯,觉得太繁琐,但是GPIO是ZYNQ的基本操作,本教程力求把各种方法分享给大家,PS端的MIO,EMIO,PL端的axi gpio,包括输入输出两个方向,以及PS与PL的基本操作,所以还是希望大家耐心学习。

前面讲过如何用的是PS端的EMIO点亮PL端LED灯,但是并没有与PL端产生交互。本章介绍另外一种控制方法,在ZYNQ当中可以使用AXI GPIO,通过AXI总线控制PL端的LED灯。同时也介绍了PL端按键的使用。

使用zynq最大的疑问就是如何把PS和PL结合起来使用,在其他的SOC芯片中一般都会有GPIO,本实验使用一个AXI GPIO的IP核,让PS端通过AXI总线控制PL端的LED灯,实验虽然简单,不过可以让我们了解PL和PS是如何结合的。

1. 原理介绍

一个AXI GPIO模块有两个GPIO,分别是GPIO和GPIO2,也就是channel1和channel2,为双向IO。

o4YBAGAKMzKAY6pDAACmFyv6F58317.jpgAXI GPIO结构

FPGA工程师工作内容

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

2. Vivado工程建立

1)打开“ps_hello”另存为一个名为“ps_axi_gpio”Vivado工程,表示PS通过AXI总线控制gpio

pIYBAGAKMzOAGeCGAAA59aDj8iY856.jpg

“Create project subdirectory”勾选后会在目录下创建子目录,勾选“Include run results”会包含编译后的结果

o4YBAGAKMzOAOXfTAAA8FI_NQ9c110.jpg

2)双击xx.bd打开block design

pIYBAGAKMzSAfyqRAACcpUntlPc415.jpg

添加AXI GPIO

3) 添加一个AXI GPIO的IP 核

pIYBAGAKMzSAQGKGAACdVkRTz8g117.jpg

4)双击刚才添加的“axi_gpio_0”配置参数

pIYBAGAKMzWAaKLaAABInvRCIFA965.jpg

5)选择“All Outputs”,因为这里控制LED,只要输出就可以了,“GPIO Width”填1,控制1颗LED,点击OK。如果想使用channel2,需要把”Enable Dual Channel”打开,也就使能了GPIO2。

o4YBAGAKMzWAJlJ_AACA_2-QQxQ387.jpg

6)点击“Run Connection Automation”,可以完成部分自动连线

pIYBAGAKMzaAJsGRAABPqHHFHJ0030.jpg

7)选择要自动连接的端口,这里全选,点击OK

o4YBAGAKMzeABI1QAABSVmWmSWA453.jpg

8)点击“Optimize Routing”,可以优化布局,同时可以看到多了两个模块,一个是Processor System Reset模块,为同步复位模块,提供同一时钟域的复位信号。AXI Interconnect模块为AXI总线互联模块,用于AXI模块的交叉互联。

pIYBAGAKMzeAY6DoAABbSSSffDA584.jpg

在这个应用中,我们可以看到用到了ZYNQ的HPM0_LPD口,此接口用于访问PL端数据,大部分应用中是为了配置PL端模块的寄存器

o4YBAGAKMziAZM--AABQUi9JHns252.jpg

复位信号由ZYNQ的复位输出提供,最好是每个时钟域都加一个复位模块,可以根据模块下面的名称搜索添加。

pIYBAGAKMziAGZlyAABOYBnbw-w751.jpg

9)修改GPIO端口的名称

o4YBAGAKMzmAKvYPAACPr-eO3Vc697.jpg

10)名称修改为leds

pIYBAGAKMzqAAJJvAACNtJrXWOo194.jpg

11)再添加一个AXI GPIO,连接PL端按键,配置GPIO参数,都为输入,宽度为1,使能中断

o4YBAGAKMzuAVULcAAB_vG_zTWE596.jpg

12)使用自动连接

pIYBAGAKMzuARiKZAABT03zt0qs818.jpg

13)再把端口名称改为keys

o4YBAGAKMzyAf4bZAACbeOzydCM968.jpg

14)由于是PL端过来的中断,在这里需要配置ZYNQ处理器的中断,设置IRQ0[0-7]为1

pIYBAGAKMz2ACrd3AABtCiLEb1Y810.jpg

15)连接ip2intc_irpt到pl_ps_irq

o4YBAGAKMz2ANcVFAABiV68BooM572.jpg

16)保存设计,点击xx.bd,右键Generate Output Products

pIYBAGAKMz6APLO7AABXhXKoK1Y716.jpg

17)在生成的Verilog文件中,可以看到有个“leds_tri_o”和”keys_tri_i”的端口,要为他们分配管脚,在绑定引脚时,以这个文件里的引脚名称为准。

o4YBAGAKMz6AJadHAAClZPOBlyU065.jpg

3. XDC文件约束PL管脚

1)创建一个新的xdc约束文件

pIYBAGAKMz-ASDKcAABpvMGo0_c795.jpg

2)文件名称为led

o4YBAGAKMz-AV41rAABzXm6E7ow848.jpg

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

##################CompressBitstream############################set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]set_propertyIOSTANDARDLVCMOS33[get_ports{leds_tri_o[0]}]set_propertyPACKAGE_PINAE12[get_ports{leds_tri_o[0]}]set_propertyIOSTANDARDLVCMOS33[get_ports{keys_tri_i[0]}]set_propertyPACKAGE_PINAF12[get_ports{keys_tri_i[0]}]

4)生成bit文件

pIYBAGAKMz-APW9RAAAKb9wKyjA709.jpg

5)导出硬件FileExportExport Hardware

o4YBAGAKM0CAYq31AACDny6BInc626.jpg

6)因为要用到PL,所以选择“Include bitstream”,点击“OK”

pIYBAGAKM0GAfb5bAAA-hieL5ac498.jpg

软件工程师工作内容

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

4. Vitis程序编写

4.1 AXI GPIO点亮PL端LED灯

1)创建一个platform,创建过程参考“PS端RTC中断实验”一章

o4YBAGAKM0GASiB4AAAiaLMuMXQ266.jpg

2)面对一个不熟悉AXI GPIO,我们如何控制呢?我们可以尝试一下Vitis自带的例程

3)双击“system.mss”,找到“axi_gpio_0”,这里可以点击“Documentation”来看相关文档,这里就不演示,点击“Import Examples”

o4YBAGAKM0GACiQIAACgMps8tic756.jpg

4)在弹出的对话框中有多个例程,从名称中可以猜个大概,这里选第一个“xgpio_example”

pIYBAGAKM0KAGYIfAABMUDOZmfI824.jpg

5)可以看到例程比较简单,短短几行代码,完成了AXI GPIO的操作

o4YBAGAKM0KAUIScAACcXBjD06M572.jpg

里面用到很多GPIO相关的API函数,通过文档可以了解详细,也可以选中该函数,按“F3”查看具体定义。如果有了这些信息你还不能理解如何使用AXI GPIO,说明你需要补充C语言基础。

其实这些函数都是在操作GPIO的寄存器,AXI GPIO的寄存器也不多,主要是两个channel的数据寄存器GPIO_DATA和GPIO2_DATA,两个channel的方向控制GPIO_TRI和GPIO2_TRI,以及全局中断使能寄存器GIER,IP的中断使能IP IER和中断状态寄存器ISR,具体的功能可以看AXI GPIO的文档pg144。

pIYBAGAKM0OAahdsAAB2VzDb7Xo566.jpg

比如进入到设置GPIO方向的函数中,就可以看到是在向GPIO的GPIO_TRI寄存器写数据,从而控制方向。

o4YBAGAKM0OAJjzuAAAbLV_eD0s369.jpg

其他的函数也可以按此法自行研究。

4.2 下载调试

首先编译APP工程,编译方法前面的例程已经介绍过了。虽然Vitis可以提供一些例程,但有一部分例程是需要自己修改的,这个简单的LED例程就不修改了,尝试运行一下,发现不能达到预期效果,甚至提示一些错误。下载后可以看到开发板LED1快速闪烁。

pIYBAGAKM0SAdW1xAAC_csBgRVY911.jpg

4.3 寄存器方式实现

如果觉得Xilinx提供的API函数比较繁琐,效率低,也可以采取操作寄存器的方式实现LED的控制。

比如下面我们新建了axi_led的工程,修改helloworld.c如下。

pIYBAGAKM0WAB3F9AABDfR8nAdw689.jpgpIYBAGAKM0WALDWrAAA15AgtgqI249.jpg

其中定义的基地址GPIO_BASEADDR可以在xx.xsa中里找到

o4YBAGAKM0WAQ4A1AABi_Jzlb2c941.jpg

由于我们只启用了channel1,因此定义了下面的寄存器地址

pIYBAGAKM0aALJ51AAAXiX8MhsU330.jpg

这样直接操作寄存器的方式效率会比调用Xilinx API函数高,而且更直观,对于理解程序如何运行有很大帮助。但是对于大工程来讲,这种方式使用起来就比较复杂,主要依据个人需求选择。

4.4 AXI GPIO之PL端按键中断

前面的定时器中断实验的中断属于PS内部的中断,本实验中断来自PL,PS最大可以接收16个来自PL的中断信号,都是上升沿或高电平触发。

1)和前面的教程一样,在不熟悉Vitis程序编写的情况下,我们尽量使用Vitis自带例程来修改,选择“xgpio_intr_tapp_example”

o4YBAGAKM0aAFQlpAAB3XOk_30w049.jpg

2)需要修改部分代码,按键的axi gpio模块叫做axi_gpio_1,在xparameters.h中找到它的device id

pIYBAGAKM0eAUIDAAABWIRtSooI638.jpgo4YBAGAKM0iATRxhAAAmYl7qMTA304.jpg

3)然后可以修改GPIO和中断号的宏定义如下

pIYBAGAKM0iAWNLOAAAl0B0P3jA244.jpg

4)修改测试延时时间,让我们有足够的时间去按按键

o4YBAGAKM0iAVlPVAAB2JSy1cfo247.jpg

4.5 下载调试

保存文件,编译工程,打开串口终端,下载程序。如果一直不按按键,串口显示“No button pressed.”,如果按下“KEY1”按键显示“Successfully ran Gpio Interrupt Tapp Example”。

pIYBAGAKM0mAa4BbAAB8ElSAtVI039.jpg

5. 实验总结

通过实验我们了解到PS可以通过AXI总线控制PL,但几乎没有体现出ZYNQ的优势,因为对于控制LED灯,无论是ARM还是FPGA,都可以轻松完成,但是如果把LED换成串口呢,控制100路串口通信,8路以太网等应用,我想还没有哪个SOC能完成这种功能,只有ZYNQ可以,这就是ZYNQ和普通SOC的不同之处。

PL端可以给PS发送中断信号,这提高了PL和PS数据交互的效率,在需要大数量、低延时的应用中需要用到中断处理。

到本章结束已经把ZYNQ的PS端MIO、EMIO,PL端GPIO如何使用讲完了,包括输入和输出以及中断处理,这些都是最基础的操作,大家还是要多多思考,理解清楚。

6. 知识点分享

1)在设计好后,可以看到Address Editor中,已经为AXI外设分配好了地址空间,其中偏移地址和空间大小是可以修改的。

o4YBAGAKM0qAaIH9AABQWEJpwqI771.jpg

但是修改偏移地址是有限制的,详情参考UG1085文档System Address一章, AXI外设连接到了M_AXI_HPM0_LPD口,在8000_0000到9FFF_FFFF地址空间内修改。

pIYBAGAKM0uActWwAAC6Ru0YDSg577.jpg

2)在使用一个模块时,需要配套的文档辅助开发,但是这些文档该如何去找呢,例如XILINX的IP,打开模块的配置,在左上角点击Documentation,再点击Product Guide,如果在安装Vivado的时候安装了DocNav,就会跳转过去打开文档。

o4YBAGAKM0yAR41PAACHr0PmB2c539.jpgo4YBAGAKM02AfQ-TAACelNpSYck497.jpg

此功能需要电脑联网,DocNav会从网站加载文档。可以点击下载按钮下载到本地。

还有一种方法是在Xilinx官网根据模块的名称搜索资料下载(页面可能会有所变化)

pIYBAGAKM06APpN3AABgU45cy-w830.jpg

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

    关注

    1663

    文章

    22491

    浏览量

    638935
  • Xilinx
    +关注

    关注

    73

    文章

    2205

    浏览量

    131819
  • GPIO
    +关注

    关注

    16

    文章

    1333

    浏览量

    56430
  • Zynq
    +关注

    关注

    10

    文章

    632

    浏览量

    49566
  • MPSoC
    +关注

    关注

    0

    文章

    203

    浏览量

    25224
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AMD Zynq UltraScale+ RFSoC评估套件调试检查表

    本篇文章包含一份调试检查表,它是对 AMD Zynq UltraScale+ RFSoC 评估套件(ZCU208、ZCU216、ZCU111 和 ZCU670)上评估板相关问题进行故障排除的重要资源。
    的头像 发表于 04-15 14:08 110次阅读
    AMD <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> RFSoC评估套件调试检查表

    第二代AMD Kintex UltraScale+ FPGA的亮点

    第二代 AMD Kintex UltraScale+ FPGA 可有效赋能专业音视频、广播、医疗、机器视觉、机器人技术及测试测量等领域的开发者,助力其打造兼具卓越性能和可靠性的强大系统,即使是面对
    的头像 发表于 03-03 11:32 1362次阅读
    <b class='flag-5'>第二</b>代AMD Kintex <b class='flag-5'>UltraScale+</b> <b class='flag-5'>FPGA</b>的亮点

    AMD 推出第二代 Kintex UltraScale+FPGA,助力智能高性能系统

    第二代AMD Kintex UltraScale+ FPGA 系列 , 对于依赖中FPGA 为性能关键型系统提供支持的设计人员而言,可谓
    的头像 发表于 02-04 16:11 6.1w次阅读
    AMD 推出<b class='flag-5'>第二</b>代 Kintex <b class='flag-5'>UltraScale+</b> 中<b class='flag-5'>端</b><b class='flag-5'>FPGA</b>,助力智能高性能系统

    使用Aurora 6466b协议实现AMD UltraScale+ FPGA与AMD Versal自适应SoC的对接

    在本博客中,我们将介绍使用 Aurora 6466b 协议实现 AMD UltraScale+ FPGA 与 AMD Versal 自适应 SoC 的对接。我们还将涵盖有关 IP 配置、FPGA 之间的连接、时钟设置以及复位拓扑
    的头像 发表于 01-13 14:04 3767次阅读
    使用Aurora 6466b协议实现AMD <b class='flag-5'>UltraScale+</b> <b class='flag-5'>FPGA</b>与AMD Versal自适应SoC的对接

    如何在Zynq UltraScale+ MPSoC平台上通过JTAG启动嵌入式Linux镜像

    流程教程)。本文则进一步讲解如何在 Zynq UltraScale+ MPSoC 平台上通过 JTAG 逐步启动 Linux,并提供了完整的过程与关键命令。只要按步骤操作,即使是复杂的 Linux 镜像也能成功通过 JTAG 启
    的头像 发表于 01-13 11:45 4961次阅读

    如何在ZYNQ本地部署DeepSeek模型

    一个将最小号 DeepSeek 模型部署到 AMD Zynq UltraScale+ MPSoC 处理系统的项目。
    的头像 发表于 12-19 15:43 7798次阅读
    如何在<b class='flag-5'>ZYNQ</b>本地部署DeepSeek模型

    AMD UltraScale架构:高性能FPGA与SoC的技术剖析

    AMD UltraScale架构:高性能FPGA与SoC的技术剖析 在当今的电子设计领域,高性能FPGAMPSoC/RFSoC的需求日益增长。AMD的
    的头像 发表于 12-15 14:35 717次阅读

    Zynq MPSoC PS侧PCIe高速DMA互连解决方案

    在涉及Xilinx Zynq UltraScale+ MPSoC的项目中,实现设备间高速、低延迟的数据传输往往是核心需求之一。PCIe(尤其PS侧)结合DMA(直接内存访问)正是满足这类需求的理想技术方案。
    的头像 发表于 10-22 13:53 4073次阅读
    双<b class='flag-5'>Zynq</b> <b class='flag-5'>MPSoC</b> PS侧PCIe高速DMA互连解决方案

    AMD Spartan UltraScale+ FPGA的优势和亮点

    AMD Spartan UltraScale+ FPGA 集小型封装、先进的 I/O 功能与低功耗等优势于一体。该系列 FPGA 配备高速 16.3 Gb/s 收发器、内置的外部内存控制器以及
    的头像 发表于 10-17 10:16 936次阅读
    AMD Spartan <b class='flag-5'>UltraScale+</b> <b class='flag-5'>FPGA</b>的优势和亮点

    第二十九章 W55MH32 Modbus_TCP_Server示例

    本文讲解了如何在 W55MH32 芯片上实现 Modbus TCP 协议的服务器模式,通过实战例程展示了从初始化 LED 相关函数、主循环调用处理函数到解析处理接收到的报文的完整过程。文章详细介绍了 Modbus TCP 的概念、基本原理、优势、注意事项、应用场景、报文结构和常用功能码,帮助读者理解其在工业通信中的实际应用价值。
    的头像 发表于 07-24 16:18 1172次阅读
    <b class='flag-5'>第二十九章</b> W55MH32 Modbus_TCP_Server示例

    第二十九章 读写内部FLASH

    本文介绍了W55MH32内部FLASH,其含主存储、系统存储等,可存储代码及掉电保存数据。读写需解锁、擦除页等步骤,标准库提供相关函数。还展示了擦除编程测试及模拟EEPROM读写的实验。
    的头像 发表于 06-20 14:09 1348次阅读
    <b class='flag-5'>第二十九章</b> 读写内部FLASH

    AMD Spartan UltraScale+ FPGA 开始量产出货

    边缘应用而设计,为业经验证的 UltraScale+ FPGA 和自适应 SoC 产品组合带来了现代化的连接、后量子密码等功能。 三款最低
    的头像 发表于 06-18 10:32 2480次阅读
    AMD Spartan <b class='flag-5'>UltraScale+</b> <b class='flag-5'>FPGA</b> 开始量产出货

    蔡司亮相第二十九届中国国际口腔设备材料展览会,邀您共探口腔行业未来

    作为亚太地区最具影响力的口腔专业展会,第二十九届中国国际口腔设备材料展览会即将盛大开幕。本届展会预计将吸引来自中国、德国、日本、美国等30多个国家和地区的800余家企业参展,超13万名专业人士
    发表于 06-09 13:42 1506次阅读
    蔡司亮相<b class='flag-5'>第二十九</b>届中国国际口腔设备材料展览会,邀您共探口腔行业未来

    上汽大众5月终端销售8.7万辆

    6月伊始,上汽大众便携旗下明星阵容亮相第二十九届粤港澳大湾区车展,备受消费者关注。
    的头像 发表于 06-06 17:59 1016次阅读

    Xilinx Ultrascale系列FPGA的时钟资源与架构解析

    Ultrascale是赛灵思开发的支持包含步进功能的增强型FPGA架构,相比7系列的28nm工艺,Ultrascale采用20nm的工艺,主要有2个系列:Kintex和Virtex
    的头像 发表于 04-24 11:29 2875次阅读
    Xilinx <b class='flag-5'>Ultrascale</b>系列<b class='flag-5'>FPGA</b>的时钟资源与架构解析