如何在zynq中调用并驱动vivado HLS生成的ip core

        vivado HLS 为赛灵思开发的高层次综合工具,可实现直接使用 C,C++ 以及 System C 语言对Xilinx的FPGA器件进行编程。赛灵思官方给出了ug902文档,很详细的介绍了官方提供的各种库,以及HLS的使用方法。本文将介绍如何在zynq上使用vivado HLS生成的ip核。

一、创建一个vivado HLS工程

        具体的vivado HLS工程创建以及优化方法,可参考博客:https://blog.csdn.net/weixin_39290638/article/details/80228806

本文只作简要介绍。

        首先,在solution中一定要选择所使用的正确的芯片型号,本文所使用的芯片型号为xc7z020clg400-2,如图所示:

如何在zynq中调用并驱动vivado HLS生成的ip core

然后,确保top function正确:

如何在zynq中调用并驱动vivado HLS生成的ip core

 编写源码和test bench,设置好接口:

如何在zynq中调用并驱动vivado HLS生成的ip core如何在zynq中调用并驱动vivado HLS生成的ip core

 此处,我们的ip接口有三个,一个是使用AXI接口输入图像input,一个是使用AXI接口输出图像output,最后使用AXILITE接口输出mean给PS端,这在之后的工程中都会用到。

做完先使用c验证,验证通过之后,再综合、生成ip核:

如何在zynq中调用并驱动vivado HLS生成的ip core

一切准备就绪,到工程目录中,找到生成的ip,所在路径为:\solution1\impl\ip:

如何在zynq中调用并驱动vivado HLS生成的ip core

 本文重点不是讲述如何使用vivado HLS,因此只简要介绍该部分。

二、vivado block design中调用生成的ip

将生成的ip复制到vivado工程目录下,并创建一个文件夹用于存放ip解压后的文件:

如何在zynq中调用并驱动vivado HLS生成的ip core

打开vivado 工程,打开ip settings>>IP>>Respository,添加刚才解压ip的目录:

如何在zynq中调用并驱动vivado HLS生成的ip core

因为本工程使用了大量的ip,因此直接使用了一个名字叫做ip的文件夹,里面包含了所有使用到的ip,分别再用文件夹进行包装。

此时ip库中已经有了用户自定义的ip,在里面找到了我们自己创建的ip ,该ip名字叫做average_fun,将其添加到block design中:

如何在zynq中调用并驱动vivado HLS生成的ip core

可以注意到添加进来之后,其名称自动变为average_fun_0,再其后面自动添加了_0,这是为了避免在一个工程中多次使用一个ip命名混乱的尴尬。 这个名称在之后PS端初始化的时候还需要用到。

连接好各个接口之后,便可以综合、实现、生成比特文件了。此处要注意,一定不要在中文路径下操作,不要以为vivado现在可以在中文路径下打开了,那所有工程在中文路径下都没问题了。我有一次搞忘了,直接在中文路径下,不管怎样都无法综合,卡了一天。

生成比特文件之后,先导出硬件,注意要包含比特流:

如何在zynq中调用并驱动vivado HLS生成的ip core

 然后便可以launch SDK,开始编写ps端的程序了。

这里block design也不是我们本文的重点,因此只简单介绍。

三、PS端驱动我们使用vivado HLS生成的ip

我们的ip是average_fun,在SDK中,vivado HLS已经生成了相应的驱动文件,#include "xaverage_func.h"即可,驱动文件的头文件前面多了个x,其他自己建立的ip可做类似参考:

如何在zynq中调用并驱动vivado HLS生成的ip core

进入到该头文件,可以发现函数很简单,只需直接调用初始化 函数,然后调用函数读取PL端的数值即可。

如何在zynq中调用并驱动vivado HLS生成的ip core

 先使用HLS生成的这个结构体,建立一个对象,这个对象表示的是PL中我们的average_fun_0,若有多个该ip,则应该建立多个对象。

如何在zynq中调用并驱动vivado HLS生成的ip core

然后初始化 这个ip,这个ip的ID号的名字是和PL端相对应的,只不过前面多了XPAR_,后面多了_DEVICE_ID,具体的定义在xparameters.h这个头文件中。

如何在zynq中调用并驱动vivado HLS生成的ip core

 

至此,初始化全部完成,若需读取PL发送给PS的数据,调用XAverage_func_Get_mean(&average_funcInstance);即可,这里使用方法如下:如何在zynq中调用并驱动vivado HLS生成的ip core

 

上一篇:WGS和宏基因组混样测序-判断和host基因组的乘深和覆盖度--20200105


下一篇:糖果传递