一、HLS简介
HLS(High-Level Synthesis,高级综合)是一种硬件设计方法,它允许设计者使用高级语言(如C、C++或SystemC)来描述硬件行为,然后自动将这些高级语言描述转换成门级或更低级别的硬件实现。HLS的目标是简化硬件设计流程,提高设计效率,并允许软件工程师参与到硬件设计中来。
HLS的主要步骤包括
输入高级语言描述:设计者使用C、C++或SystemC等高级语言来编写硬件的逻辑。
综合:HLS工具将高级语言代码转换成硬件描述语言(HDL)代码,如Verilog或VHDL。
优化:HLS工具会对生成的HDL代码进行优化,以满足性能、面积和功耗等设计要求。
生成硬件:最终,HLS工具会生成可以直接用于FPGA或ASIC实现的硬件描述。
HLS的优势包括
提高设计效率:使用高级语言可以更快地编写和修改设计。
减少设计时间:自动化的转换和优化过程可以缩短设计周期。
提高设计可重用性:高级语言代码更容易理解和维护,有助于设计重用。
降低硬件设计门槛:软件工程师可以更容易地参与到硬件设计中。
HLS面临的挑战
优化难度:自动优化可能无法达到手动优化的水平。
资源限制:HLS生成的硬件可能在资源使用上不如手工设计的硬件高效。
学习曲线:需要学习如何使用HLS工具和理解其优化策略。
HLS是数字电路设计领域的一个重要方向,随着工具和算法的不断发展,它在提高设计效率和降低设计难度方面发挥着越来越重要的作用。
二、环境配置
安装 vivado 的参考链接:
https://blog.csdn.net/qq_43279579/article/details/116849636
安装了vivado后,就自动完成了 HLS
三、HLS实现Led点亮仿真
1.新建项目
点击Vivado HLS 中的Create New Project
设置项目名,选择项目的路径
点击next,选择顶层函数,此处暂时不管
选择添加C仿真文件,此处可以暂时不管
选择器件
点击finish,完成工程创建
2.代码编写
1.源文件添加
点击Source,右键后,选择New File,创建文件:
Helloworld.h
#ifndef _HELLOWORLD_H_
#define _HELLOWORLD_H_
#include "ap_int.h"
typedef ap_int<1> led_t;
void flash_led(led_t *led_o);
#endif
Helloworld.cpp
#include "HelloWorld.h"
void flash_led(led_t *led_o){
#pragma HLS INTERFACE ap_ovld port=led_o
#pragma HLS INTERFACE ap_ovld port=led_o
int i;
for(i=0;i<10000;i++){
if(i==9999){
*led_o = ~(*led_o);
}
}
}
2.仿真测试文件添加,右键Test Bench,选择New File
tb_Helloworld.cpp
#include "HelloWorld.h"
#include <stdio.h>
int main(){
led_t led_o;
const int SHIFT_TIME = 4;
int i;
for(i=0;i<SHIFT_TIME;i++){
flash_led(&led_o);
printf("result : %d \n",(int)(led_o&0x01));
}
}
3.添加后如图
3.C仿真
1.点击 run c sinulation
弹出下面的界面,什么都不用选
运行仿真后,出现下面这个界面就说明仿真成功了
2.综合
进行综合之前,先选择Top Function,点击Project -> Project Setting -> Synthesis ,点击Helloworld.cpp,并点击Browse选择函数flash_led。
3.点击此处
4.结束后,会有一个总结文件
在这个文件的最后,有关于端口的表格
已经生成好的.v文件
5.联合仿真
在Helloworld.cpp界面,右边的Drective界面,右键led_o,进入如下界面
点击ok,结果如下
三、实验总结
理解了HLS的基本语法,对FPGA学习有了更深刻的理解。