Quartus 18.1 安装教程及 HLS 开发流程步骤

目录

  • 一、HLS 详解
    • 1.1 HLS 是什么?
    • 1.2 HLS 与 VHDL/Verilog 有什么关系?
    • 1.3 HLS 技术问题
  • 二、Quartus 18.1 安装教程
    • 2.1 安装步骤
    • 2.2 配置步骤
    • 2.3 注册步骤
    • 2.4 与 ModelSim SE 连接
  • 三、HLS 开发步骤
    • 3.1 HLS 环境搭建
    • 3.2 编写 test.cpp 文件
    • 3.3 预编译 cpp 文件
  • 四、总结
  • 五、参考资料

一、HLS 详解

1.1 HLS 是什么?

前言

  • 当百度 HLS 的时候,会看到所有的网页都是 HLS (HTTP Live Streaming,基于HTTP的自适应码率流媒体传输协议),这里的 HLS 其实并不是这个,如果是作为 FPGA 开发人员,那么你就知道 HLS 其实是 高层综合(High level Synthesis),本篇文章就是介绍一下 HLS(高层综合)的基本概念。

简介

  • 高层次综合(High-level Synthesis)简称 HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。
  • 所谓的高层次语言,包括 C、C++、SystemC 等,通常有着较高的抽象度,并且往往不具有时钟或时序的概念。相比之下,诸如 Verilog、VHDL、SystemVerilog 等低层次语言,通常用来描述时钟周期精确(cycle-accurate)的寄存器传输级电路模型,这也是当前 ASIC 或 FPGA 设计最为普遍使用的电路建模和描述方法。
  • 通过 HLS 这个过程可以显著加快 FPGA 的设计进程,而不用从底层的 FPGA 语言编起。

HLS 工具完成的工作:

  • HLS 自动分析一个算法中的潜在并发性
  • HLS 自动在需要的路径插入寄存器,并自动选择最理想的时钟
  • HLS 自动产生控制数据在一个路径上的出入方向的逻辑
  • HLS 自动完成设计部分与系统中的其他接口
  • HLS 自动映射数据到存储单元中以平衡资源使用与带宽
  • HLS 自动将程序中计算的部分映射到对应逻辑单元,在实现等效运算的前提下选择有效运算

大多数 HLS 工具需要用户提供功能的规范,交互的描述,一个对接的计算设备,和目标优化方向。而对于 Vivado HLS 来说,用户需要:(Vivado 是赛灵思推出的一种 HLS 工具)

  • 一个用C/C++/System C编写的函数
  • 一个测试平台用于验证结果(C testbench)
  • 一个FPGA开发版
  • 期望的时钟周期
  • 一个简单的实施指导

Vivado HLS 需要进行的步骤:

  • 编译、执行(仿真)、调试相应的 C 语言代码
  • 把 C 算法综合为 RTL 实现,在这个过程中可以使用优化指令
  • 生成综合分析报告并分析设计
  • 验证 RTL 的实现
  • 打包 RTL 成 IP 包

1.2 HLS 与 VHDL/Verilog 有什么关系?

  • 在 FPGA 硬件开发上,VHDL/Verilog 与 HLS 相比,就好比是几十年前的汇编语言与现在的 C 语言。
  • RTL(寄存器传输级别,基于 VHDL/Verilog 语言)逐步发展,但 VLSI 系统的复杂性呈指数级增长,使 RTL 设计和验证过程成为生产力的瓶颈。
  • HLS(高级综合)通过提高抽象级别, 可以减少最初的设计工作量,设计人员可以集中精力描述系统的行为,而不必花费时间来实现微体系结构的细节,且验证被加速、设计空间探索(DSE)更快、定位新平台非常简单、软件工程师可以访问 HLS 等这些好处加在一起,减少了设计和验证时间,降低了开发成本,并降低了进行硬件项目的门槛,因此缩短了产品上市时间,并且在异构系统上使用硬件加速已成为更具吸引力的选择。
  • 但是在结果质量(QoR)上,HLS 工具还落后于 RTL,但 HLS 的开发时间少、生产率高这些优点还是当前用于快速原型设计和较短上市时间的可行选择。

1.3 HLS 技术问题

HLS 有哪些关键技术问题?

  • 字长分析和优化:
    • FPGA 的一个最主要特点就是可以使用任意字长的数据通路和运算。因此,FPGA 的 HLS 工具不需要拘泥于某种固定长度(如常见的 32 位或 64 位)的表达方式,而可以对设计进行全局或局部的字长优化,从而达到性能提升和面积缩减的双重效果。
  • 循环优化:
    • 循环优化一直是 HLS 优化方法的研究重点和热点,因为这是将原本顺序执行的高层软件循环有效映射到并行执行的硬件架构的重点环节。
    • 一个流行的循环优化方法,就是所谓的多面体模型,即 Polyhedral Model。多面体模型的应用非常广泛,在 HLS 里主要被用来将循环语句以空间多面体表示(见下图),然后根据边界约束和依赖关系,通过几何操作进行语句调度,从而实现循环的变换。
    • 需要指出的是,多面体模型在 FPGA HLS 里已经取得了相当的成功,很多研究均证明多面体模型可以帮助实现性能和面积的优化,同时也能帮助提升 FPGA 片上内存的使用效率。
    • 了解优化过程,请参考博客:vivado HLS硬件化指令(一)HLS针对循环的硬件优化
  • 对软件并行性的支持:
    • C/C++与 RTL 相比,一个主要的区别是,前者编写的程序被设计用来在处理器上顺序执行,而后者可以通过直接例化多个运算单元,实现任务的并行处理。
    • 随着处理器对并行性的逐步支持,以及如 GPU 等非处理器芯片的兴起,C/C++ 开始逐渐引入对并行性的支持。例如,出现了 pthreads 和 OpenMP 等多线程并行编程方法,以及 OpenCL 等针对 GPU 等异构系统进行并行编程的 C 语言扩展。
    • 因此作为 HLS 工具,势必要增加对这些软件并行性的支持。例如,LegUp 就整合了度 pthreads 和 OpenMP 的支持,从而可以实现任务和数据层面的并行性。

目前存在什么技术局限性?

  • 字长分析和优化需要 HLS 的使用者对待综合的算法和数据集有深入的了解,这也是限制这种优化方式广泛使用的主要因素之一。
  • HLS 工具的结果质量(QoR)往往落后于手动寄存器传输级别(RTL)流程的质量。
  • 性能和执行时间上,HLS 设计的平均水平明显较差,但在延迟和最大频率方面,与 RTL 差异不那么明显,且 HLS 方法还会浪费基本资源,平均而言,HLS 使用的基本 FPGA 资源比 RTL 多 41%,在以千位为单位的 BRAM 使用情况的论文中,RTL 更胜一筹。

二、Quartus 18.1 安装教程

说明:从 Quartus 17 版本开始支持 HLS 库,这里我们下载 18 版本。

2.1 安装步骤

  • 下载链接:https://pan.baidu.com/s/1NtUFxTcFTfd4kLk9d7zQCA——提取码:wg9c
  • 解压缩文件后,打开下图所示文本文档,下载 Quartus 18.1 标准版:
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第1张图片
  • 文档中有三部分:必装组件、器件库、选装组件。

必装组件:

  • Quartus Prime Standard Edition 就是我们要安装的 Quartus 18.1,复制链接下载。
  • 下载完毕后,双击执行开始安装 Quartus 18.1。
    在这里插入图片描述
  • 一路傻瓜式安装即可,只不过安装路径我选择安装在了 E:\Quartus_18.1 下,最好别安装在 C 盘,除非容量够大。
  • 安装完毕后默认勾选了三个选项,点击【Finish】即可,然后会安装 USB 驱动。
  • 帮助文档可以下载,看自己吧。

器件库:

  • 安装完 Quartus 后,还需要下载至少一个系列的 *.qdz 器件库(我下载的第一个器件库),下载后的器件库保存在一个没有中文路径的文件夹中,譬如:
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第2张图片

选装组件:

  • 有 DSP Builder、SOC、AdvLinkAnalyzer、OpenCL、ModelSim AE/ASE、Quartus Prime Programmer and Tools 这六个。
  • 根据自己需要选择下载,我只安装了 ModelSim SE,因为我需要仿真(补充一点,ModelSim-SE 安装教程请参考博客:Modelsim SE 下载安装、注册详细教程)

2.2 配置步骤

  • 以管理员身份运行打开 Quartus,勾选第三个选项打开即可。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第3张图片
  • 点击【Yes】添加器件库。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第4张图片
  • 点击【Next >】后,如下图选择器件库所在的文件夹,然后点击【Next >】。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第5张图片
  • 程序会自动识别该文件夹下的所有器件库,选择下载的器件库。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第6张图片
  • 一直【Next >】,最后【Finish】即可配置完毕。
  • 重启 Quartus 让器件库生效。

2.3 注册步骤

  • 打开下图所示文本文档,按照文档内的内容进行注册。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第7张图片
  • 最后如下图所示,注册完毕。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第8张图片
  • 到此,Quartus 18.1 就安装完成了。

2.4 与 ModelSim SE 连接

  • 点击【Tools】→【Options…】。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第9张图片
  • 选择【EDA Tool Options】,添加 ModelSim 的安装路径,选择 win64 文件夹。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第10张图片
  • 点击【OK】保存退出即可。

三、HLS 开发步骤

说明:需要下载安装 Visual Studio 2019

3.1 HLS 环境搭建

  • 进入到 Quartus 18.1 安装目录下的 hls 文件夹中,由于要修改 bat 文件,所以先备份 init_hls.bat 文件。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第11张图片
  • 编辑 init_hls1.bat 文件,在文件中,可以看到 hls 只指定了 10、12、13 版本的 VS,所以当你使用 VS2019 的时候,它根本检测不到,所以需要修改一下文件内容,见下。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第12张图片
  • 在 VS2013 后面添加如下代码:
if not "x!VS190COMNTOOLS!" == "x" (
  echo VS190COMNTOOLS environment variable is set to !VS190COMNTOOLS!. 
  echo Looks like you have VisualStudio2019 installed. Using it.
  set "HLSVSTOOLS=!VS190COMNTOOLS!\VC\Auxiliary\Build\vcvars64.bat"
  goto FOUND_VS_PATH
)
  • 如下图所示:
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第13张图片
  • 说明:
    VS190COMNTOOLS 是系统变量名,值为 VS2019 的路径。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第14张图片
    其次,你需要修改你自己的 VS2019 下 vcvars64.bat 路径(一般都是在 …\VC\Auxiliary\Build 下):set “HLSVSTOOLS=!VS190COMNTOOLS!\VC\Auxiliary\Build\vcvars64.bat”
  • 进入 hls 文件夹下,执行 init_hls1.bat 文件,如下图所示,环境就搭建完成了。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第15张图片
  • 可以使用 set 命令,查看当前环境的详细信息。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第16张图片

3.2 编写 test.cpp 文件

  • 任意建一个文件夹,添加一个 test.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;
}

3.3 预编译 cpp 文件

  • 进入到 cpp 文件目录下,使用命令:i++ -march=x86-64 -o mul.exe test.cpp
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第17张图片
  • 出现错误,hls_internal.h 无法找到 queue 文件,找找这两个文件的位置。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第18张图片
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第19张图片
  • 再来找找 queue 文件在哪。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第20张图片
  • 结论就是,hls 库里面的头文件无法引用 VS2019 标准库里面的文件。
  • 再来看看环境变量,INCLUDE 里面有这个库的路径,可是它就是找不到,这是为什么呢?
    在这里插入图片描述
  • 当我给引用头文件改成绝对路径的时候,又出现问题。
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第21张图片
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第22张图片
  • 然后我又搜这个文件在哪,好家伙,和 queue 同一目录下都无法找到,一个字:绝!
    Quartus 18.1 安装教程及 HLS 开发流程步骤_第23张图片
  • 给我的感觉就好像是,这个环境搭建了个寂寞,明明有路径,可是 include 就是找不到,希望我后续能够解决吧!
  • 附带别人成功的例子,他使用的是 VS2010:》》》传送门《《《

四、总结

  • 折腾了许久,一直未能成功解决 VS2019 的头文件识别问题,虽然能将 hls 搭建在 VS2019 上,但是 hls 的头文件无法调用到标准库中的文件,就比较头疼,包括命名空间、绝对路径、文件移植等等,都试过了,还是没成功,希望能有高手能解决我这一难题!

五、参考资料

[1] FPGA基础知识(二)HLS相关知识
[2] HLS开发学习-01-HLS介绍与FPGA简单内部介绍
[3] 用Verilog还是用HLS来进行FPGA设计有答案了!
[4] 在FPGA领域中 HLS一直是研究的重点
[5] HLS——二、开发流程简单示例

你可能感兴趣的:(hls,fpga)