PYNQ框架很方便的实现了python对底层硬件的直接调用,其本身提供的库函数也十分丰富,例如GPIO,DMA之类的IP核都有现成的函数可以直接控制。但对于客制化的挂载在Lite上的IP该如何使用,现记录如下。
1. MMIO
首先对挂载在AXI Lite总线上的IP core的控制无非是基于对控制寄存器的读写,PYNQ提供了MMIO库,可以非常方便的实现PS对PL侧的寄存器读写控制,参考官网说明如下:
了解了这一点后,下面给一个具体的使用例程方便作参考。
2.example
在了解了MMIO的功能后,来看一个具体的使用过程:
1.首先在自己的工程中找到需要调用的 IP core,以下图data_fwd为例:
这是一个自定义的数据分包IP,我们可以去Lite总线上查找到它的基地址便于后续访问调用
地址起始于0x00A0011000,范围4KB
2.在PYNQ中打开并访问jupyter,过程可参考ZYBO-Z7开发板的PYNQ框架移植
进入jupyter后,调用MMIO库,同时定义需读写 ip 的基地址和范围
3.实现对于 IP 内具体控制寄存器的访问
在SDK中打开嵌入式侧代码作为比对参考
.h文件查看具体寄存器地址定义
在python中实现相对应的寄存器读写操作即可
无论是PYNQ还是本身嵌入式中的 c 文件,实现功能的本质都是对硬件底层逻辑中定义的寄存器的读写操作,记住这一点便可举一反三,拓展自定义IP到PYNQ框架下使用。
Fin