HLS入门 - LED闪烁仿真
一、HLS简介
HLS概念
HLS(High-Level Synthesis)是一种硬件描述语言编程技术,它能够将高级语言(如C/C++)转换为硬件描述语言(如VHDL或Verilog),用于FPGA设计。HLS是高层次综合工具,可显著提高开发效率。
HLS与VHDL/Verilog
VHDL/Verilog适用于算法简单、开发周期短的项目。然而,面对复杂算法和长时间仿真调试,HLS通过高级语言编程实现功能模块,从而提升开发效率。
HLS的局限性
- 缺乏早期的性能估计和设计限制检测。
- 未充分利用所有可能的数据通信方式。
- 缺少功能概述和用户代码优化。
- 代码报告提供过晚。
- 在某些情况下,工具实施效率低,如加速器映射到硬件部分过多。
更多HLS知识
更多关于HLS的基本知识,可以参考以下链接:
HLS知识链接
二、HLS实例 - LED点亮仿真实现
1. 新建项目
-
点击 create new project
-
为项目命名,选择项目路径
-
点击next选择顶层函数(暂不选择)
-
继续点击next添加C仿真文件(暂不选择)
-
选择器件
至此,完成基本项目设置。
2. 代码编写
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
int i;
for(i=0;i<10000;i++){
if(i==9999){
*led_o = ~(*led_o);
}
}
}
仿真测试文件添加
右键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. C仿真
-
点击 run c simulation
-
弹出界面无需选择选项
-
运行仿真后,出现成功界面
4. 综合
-
选择Top Function
-
-
点击Project -> Project Setting -> Synthesis
-
选择
Helloworld.cpp
并设置flash_led
为顶层函数
5. 综合结果
-
查看生成的总结文件
-
查看端口表格
- 查看生成的
.v
文件
6. 联合仿真
- 在
Helloworld.cpp
的Directive界面设置led_o
7. 仿真结果
三、总结
使用HLS工具进行LED闪烁仿真有助于验证设计的正确性和功能性。仿真过程中可观察LED闪烁模式,评估性能指标如时序约束和资源利用率,并进行必要的调试和修正。