目 录
4 matrix_demo 案例 27
4.1 HLS 工程说明 27
4.2 编译与仿真 30
4.3 综合 31
4.4 IP 核测试 36
4.4.1 PL 端 IP 核测试 Vivado 工程说明 37
4.4.2 PS 端 IP 核测试裸机工程说明 37
4.4.3 测试说明 39
前 言
本文主要介绍 HLS 案例的使用说明,适用开发环境: Windows 7/10 64bit、Xilinx Vivado
2017.4 、Xilinx Vivado HLS 2017.4 、Xilinx SDK 2017.4。
Xilinx Vivado HLS (High-Level Synthesis,高层次综合) 工具支持将 C 、C++等语言转化
成硬件描述语言,同时支持基于 OpenCL 等框架对 Xilinx 可编程逻辑器件进行开发,可加
速算法开发的进程,缩短产品上市时间。
测试板卡是基于创龙科技Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/d955ade07e974f4eb75e5322c47da443~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=1xnuVeYsLWExsX9lJz6%2FDKTIBIo%3D)
4 matrix_demo 案例
案例功能: 实现 32*32 浮点矩阵乘法运算功能, 同时提供提高运算效率的方法。
4.1 HLS 工程说明
(1) 时钟
HLS 工程配置的时钟为 100MHz。如需修改时钟频率, 请打开 HLS 工程后点击 ,在
弹出的界面中的 Synthesis 栏目进行修改。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/9b7fb596dfb445169d2e281171690525~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=Mj6nzN4y4J88uyntfTXLbKcTLP4%3D)
图 45
(2)顶层函数
案例有两个可选的顶层函数,分别为 standalone_mmult()和 HLS_accel()。前者为矩阵 乘法运算函数,用于仿真阶段;后者基于前者将数据输入输出接口封装成 AXI4-Stream 接 口, 用于综合阶段。工程默认配置为 standalone_mmult()。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/3ca913ffc361491db296530a9e8ec963~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=0Z9YiNkXZCpuCGCtysDFXLeTCUI%3D)
图 46
点击
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/c6812d8b8a3249b09a80eb53a28e705f~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=JOaJQ3Zpoevf7bRCOY8GrtOrOkE%3D)
后,可在弹出的界面中的 Synthesis 栏目查看或设置顶层函数。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/ab665d155c7e4321ab613cde7f37ce5e~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=wOkwFdK1tcaK8oVFH6lTg0VckB0%3D)
图 47
矩阵乘法运算函数如下:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/f1a8ef470bf74e14b68e26088dd7a561~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=IhUO%2FlOaCjhm%2FBrKPX5%2Bs6%2Fvgco%3D)
图 48
matrix_demo_test.cpp 中提供了矩阵乘法运算函数 mmult_sw(),程序将 mmult_sw()的
运算结果和顶层函数 standalone_mmult()的运算结果进行对比。如结果一致, 则说明顶层
函数逻辑正确。 mmult_sw()函数不调用逻辑资源, 而 standalone_mmult()函数调用逻辑资
源。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/3936f5e69cd84c99ac939de31578fbca~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=VFt513ZhLtJN5Qwh1qecZXMTZic%3D)
图 49
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/37c55cb77dd94aca882877ae09fb40b3~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=0Bq%2BKVcEyLL7ijsLGVgnrUZsuJM%3D)
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/93f7e8e8bb9e4078ad794f95fd85f6ef~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=wylFsO%2FAGu5Iw5snOwQQn0DzE2Y%3D)
图 50
4.2 编译与仿真
请参考本文档 HLS 开发流程说明章节, 进行编译。 编译完成后, 进入仿真界面点击
进行全速运行。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/301332682bd54e48be446ce25583446e~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=iVhVZZG6Q3sutzLX5J7wI0IFH8I%3D)
图 51
运行完毕后,将在 Console 窗口打印如下提示信息,说明顶层函数逻辑正确。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/b834ba303b7f4981bbb25ae92f86d1ff~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=vR0B5DvjCHhjpEKyyiQUjakDj30%3D)
图 52
4.3 综合
案例提供三个 solution,每个 solution 的算法运行效率不同。由于 solution3 所用资源 较多, xc7z010 无法满足资源要求,因此案例默认使用 solution2 生成 IP 核。
进行综合时,需将顶层函数修改为 HLS_accel() 。修改顶层函数后请点击
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/c428d911e39c45b0a9ad9be63674e957~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=mdlQujrEPzrKk9fBPEEyt2Yh2%2FQ%3D)
,在弹
出的界面中点击“All Solutions”进行综合。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/f8c49e3cf42d4e81b4a05eb8541e9f60~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=PQGTj6ipyZYc%2FAPvmy6QzTPeDb8%3D)
图 53
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/090e16d88725487286aa22b48ea5a68b~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=%2FdXK%2BhiRfFQWD9b%2FB23HlzhbGDo%3D)
图 54
综合完成后,可看到三个 solution 的详细信息。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/8ee62bff371e4fafb37352713b453409~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=oi%2BViJlzk41OMObqwFC%2BvI%2F%2B3Jg%3D)
图 55
从上图可看出solution3 的运行效率最高,但消耗资源最多。
(1) solution1 分析
双击选中 solution1,然后点击 Analysis。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/8719a7d6f59c4a368803cbf6763e0c5b~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=47eiazwQz%2BptqZ6%2BUz6NuLW7v74%3D)
图 56
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/c4664ce7ca2840d1b85c70cc7e0bed3e~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=tzc4G%2BvoQmLVHGWPmTvU2nkMe3k%3D)
图 57
可看到矩阵乘法运算函数里的三个 for 循环均为顺序运行, 因此耗时最长。
(2) solution2 分析
双击打开 solution2 的 directives.tcl ,可看到下图语句。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/c077e18bdc9b48368e1d7a29bb6bcb3c~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=35eP9H8t%2F8mSr0kJ%2Ft16Dn6qvLw%3D)
图 58
PIPELINE 的作用是允许在函数中并发执行操作, 减少函数运行时间。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/8fdadad488ba4985bb243cd47333b385~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=%2Bt7Ybr5MXqKHN0%2BcCN2itDRXCx0%3D)
图 59
solution2 将 mmult_hw()的 L2 for 循环进行了 PIPELINE 优化。打开solution2 的Analysis, 可看到矩阵乘法运算函数里的 L1/L2 for 循环并行执行,因此耗时较短。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/fbed98514fca45b09aab589fc8448091~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=BNoPlXc3nDw%2Fv37w0TyxSfWxiLo%3D)
图 60
(3) solution3 分析
双击打开 solution3 的 directives.tcl ,可看到下图语句。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/e8aa90eb37b349de8e369d9d0e988797~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=t7IrlR2geZ8I6GiualOk%2FSk9GYE%3D)
图 61
ARRAY_PARTITION 指令的作用是将大数组划分为多个小数组或单独的寄存器, 以提高 对数据的访问效率。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/a514f90baf884c469bcb20388bb98914~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=Dg6TdV3inlxYiVtoxBjtk0zO2GU%3D)
图 62
solution3 在 solution2 的基础上, 使用了 ARRAY_PARTITION 指令将函数 mmult_hw()的 数组 a 、b 分别分拆为 16 个数组,增加了数据吞吐量, 提高了运算效率。
打开头文件 matrix_demo.h,然后双击选中 solution3 打开工程 Directive,可对编译指
令进行修改或优化。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/66d8818943524e5fa12ecc56b0a693a1~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=GJ7o%2BXshUUrlzuGkOJP2nJ09o64%3D)
图 63
4.4 IP 核测试
请参考本文档 HLS 开发流程说明章节,完成 IP 核测试前的准备工作。
HLS 工程生成的 IP 核为 HLS_accel_0。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/5d722d05cf104743917a79e56cb8ae03~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=3kuQSUyVplVArhICNn3QvKJcJNo%3D)
图 64
4.4.1 PL 端 IP 核测试 Vivado 工程说明
浮点矩阵乘法运算加速器 IP 核通过 AXI DMA IP 核连接到 PS 端 ACP 接口,从而连通
到 PS 端 L2 缓存。 ACP 为 64 位 AXI 从接口,它提供了一个异步缓存相关接入点, 实现了
PS 和 PL 端加速器之间的低延迟路径。
AXI Timer IP 核用于计数,可通过其寄存器来计算浮点矩阵乘法运算加速器 IP 核的运
算时间。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/fab8e4b285894ec09d3a15076b83510f~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=2KdtpTjwOn%2BIw8xJepx3JRlHa10%3D)
图 65
4.4.2 PS 端 IP 核测试裸机工程说明
PS 端运行 32*32 的浮点矩阵乘法运算,并将 PS 端和 PL 端用时进行比较。 PL 端的浮 点矩阵乘法运算用时从 AXI Timer IP 核中读取。
打开裸机工程,确保 lscript.ld 文件的“Stack Size”为 0x3000,然后进行编译。
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/fbeae231105e4d38a12348eb1f861145~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=cMLVK8P7kwDR7Jrqvbd2tVjovMA%3D)
图 66
![](https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/49ff5f6ffa9c4d509cc0c42cf232454b~tplv-obj.jpg?traceid=20230102152658FFD60187098619AAB4D8&x-expires=2147483647&x-signature=WUUUe144%2B4tu2f%2FD%2Bn4iahU7P8M%3D)
图 67
标签:20,运算,IP,HLS,Zynq,mmult,乘法,函数 From: https://www.cnblogs.com/Tronlong818/p/17019979.html