> For the complete documentation index, see [llms.txt](https://digilent-china.gitbook.io/pynq-z1_tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://digilent-china.gitbook.io/pynq-z1_tutorial/pynq-zhong-wen-zi-liao/112-ji-yu-hls-de-jia-su-qi-overlay-she-ji-shi-li-notebook-zhong-tiao-yong-ying-jian-ip.md).

# 11-2\_基于HLS的加速器Overlay设计实例 - Notebook中调用硬件IP

## 介绍 <a href="#jie-shao" id="jie-shao"></a>

本章节介绍了IP的接口及for循环语句directive基本方法、在Vivado工程中实例化HLS IP的流程、以及在Jupyter Notebook上对IP的调用方法。

## 目标 <a href="#mu-biao" id="mu-biao"></a>

* ​ 使用基本的HLS directive
* ​ 在Vivado中实例化HLS IP
* ​ Jupyter notebook中调用HLS IP

## 步骤1：创建新的Solution <a href="#bu-zhou-1-chuang-jian-xin-de-solution" id="bu-zhou-1-chuang-jian-xin-de-solution"></a>

### 打开实验1中的HLS工程，创建新的Solution <a href="#da-kai-shi-yan-1-zhong-de-hls-gong-cheng-chuang-jian-xin-de-solution" id="da-kai-shi-yan-1-zhong-de-hls-gong-cheng-chuang-jian-xin-de-solution"></a>

**1.1** 打开实验1中的HLS工程，点击 **Project > New Solution…**；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jbe5GlJNSpBFr0%2F31.png?generation=1574912184369936\&alt=media)

**1.2** 默认设置，点击 **Finish**按钮；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jdd3xOS7unwp-n%2F32.png?generation=1574912184269065\&alt=media)

**1.3** 默认设置，点击 **Finish**按钮，工程中将会增加一个Solution2；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jfLp8tcE2cGnnF%2F33.png?generation=1574912184184219\&alt=media)

**1.4** 双击**matrixmul.cpp**，在**Directive**窗口，点击**matrixmul**后右键，将会出现对函数顶层模块插入Directive的选项；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jhnMRms3VROMvR%2F34.png?generation=1574912184315811\&alt=media)

**1.5** 点击Directive后，参照如下配置，点击**OK**；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jjxjWzwB9cD34X%2F35.png?generation=1574912184212535\&alt=media)

**1.6** 使用同样的方法，对参数a、b、res和test添加directive，参照如下配置；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jlaZFcq6tw6UyN%2F36.png?generation=1574912184177032\&alt=media)

**1.7** 单击**Col**后，右键选择**Insert Dorective…**；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jnvKhpNOVPsYpP%2F37.png?generation=1574912184232587\&alt=media)

**1.8** 参照如下配置，点击OK；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jpF53UTnJCfCHg%2F38.png?generation=1574912184170106\&alt=media)

**1.9** 最终的配置结果如下所示；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jrrJ655ThbWuze%2F39.png?generation=1574912184339650\&alt=media)

**1.10** 所有的directives都保存在了directives.tcl文件中；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jt2jnz1vaEHGBd%2F40.png?generation=1574912182531366\&alt=media)

**1.11** 点击 Solution > Run C Synthesis > Active Solution，对solution2进行综合；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jvDbmuC4r605KK%2F41.png?generation=1574912182633187\&alt=media)

**1.12** 点击工具栏 Export RTL按钮，导出IP；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jxUGYYnGV97Jkm%2F42.png?generation=1574912182522762\&alt=media)

**1.13** 弹出对话框作如下配置，点击OK；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45jz7QahopC5o-ko%2F43.png?generation=1574912184290061\&alt=media)

**1.14** Export报告如下；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45k02IbpAoZjHgJY%2F44.png?generation=1574912184319022\&alt=media)

**1.15** 关闭HLS；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45k2H77A_86z0EL2%2F45.png?generation=1574912184197617\&alt=media)

## 步骤2：创建Vivado工程 <a href="#bu-zhou-2-chuang-jian-vivado-gong-cheng" id="bu-zhou-2-chuang-jian-vivado-gong-cheng"></a>

### 2.创建Vivado工程:例化HLS IP到工程中 <a href="#id-2-chuang-jian-vivado-gong-cheng-li-hua-hls-ip-dao-gong-cheng-zhong" id="id-2-chuang-jian-vivado-gong-cheng-li-hua-hls-ip-dao-gong-cheng-zhong"></a>

**2.1** 启动 Vivado工具: Start > Xilinx Design Tools > Vivado 2018.2；

**2.2** 新建Vivado工程；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45k4PolZ3gxX6lmP%2F46.png?generation=1574912184520497\&alt=media)

**2.3** 一直点击**Next**按钮；

**2.4** 选择PYNQ-Z1板；

![](https://15841289-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Rx6ucfvcOZOOGzW0x%2F-M4S_ORm6gmKZQMH9mqw%2F-M4SdiWByFTLvEcLXj3k%2Fimage.png?alt=media\&token=03e6390b-0693-434d-b935-75d5880fc160)

**2.5** 将刚刚生成的zip包拷贝到Vivado工程的.ip.user\_files后解压缩；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45k8jDnVUxHGvQGo%2F49.png?generation=1574912184486488\&alt=media)

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kA0ywOIvkpK0B-%2F50.png?generation=1574912184213811\&alt=media)

**2.6** 将.ip.user\_files文件夹添加到ip库；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kCwtuht9r_yGhp%2F51.png?generation=1574912184366010\&alt=media)

**2.7** 创建 Block Design；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kEfPysmBY_5VVw%2F52.png?generation=1574912184323995\&alt=media)

**2.8** 添加ZYNQ7 Processing System IP 到Block Design；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kGzc1yM5Lgc5vu%2F53.png?generation=1574912182462858\&alt=media)

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kIpX8tX1kyvZuT%2F54.png?generation=1574912182462497\&alt=media)

**2.9** 点击Run Block Automation，保持默认配置，点击OK；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kKjbVAhLkOrk05%2F55.png?generation=1574912182615134\&alt=media)

**2.10** 为Zynq Processing System增加HP0口；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kMUJWXN3G9Q-d4%2F56.png?generation=1574912184345342\&alt=media)

**2.11** 例化Matrixmul到Block Design；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kO6O5sEx6PmEY8%2F57.png?generation=1574912184205966\&alt=media)

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kQqcD7L6u8y812%2F58.png?generation=1574912184306752\&alt=media)

**2.12** 通过AXI DMA将Matrixmul IP连接到PS侧，最终的Block Design如下图所示；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kShLyrh702DKUM%2F59.png?generation=1574912184257500\&alt=media)

**2.13** 创建 HDL Wrapper文件；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kUXnGFBKroujVw%2F60.png?generation=1574912184310527\&alt=media)

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kWtkwL7lYupGL0%2F61.png?generation=1574912184235494\&alt=media)

**2.14** 生成Bitstream文件；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kY-9pgYGlejxK5%2F62.png?generation=1574912184523202\&alt=media)

**2.15** 生成Block Design的tcl文件；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45k_vuUHHBsSIY4h%2F63.png?generation=1574912184823558\&alt=media)

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kbuIwEFhqdFMIX%2F64.png?generation=1574912184536791\&alt=media)

**2.16** 将tcl文件和bitstream文件拷贝到lab2\_src/matrixmul目录，并将tcl文件和bitstream文件重命名为matrixmul.tcl和matrixmulbit；

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kdds-1YP5raAo3%2F65.png?generation=1574912184293245\&alt=media)

## 步骤3：连接PYNQ-Z1测试 <a href="#bu-zhou-3-lian-jie-pynqz-2-ce-shi" id="bu-zhou-3-lian-jie-pynqz-2-ce-shi"></a>

### 3. 将PYNQ-Z1上电，通过Jupyter访问Matrixmul IP <a href="#id-3-jiang-pynqz-2-shang-dian-tong-guo-jupyter-fang-wen-matrixmul-ip" id="id-3-jiang-pynqz-2-shang-dian-tong-guo-jupyter-fang-wen-matrixmul-ip"></a>

**3.1** 将笔记本或者PC机的IP地址设置为192.168.2.X

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kfMNr0VZYmAyQa%2F67.png?generation=1574912184364728\&alt=media)

**3.2** 按如下方式设置好PYNQ-Z1，并将PYNQ-Z1通过网线连接到PC后，然后上电；

![](https://15841289-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Rx6ucfvcOZOOGzW0x%2F-M4S_ORm6gmKZQMH9mqw%2F-M4Seax6TuNrpbQtw0vS%2Fimage.png?alt=media\&token=a9fe7ffe-7b88-4cb2-b87c-20f0f0d6fe34)

**3.3** 待PYNQ-Z1启动完成后，通过Winscp等sftp工具将包含tcl文件、bitstream文件和ipynb文件的matrixmul文件夹下载到板卡的jupyter\_notebooks目录中；

**注**:用户名与密码均为: **xilinx**

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kjjXVEQFeeCRec%2F69.png?generation=1574912184298284\&alt=media)

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kly-76jeRXb3pt%2F70.png?generation=1574912184324457\&alt=media)

**3.4** 打开Chrome或者Firefox等IE浏览器，输入192.168.2.99，密码为：xilinx

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45knK1-UP24ar1Pr%2F71.png?generation=1574912184241600\&alt=media)

**3.5** 打开matrixmul目录，运行matrixmul.ipynb开始测试，

![](https://gblobscdn.gitbook.com/assets%2F-Luk3T3QoKyS_b-1joBV%2F-Luk3tukeoHpawWbVABz%2F-Luk45kpCEUT8wNJDeL9%2F72.png?generation=1574912184592361\&alt=media)
