文章目录
一、HLS简介
1、HLS是什么?
HLS(High-Level Synthesis)是一种硬件描述语言(HDL)的编程技术,它可以将高级语言代码(如C/C++)转换成硬件描述语言(如VHDL或Verilog)。
2、HLS与VHDL/Verilog编程技术有什么关系?
HLS与VHDL/Verilog编程技术有很大的关系,因为它们都是用于编写硬件描述语言的工具。然而,HLS与传统的VHDL/Verilog编程技术不同之处在于,HLS更加高级,可以让开发人员使用更加直观和易于理解的语言来描述硬件功能,从而提高开发效率和代码质量。HLS的流程与传统的VHDL/Verilog编程技术也不同,它更加依赖于自动化工具来完成硬件代码的生成和优化。
3、HLS关键技术问题
语言映射:如何将高级语言转换为硬件描述语言,生成硬件电路。
时序约束:如何对生成的硬件电路进行时序优化,以达到最佳的性能。
存储器优化:如何最大限度地利用FPGA中的存储器资源,提高性能和资源利用率。
并行化:如何将硬件电路并行化,以提高性能。
4、HLS目前存在的技术局限性
难以处理复杂的电路:HLS通常用于生成相对简单的电路,因为它难以处理复杂的电路。
设计复杂度高:使用HLS进行设计需要掌握高级语言、硬件描述语言和电路设计知识。如果开发人员没有足够的经验,可能会导致设计复杂度高、性能低下的问题。
生成的电路可能不是最优的:HLS生成的电路可能不是最优的,因为它依赖于自动化工具进行优化,而自动化工具的优化程度有限。
代码可读性差:HLS生成的硬件描述语言通常比手写的代码难以理解和调试,这可能会影响开发人员的效率。
二、环境搭建
1、Quartus下载
参考:https://blog.csdn.net/weixin_43828944/article/details/122139680
2、HLS入门程序
(1)初始化
找到init_hls.bat,并使用系统命令管理器运行文件。运行时,会自动配置需要的环镜
运行完之后输入set
(2)编写项目并输出波形
先新建一个项目(最好创建在桌面上)。
在文件夹中添加文件led.cpp
// 001-first.cpp : 定义控制台应用程序的入口点。
//
#include "HLS/hls.h"
#include "stdafx.h"
component int led(int currentState)
{
if (currentState == 0)
{
currentState = 1;
}
else
{
currentState = 0;
}
return currentState;
}
int _tmain(int argc, _TCHAR* argv[])
{
int ledState = 0; // 0表示关闭,1表示开启
for (int i = 0; i < 10; i++) // 这里为了将方便,将时长给设置的很短
{
ledState = led(ledState);
printf("%d", ledState);
}
return 0;
}
进入到cpp文件所在路径下,打开命令行工具,输入以下指令生成可执行文件:
i++ -march=x86-64 -o led.exe led.cpp
运行可执行文件查看结果,会输出5个10
然后再输入指令生成报告、波形等文件(运行第一条指令之后可能需要等一会儿)
i++ -march=CycloneV -o led led.cpp -ghdl
led.exe
查看报告:在项目下找到这个文件夹,之后进入下面的reports子文件夹下,再找到report.html。这个html文件就是报告。波形文件路径\verification\vsim.wlf
使用命令打开波形文件:
vsim vsim.wlf
打开modelsim后选择函数名_init 模块添加波形
部分波形:
注:项目用vs2010创建
三、参考资料
https://blog.csdn.net/m0_58807717/article/details/130953226
https://blog.csdn.net/molongqishi/article/details/130644555
https://blog.csdn.net/m0_58807717/article/details/130953226
https://blog.csdn.net/molongqishi/article/details/130644555
https://blog.csdn.net/qq_52548731/article/details/130795962