一、HLS简介
- HLS(High Level Synthesis):一款高层次综合工具。
能够将 C/C++ 或 者 system C 等高级语言转化为 RTL (底层硬件描述语言)电路,降低开发时间。
提供了常见的库(例如图像处理相关的 OpenCv 库和其
它的数学库)。
可以创建IP并通过例化或者使用 BlockDesign 的方式应用到项目中。
转化原理:在前端将 C 语言描述进行分析,然后进行代码层面的优化(code-level transformation),再在后端把这些运算工作进行并行调度(parallelise & schedule),最后生成 RTL 语言。
- 使用HLS开发流程:
- 第一步C/C++层面的仿真:
首先在源文件中,添加一个顶层函数,这个函数就是我们想要将来映射到 RTL 电路中的函数,之后需要一个 C Testbench 来对这个函数功能进行验证,在算法层面,检验我们的函数是否能够正常工作。(算法层面的仿真,能够很快地就得出结果,有助于提高我们的开发效率。) - 第二步对C 代码进行综合:
综合后会根据我们的功能函数,产生相应的电路。在 C 综合阶段,HLS 会根据我们对功能函数中的一些约束(Directive),来生成不同的接口。 - 第三步C/RTL 的联合仿真:
在这一阶段,HLS 会根据我们的 C Testbench 来生成我们的 RTL 的 Testbench 并且根据我们所选择的仿真工具来进行 RTL 级的仿真。仿真完成后我们可以观察联合仿真所产生的波形。 - 第四步导出IP:
前面有提到过 HLS 相当于一个 IP 生成器,它能够将我们的高级语言的代码映射为一个 IP,我们可以根据需要将这些 IP 导出到 Vivado 的集成开发环境中,将这些算法的 IP 应用到实际的工程当中。
二、环境搭建
2.1初始化
打开系统命令管理器cmd,定位到init_hls.bat的路径,并运行
d:
cd D:\intelFPGA\18.1\hls
init_hls.bat
此时会提示vs的路径问题,不用担心,系统会自动添加所需要的路径
2.2编写测试文件
在桌面新建文件夹prj,创建text.cpp,编写如下乘法器代码:
#include “HLS/hls.h”
#include “stdio.h”
component int mul(int a,int b)
{
int c =0;
c = a*b;
return c;
}
int main()
{
int a=0,b=0,c=0,i=0;
for(i=0;i<5;i++)
{
a= i+1;
b= i+2;
c = mul(a,b);
printf("%d * %d = %d\n",a,b,c);
}
return 0;
}
2.3编辑测试文件
c:
cd C:\Users\han\Desktop\prj
i++ -march=x86-64 -o mul.exe test.cpp 用于生成mul.exe文件
期间会报一些警告,但是不影响结果
运行mul.exe文件
mul.exe
生成镜像文件
i++ -march=CycloneV -o mul test.cpp -ghdl
继续运行mul.exe文件,产生波形文件vsim.wlf
mul.exe
查看报告
报告内容如下
2.4导入自编辑IP核
将生成的 components 文件夹的路径导入到quartus中
Tools–>Options–>IP Setting–>IP Catalog Search Locations
在Globa IP Search directory栏中指定mul的路径:C:\Users\han\Desktop\prj
此时自定义的hls的乘法器工作环境就搭建完成了。
2.5参考内容
三、总结
本次博客主要是对HLS的入门介绍,并且完成了HLS的环境搭建,完成了一个入门级程序。