艾巴生活网

您现在的位置是:主页>科技 >内容

科技

hls使用教程(重点介绍hls软件的使用方法和优化方法)

2023-09-13 10:02:02科技帅气的蚂蚁
[简介]这一系列教程演示了如何使用xilinx 的HLS工具来加速算法的硬件实现。分为三个部分,分别是HLS IP设计、vivado硬件环境搭建、SDK软

hls使用教程(重点介绍hls软件的使用方法和优化方法)

[简介]

这一系列教程演示了如何使用xilinx 的HLS工具来加速算法的硬件实现。分为三个部分,分别是HLS IP设计、vivado硬件环境搭建、SDK软件控制。在HLS端,要将硬件加速的软件算法转换成RTL级电路,生成便于嵌入式使用的axi控制端口,传输数据和控制模块。

HLS简介]

HLS可以直接将算法映射到RTL电路,从而实现高级综合。Vivado-HLS可以直接使用C、C和System C语言对Xilinx FPGA器件进行编程。用户不无需手动创建RTL,通过高级合成生成HDL级别的IP核,加快IP创建速度。HLS的官方参考文件是ug 871(ug871-vivado-high-level-synthesis-tutorial.pdf)和ug 902(ug 902-vivado-high-level-synthesis . pdf)。对于Vivado Hls,输入包括Tesbench、C/C源代码和指令,对应的输出是IP Catalog、DSP和SysGen。特别是一个项目只能有一个顶层函数进行合成,这个顶层函数下面的子函数也可以进行合成,会生成相应的VHDL和Verilog代码。因此,C综合后的RTL代码结构通常与原C中描述的相同,除非是子函数。不是所有的C/C都能集成,动态内存分配和操作系统相关的操作都不能集成。Vivado HLS的设计过程如下:

在整个过程中,用户首先创建一个设计C、C或SystemC源代码和一个C测试平台。通过Vivado HLS综合运行设计生成RTL设计,代码可以是Verilog或者VHDL。使用RTL,您可以立即执行设计的Verilog或VHDL模拟,或者使用该工具的C包装器技术来创建SystemC版本。然后可以根据之前创建的C测试平台,进行系统C架构级仿真,进一步验证设计的架构行为和功能。在设计固化后,设计可以通过Vivado设计套件的物理实现过程运行,编程到设备中,在硬件中运行和/或通过使用IP封装器将设计变成可重用的IP。

步骤1:创建新项目

1.创建新项目创建新文档,并输入项目名称和项目路径。完成后,单击下一步。

2.添加设计文件,制定顶层功能。完成后,单击下一步。

3.添加C语言模拟文件。完成后,单击下一步。

4,配置解决方案名称,这通常是默认值。以ns为单位配置时钟周期。配置不确定性,默认为空。选择产品型号。完成后,单击完成。

5.项目建设成功后进入的开发界面,HLS是典型的Eclipse界面,和SDK界面很像。

导入文件的代码如下:1。源文件。axi_interfaces.c

#包括axi _ interfaces.h void axi _ interfaces(dout _ t d _ o[N],din_t d_i[N]) {inti,rem//存储累积的datastaticdacc _ tacc[CHANNELS];axi _ interfaces _ label 0:for(I=0;I # ifndef AXI _接口_ H _ #定义接口_ H _ #包含类型定义int din _ t;typedef int dout _ t;typedefinitdacc _ t;#定义通道8 #定义样本4 #定义通道*样本voida Xi _ interfaces(dout _ TD _ o[N],din _ TD _ I[N]);#endif 3,测试文件。axi _ interfaces _ test.c

#包括axi _ interfaces.h int main () { //创建输入数据din_t d_i[N]={10,20,30,40,50,60,70,80,11,21,31,41,51,61,71,81,12,22,32,42,52,62,72,82,13,23,33,43,53,63,73,83 };dout _ t d _ o[N];int i,retval=0;FILE * fp//调用函数对数据axi_interfaces(d_o,d_i)进行操作;//将结果保存到文件FP=fopen(result.dat ,'w );fprintf(fp,Din Dout );for(I=0;id in Dout 10 10 20 20 30 30 40 40 50 50 60 60 70 70 80 80 11 21 21 41 41 81 51 101 61 121 71 141 81 161 12 33 22 63 32 93 42 123 52 153 62 183 72 13 82 243 13 46 23 86 33 126 43 166

这一步是功能代码的逻辑验证,相当于前功能模仿。1.测试程序的代码如下图所示。程序首先调用综合函数得到计算结果,然后与预置的数据集进行比较,最后返回计算结果。当计算结果与预设数据一致时,测试通过;否则,测试失败。您需要查看代码中的错误。

2.单击红色框中的按钮,启动C源代码验证。

3.验证结果显示在控制栏中。如图,测试通过。

4.在头文件中,重新定义了数据类型和参数,并声明了函数。

步骤3:高级综合

这一步是将功能代码合成为RTL逻辑。1.点击红框中的按钮,将C代码合成为RTL。综合后,检查结果。

2.综合完成后,查看综合报告。包括定时、延迟、资源占用、端口信息等。

3.端口分析。(1)控制端口用于控制和显示模块的工作状态。每个端口的功能如下,默认会生成以下四个控制端口。Lap_start(in):高电平时,模块开始处理数据。Lap_done(out):高电平时表示模块已经处理完数据。Lap_idle(out):指示模块是否空闲。活跃在高层。当为高电平时,它应处于空闲状态。Lap_ready(out):高电平时,表示模块可以接受新数据。(2)数据端口用于传递模块的输入输出参数。参数d_o和d_i是数组类型,所以默认生成内存接口。接口的数据(数组类型参数)来自外部存储器,通过地址信号读取相应的数据输入模块。输入数组从外部存储器读取源数据,输出数组从外部存储器写入结果数据。每个端口定义如下。地址:地址信号lce0:片选信号lwe0:写使能信号ld0:数据信号4、综合结果分析。在分析界面中,你可以看到该模块的操作。包括数据依赖,每个周期的操作,IO口的读写,内存口的访问等。

第四步:全面优化

当使用高级综合来创建高质量的RTL设计时,一个重要的部分是优化C代码。Vivado HLS有自动优化的功能,尽量减少循环和函数的延迟。除了自动优化,我们还可以手动优化程序,即对不同的解决方案添加不同的指令来优化和比较性能。其中,对于同一个项目,可以建立多个不同的解决方案。向不同的解决方案添加指令可以达到以下目的。优化的类型可以分为以下几类:l端口优化。指定不同类型的模块端口。l函数优化。加快函数的执行速度,减少执行周期。我遵循糟糕的优化。采用扩展和流水线的形式,减少了循环的执行周期。1.单击下面红色框中的图标创建新的解决方案。

2.不同解决方案位于不同的文件夹中。

3.选择综合文件。你可以在直接框中看到可以优化的标签。

4.双击选择d_o,然后选择interface,s_axilite。单击确定。将d_o的端口类型设置为s_axilite类型。

5.参考d_o,将d_i的接口类型设置为s_axilite。将d_i的端口类型设置为s_axilite类型。

6.双击选择函数名axi_interface,选择interface,s_axilite。单击确定。将控制端口的端口类型设置为s_axilite类型。

7.双击循环标签,选择“管道”,然后单击“确定”。

8.双击循环标签,选择循环展开优化(展开),然后单击确定。

9.与上面相同,标记为for_loop的循环也是流水线化的,并且为了优化而展开。10,最终优化情况总结如下。

1.重新合成函数,检查综合报告如下。

12.分析。与未优化相比,优化后的函数综合产生的模块运行时钟大大降低。端口的接口类型也更改为axi_lite端口。但资源占用率提高了,这也体现了以资源换速度的设计理念。

第五步:合成结果文件

合成之后,你可以在每个解决方案的syn文件夹中看到合成器生成的RTL代码。包括systemc、VHDL和Verilog。

第六步:导出IP

在菜单中,按如下方式设置SolutionExport TL,然后单击ok。

ip包完成后,会在impl文件夹中输出IP文件夹,其中包含RTL代码(hdl)、模块驱动程序(doc)等信息,包括一个压缩包文件,这是用来构建vivado项目的IP压缩包。

第七步:总结

本文重点介绍hls软件的使用和优化方法,而不是C语言模块的设计。掌握hls软件的基本用法和优化方法后,可以设计更复杂的C语言模块,进行rtl综合,加快设计开发速度。