Ultra96 PYNQ入门之二——PS端控制AXI GPIO
不合理的地方欢迎批评指正!!!
源代码链接:Ultra96-PYNQ_A-simple-summary
1 简单分析AXI GPIO模块
AXI GPIO模块整体格局与GPIO模块有点类似,有个需要特别注意的地方,就是要理解Python的继承思想
hd_gpio = axi_gpio_design.axi_gpio.Output( parent=axi_gpio_design.axi_gpio.channel1,
start=0, stop=1 )
hd_gpio的Output属性,是继承自channel1。
至于为什么不直接使用Channel类的方法,原因是Input、Output、InOut类有特殊的函数
- Input类特有的wait_for_value_async、wait_for_value
- Output类on、off、toggle
这样只有在相应的类中才可以使用相应的函数。
注:以上是个人对Python继承的浅显理解,不当之处还请指正。
2 AXI GPIO的使用
2.1 硬件设计
这里同样使用这6个小家伙作为AXI GPIO示例,约束为可以输入可以输出,具体如何使用,需要软件进一步配置
很简单的一个设计,可以在Vivado中的TCL控制台通过如下命令,进行快速重建
source 2.axi_gpio.tcl
2.2 控制AXI GPIO
使用类似的代码,即可进行验证
from time import sleep
from pynq import Overlay
#AxiGPIO可以不导入,直接使用Overlay也可
from pynq.lib import AxiGPIO
axi_gpio_design = Overlay("./data/2.AXI_GPIO.bit")
hd_gpio = axi_gpio_design.axi_gpio.Output( parent=axi_gpio_design.axi_gpio.channel1,
start=0, stop=1 )
for i in range(100):
sleep(0.1)
hd_gpio.toggle()
逻辑分析仪的测量结果如下,符合软件设置的间隔。
原创不易,严禁剽窃!
欢迎大家关注我创建的微信公众号——小白仓库
原创经验资料分享:包含但不仅限于FPGA、ARM、RISC-V、Linux、LabVIEW等软硬件开发,另外分享生活中的趣事以及感悟。目的是建立一个平台记录学习过的知识,并分享出来自认为有用的与感兴趣的道友相互交流进步。