HLS入门

一HLS是什么

1HLS介绍

HLS是一种将高级编程语言(如 C、C++等)描述的算法或逻辑自动转换为 FPGA 可实现的硬件描述语言。

二HLS核心技术以及技术局限性

1HLS的核心技术

输入语言采用类 C语言:而非前两代的 HDL 语言,如 C、C++、SystemC 以及 SpecC、HandelC 等,这能够使得系统模型得到复用,进行进一步的软硬件实现。

对时序比较精确的评估和调度:实现了对验证环境的重复使用,通过 TLM 建模技术可以将系统验证环境复用于 RTL 级验证,降低了验证的复杂度。

对代码进行优化转换:支持代码报告,能够将用户代码进行优化转换,但在某些情况下,工具的高效实施是不可能的,例如当必须将太多的加速器映射到硬件部分时。

2HLS的技术局限性

并行性局限性:HLS 技术需要将顺序代码转换为并行电路,但有些代码无法实现高效的并行计算,从而导致电路的性能不够优秀。

时序局限性:由于HLS 转换器的限制,有些复杂的时序逻辑难以实现,从而导致电路的时序问题。

存储器局限性:由于FPGA芯片的存储器资源有限,因此对于大规模的存储器数据操作,往往需要采用一些额外的技术来优化。

代码复杂性:在复杂的代码中,可能存在很多特殊情况,需要使用特殊技巧才能正确转换为硬件电路,这也使得HLS技术的使用更加困难。

调试复杂性:从高级语言转换到硬件实现后,调试过程可能会变得复杂,不像软件调试那样直观和容易定位问题。

缺乏灵活性:在某些特殊的、非标准的硬件设计需求下,可能难以灵活地满足所有要求。例如一些非常新颖独特的硬件结构设计理念可能较难通过 HLS 来实现。

表达能力限制:虽然使用类 C 语言,但某些复杂的硬件特性和结构可能难以用这种高级语言精确表达,可能会导致一些设计细节无法完美呈现。

三HLS的LED流水灯

1创建项目工程

1点击Vivado HLS 中的Create New Project

2设置项目名

3加入文件

点击Source与Test Bench,右键后,选择New Fill创建文件。

2代码

led.h

#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_

#include "ap_int.h"
#define CNT_MAX 100000000
//#define CNT_MAX 100,100M时钟频率下计数一秒钟所需要的计数次数
#define FLASH_FLAG CNT_MAX-2
// typedef int led_t;
// typedef int cnt_t;
typedef ap_int<1> led_t;
typedef ap_int<32> cnt_t;
void flash_led(led_t *led_o , led_t led_i);

#endif

led.cpp

#include "led.h"

void flash_led(led_t *led_o , led_t led_i){
#pragma HLS INTERFACE ap_vld port=led_i
#pragma HLS INTERFACE ap_ovld port=led_o
	cnt_t i;
	for(i=0;i<CNT_MAX;i++){
		if(i==FLASH_FLAG){
			*led_o = ~led_i;
		}
	}
}

test_led.cpp

#include "led.h"
#include <stdio.h>

int main(){

	led_t led_i=0x01;
	led_t led_o;
	const int SHIFT_TIME = 4;
	int i;
	for(i=0;i<SHIFT_TIME;i++){
		flash_led(&led_o , led_i);
		led_i = led_o;
		printf("shift_out is %d \n",(int)(led_o&0x01));
	}
}
3仿真

1c仿真

点击project->project settings->synthesis->browser->选择顶层函数
在这里插入图片描述

点击project->Run C Simulation
在这里插入图片描述

2c综合

点击Solution->Run C Synthesis->Active Solution
在这里插入图片描述
在这里插入图片描述

3联合仿真

在Helloworld.cpp界面,右边的Drective界面,右键led_o,进入如下界面
在这里插入图片描述

按下图来配置,并点击OK。
在这里插入图片描述

然后点击联合仿真
在这里插入图片描述

仿真结束后,出现下面界面,说明联合仿真成功
在这里插入图片描述

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值