文章目录

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

1. 前言

使用ZYNQ最大的疑问就是如何把PS和PL结合起来使用。本实验使用两个AXI GPIO的IP核,一个GPIO IP核连接4个LED灯;另一个GPIO IP核用于接收4个按键(拨码开关)的中断,通过该中断来控制相应LED灯的亮灭。


2. Vivado工程的编写

2.1 Block Design工程设计

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

(2)修改Vivado工程,增加一个AXI GPIO IP核。该IP核用于控制4个LED灯的亮灭,因此“GPIO Width”参数设置为“4”;勾选“ALL Outputs”选项。

(3)点击“Run Connection Automation”选项,完成部分自动连线。

(4)可以看到多了两个模块,一个是“Processor System Reset”模块,为同步复位模块,提供同一时钟域的复位信号。“AXI Interconnect”模块为AXI总线互联模块,用于AXI模块的交叉互联。

在这个应用中,我们可以看到用到了ZYNQ的GP口,M_AXI_GP0,M代表的是 master,此接口用于访问PL端数据。

复位信号由ZYNQ的复位输出提供,在较大规模的电路设计中,最好是每个时钟域电路都加一个复位模块。

(5)修改GPIO端口的名称为“gpio_led”。

(6)再添加一个AXI GPIO,连接PL端按钮。配置GPIO参数,将其设置为“All Inputs”,宽度为4,使能中断。点击“Run Connection Automation”选项,完成部分自动连线。

(7)修改GPIO端口的名称为“gpio_keys”。

(8)由于是PL端过来的中断,根据共享外设中断(SPI)表

在这里需要配置ZYNQ处理器的中断,勾选IRQ_F2P。

(9)连接ip2intc_irpt到IRQ_F2P

(10)保存设计,右键点击.bd文件,选择“Generate Output Products…”。
(11)右键点击.bd文件,选择“Create HDL Wrapper…”。弹出的窗口中选择“Let Vivado manage wrapper and auto-update”,点击“OK”。

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

2.2 创建XDC管脚约束

(1)创建一个新的XDC约束文件,XDC文件名可以自己随便取。

(2)此处创建了一个名为“TOP”的XDC约束文件,双击打开该文件,添加管脚约束。

添加的约束如下:

# ------------ LED Pins ------------
set_property PACKAGE_PIN T22 [get_ports {gpio_led_tri_o[0]}]
set_property PACKAGE_PIN T21 [get_ports {gpio_led_tri_o[1]}]
set_property PACKAGE_PIN U22 [get_ports {gpio_led_tri_o[2]}]
set_property PACKAGE_PIN U21 [get_ports {gpio_led_tri_o[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {gpio_led_tri_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_led_tri_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_led_tri_o[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_led_tri_o[3]}]# ------------ Btn Pins ------------
set_property PACKAGE_PIN F22 [get_ports {gpio_keys_tri_i[0]}]
set_property PACKAGE_PIN G22 [get_ports {gpio_keys_tri_i[1]}]
set_property PACKAGE_PIN H22 [get_ports {gpio_keys_tri_i[2]}]
set_property PACKAGE_PIN F21 [get_ports {gpio_keys_tri_i[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {gpio_keys_tri_i[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_keys_tri_i[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_keys_tri_i[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_keys_tri_i[3]}]

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

3. Vitis工程的编写

(1)点击 Vivado 菜单“Tools-> Launch Vitis IDE”,启动 Vitis。
(2)新建 Vitis平台工程。Vitis工程的建立可以参考以前的文章《ZYNQ串口打印输出——FPGA Vitis篇》。
(3)新建 Vitis应用工程,创建一个名为“AXI_GPIO_INTR”的工程,工程模板可以选择“Hello World”。
(4)面对一个不熟悉的GPIO模块,我们可以尝试一下Vitis自带的官方工程。
(5)双击打开“platform.spr”,点击“axi_gpio_1”的“Import Examples”。

选择“xgpio_intr_tapp_example”例程。

(6)由于我们按键中断是接在axi_gpio_1上,我们需要修改该例程的宏定义,将GPIO_0改为GPIO_1。

(7)例程的GPIO中断代码说明如下:

(8)修改例程的GPIO中断服务函数“GpioHandler”,使其完成4个拨码开关分别控制4个LED灯的亮灭功能:
其中“XPAR_GPIO_1_BASEADDR”为拨码开关GPIO IP核的地址、“XPAR_GPIO_0_BASEADDR”为LED GPIO IP核的地址。
“Xil_In32”为从该地址读取寄存器的值,“Xil_Out32”为向该地址对应的寄存器写入相应的值。

(9)编译工程,将工程下载到硬件板卡上(编译和下载方式见《ZYNQ 串口打印输出——FPGA Vitis篇》)。
实验结果为:4个拨码开关通过中断分别控制4个LED灯的亮灭功能;

4. 实验小结

本实验介绍了如何通过PL端的GPIO给PS端发送中断,再通过该中断控制LED灯的亮灭。
虽然该实验很简单,但有着其重要的意义。比如PL端可以给PS发送中断信号,这提高了PL和PS数据交互的效率,在需要大数量、低延时的应用中需要用到该中断处理。

5. 工程源码下载

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


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

ZYNQ AXI GPIO中断实验——FPGA Vitis篇相关推荐

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

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

  2. ZYNQ PS端MIO的使用——FPGA Vitis篇

    文章目录 1. 前言 2. MIO介绍 3. Vivado工程编写 4. Vitis工程编写 5. 实验小结 A. 附录 B. 工程源码下载 1. 前言 本实验介绍如何使用ZYNQ芯片PS端的MIO. ...

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

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

  4. ZYNQ之UART中断实验软件设计

    宏定义 #define INTC XScuGic //中断控制器驱动 #define DeviceId XPAR_XUARTPS_0_DEVICE_ID //UART0 设备ID #define UA ...

  5. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED(SDK开发详解)

    axi_gpio是PL端gpio(FPGA资源搭建的软核),ps7_gpio是ps端gpio(硬核).打开Documentation的示例Examples,可知第二个是关于中断的示例.导入示例impo ...

  6. Microblaze实现串口、GPIO中断

    介绍 使用microblaze软核搭建处理器,实现中断 其中microblaze_0为microbalze内核,外接128Kb的local memory.利用JTAG调试的mdm内核.中断管理器axi ...

  7. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED

    在pg144-axi-gpio(LogiCORE IP Product Guide)中可以看见AXI GPIO提供通用输入输出接口到AXI接口,32位软核,设计与AXI4-Lite接口进行连接.IOP ...

  8. 32 串口波特率_「正点原子FPGA连载」第五章串口中断实验

    1)实验平台:正点原子达芬奇FPGA开发板 2) 摘自[正点原子]达芬奇之Microblaze 开发指南 3)购买链接:https://detail.tmall.com/item.htm?id=624 ...

  9. xilinx ZYNQ 7000 AXI GPIO

    .0AXI GPIO 第一部分 PS 和 PL之间的通讯有一个接口称为AXI.AXI总线具体的内容这边不去深究,可以理解为一种特殊协议的通讯方式. AXI GPIO是什么意思? PL是FPGA它可以做 ...

最新文章

  1. 基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案...
  2. 河北省高校数据挖掘邀请赛来了!
  3. Python从入门到精通 - 什么是NumPy (下)
  4. 玩转虚拟化VMWare之一: VMWare ESXi 5.0和vSphere Client安装和配置
  5. 空集的cardinality是0
  6. struts.xml文件的配置说明
  7. Spring学习(三)--Spring的IOC
  8. 按照月的第几周统计_商标评审案件审理情况月报(2020年第11期)
  9. 赠书 | IoT 的真正目标是什么
  10. web报表工具FineReport最经常用到部分函数详解
  11. 循环神经网络(RNN)和LSTM初学者指南 | 入门资料
  12. python用jieba模块分词实现关键词提取
  13. django restframework Serializers
  14. 经典机器学习系列(七)【聚类分析前序--相似性度量】
  15. 【腾讯笔试题】记腾讯2019年暑假实习移动端开发在线笔试题
  16. 免费可用的Android手机传感器数据采集程序(附程序)
  17. CF755F PolandBall and Gifts
  18. 室内定位技术之UWB篇
  19. 【TFT屏幕】1.44寸彩屏
  20. 原生JS实现球面展示特效

热门文章

  1. 《吐血整理》顶级大佬学习方法
  2. js取整数,取余,向上向下取整
  3. CoVOS:无需解码!利用压缩视频比特流的运动矢量和残差进行半监督的VOS加速(CVPR 2022)...
  4. 目前QQ校友录中的班级创建申请很多
  5. 2022年骨传导耳机哪个好、骨传导耳机品牌推荐
  6. 查看修改MySQL表结构命令
  7. 如何制作动图表情包?在线合成gif怎么操作?
  8. python玩王者荣耀皮肤碎片怎么获得_手把手教你使用python获取王者荣耀英雄及皮肤高清图片...
  9. 安卓手机访问 linux系统文件下载,安卓手机跑起完整的Linux系统
  10. GOPATH 和 GOMOD