PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)

接上篇博客,继续流程!


3、板上验证

打开Vivado软件生成的工程的,找到Tcl文件,找到bit文件,统一修改名字为adder,后缀文件类型不改,并放在一起。如下:

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第1张图片

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第2张图片

修改后如下:

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第3张图片

下面进行板级验证,通过电脑与开发板的共享文件夹,打开xilinx/pynq/overlays文件夹,如图新建一个adder文件夹,两个文件存放在此文件夹下。

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第4张图片

准备就绪,开始验证。浏览器打开jupyter-notebook,新建Python3文件,改名为demo,在cell中输入如下代码(此代码及以下代码可在上篇的官方手册中找到):

from pynq import Overlay

overlay = Overlay('/home/xilinx/pynq/overlays/adder/adder.bit')#即bit文件所在位置

点击Run,效果如下,warning中提示还需要HWH文件,所以我们去Vivado工程中找此文件。

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第5张图片

经寻找,发现了hwh文件,路径如图。并将此文件改名,粘贴到开发板上,与bit和tcl两文件放在一个文件夹下。

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第6张图片

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第7张图片

返回,继续运行代码,warning消失。再输入一行代码Run,出现如图所示,应该是对它的介绍,注意画线的一句就是我们自定义的IP,接下来我们要调用它。

overlay?

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第8张图片

再输入下列代码并Run,可出现如图所示

add_ip = overlay.scalar_add    #个人理解是将overlay.scalar_add类实例化为add_ip.
add_ip?

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第9张图片

我们不难发现,某个变量或者函数前面加?就是调用帮助,出现关于其详细的说明。

下面我们就要试一下咱们自己的IP是否好使了。

运行以下代码,可以看到输出为9,实现了相加器的功能,功能正常。

add_ip.write(0x10, 4)  #前面是输入的寄存器地址,后面是要相加的值  (寄存器地址可以从Vivado HLS的文件中看到)
add_ip.write(0x18, 5)  #前面是输入的寄存器地址,后面是要相加的值
add_ip.read(0x20)      #括号中是输出的寄存器地址

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第10张图片

代码注释中的寄存器地址可从如图中查找

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第11张图片

到此,板上验证结束。


附加:Creating a Driver

下面讲解如何生成上述IP的驱动(Drvier),这样可以在不知道寄存器地址的情况下也可以调用该IP核。

接着上面,在jupyter-notebook的demo里输入以下代码并运行。

from pynq import DefaultIP

class AddDriver(DefaultIP):
    def __init__(self, description):
        super().__init__(description=description)

    bindto = ['xilinx.com:hls:add:1.0']

    def add(self, a, b):
        self.write(0x10, a)
        self.write(0x18, b)
        return self.read(0x20)

然后再输入以下代码运行(即重新加载overlay文件)

overlay = Overlay('/home/xilinx/pynq/overlays/adder/adder.bit')
overlay?

效果如图,不难看出,已经生成了驱动,为AddDriver。

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第12张图片

下面验证驱动是否可用!

输入如下一行代码

overlay.scalar_add.add(15,20)

结果如下,可见运算正确,并且不需要寄存器地址,说明驱动生成成功。

PYNQ-Z2调试笔记:如何定制PYNQ overlay(How to make a custom PYNQ overlay)(下)_第13张图片


本篇博客的示例程序、代码和pynq-z2的板卡文件下载链接:https://pan.baidu.com/s/1eexbLTXQ3_Yci_jrolRFTQ 
提取码:u296

英文原版视频教程:https://www.bilibili.com/video/av58463583/


 

本篇博客到此就结束了,文中有不严谨之处欢迎批评指正,下方评论交流,韭菜会尽快回复的!

但行努力,莫问前程,如果您觉着文章有用,请点赞鼓励,谢谢!

 

你可能感兴趣的:(PYNQ-Z2调试)