Xilinx-PYNQ_Z2系列-学习笔记(11):自定义overlay
该博文参考:https://blog.csdn.net/bramblewalls/article/details/80045922
一、前言
首先大致介绍一下PYNQ:PYNQ开源框架可以是嵌入式编程用户在无需设计可编程逻辑电路的情况下充分发挥APSOC功能。PYNQ提供了一个Python接口,可以通过运行在PS中的python来控制PL中的overlay。PYNQ的overlay由硬件设计人员创建,并使用这个PYNQ Python API进行包装,开发人员可以使用Python接口来编程和控制专用的overlay。
那么overlay中又包括什么呢?
- 配置FPGA结构的位流
- Vivado设计Tcl文件来确定可用的IP
- 将IP作为属性公开的Python API
创建自定义PYNQ的硬件overlay可以用现有的base overlay为起点,添加所需的功能IP核来实现预期功能。
接下来就是如何自定义除base外的overlay
二、自定义overlay
1、用HLS生成一个定制的IP(起到加速的作用)
(1)首先打开hls,创建一个新的工程。
(2)设置工程名和路径,建立顶层函数为add,创建一个新的C++程序,名字叫做adder.cpp,在testbench步骤时跳过(不需要添加testbench文件),选择板子的时候搜索xc7z020clg400-1,选择完成。
(3)在左侧的菜单栏里选择Source->adder.cpp,在里面编写如下代码:
void add(int a, int b, int& c) {
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE s_axilite port=a
#pragma HLS INTERFACE s_axilite port=b
#pragma HLS INTERFACE s_axilite port=c
c = a + b;
}
这是一个简单的加法器,之所以用HLS设计是为了让其以FPGA的计算方式取到一个加速的作用。
(4)完成之后我们可以在左侧菜单里选择solution1->impl->ip->drivers->add_v1_0->src->xadd_hw.h
在这个文件中我们可以找到a,b,c的地址,我们之后能够通过地址传值,读值。
a为0x10,b为0x18,c为0x20
2、在vivado中设计一个overlay
(1)打开vivado,创建一个工程,选择板子的时候,选boards,搜索pynq,如果没有pynq这个选项证明你没有将PYNQ-Z2的boardfile文件添加到vivado中。(添加方法如下)
- 下载 boardfile文件
- 将其复制[vivado安装目录]E:\xilinx2017.4\Vivado\2017.4\data\boards\board_parts目录下,如图:
(2)在左侧导航中选择create block design
(3)在工作框中点击加号添加ZYNQ7 Processing System添加到工作面板中,然后点击Run Block Automation
(4)在菜单栏中选择tools->settings->ip->repository
点击加号,选择c:\tutorial\hls\adder把自己设计的IP添加进来
再点击Run Block Automation,结果如下:
(5)在source栏中右键选择design sources->design_1(design_1.bd)右键选择create HLD wrapper
(6)等wrapper完成之后选择generate bitstream生成bit文件
(7)生成bit文件之后点击file->export->export block design生成tcl文件
3、在jupyter notebook中测试IP
(1)找到 你创建的vivado项目目录\project_1.runs\impl_1中找到system_wrapper.bit文件或design_1_wrapper.bit文件拷贝到vivado项目目录文件夹下
还有之后生成的tcl文件:
(2)将这两个文件重命名为adder.tcl和adder.bit并复制到PYNQ-Z2板子的overlays目录下:
可以通过搜索:\pynq\xilinx来进入到Samba服务器。
(3)通过网站登录http://192.168.2.99/ 访问jupyter notebook界面,新建一个python文件并写代码进行测试。
通过写函数write和读函数read操作地址来进行数值的写入和读出,从而验证函数的有效性。