HLS入门实践

您所在的位置:网站首页 m3u8播放器官网下载 HLS入门实践

HLS入门实践

2023-05-23 14:17| 来源: 网络整理| 查看: 265

一、HLS介绍

HLS是什么: HLS(High-Level Synthesis)是一种硬件描述语言编程技术,它可以将高级语言(如C/C++)转换为硬件描述语言(如VHDL或Verilog),以便将其用于FPGA(Field-Programmable Gate Array)或ASIC(Application-Specific Integrated Circuit)的设计中。

HLS技术在FPGA和ASIC的设计中非常有用,因为它可以帮助设计人员通过高级语言编写硬件逻辑,从而提高设计效率和可重用性。HLS技术还可以提供比传统的手动编写硬件描述语言更高的抽象级别,使得设计人员可以更快地开发出功能复杂的硬件系统。

HLS与VHDL/Verilog编程技术有什么关系: VHDL和Verilog是传统的硬件描述语言,用于手动编写硬件逻辑。与HLS技术相比,它们需要更多的时间和精力来编写和调试代码,但也提供了更高的灵活性和控制力。HLS技术和VHDL/Verilog编程技术可以结合使用,以便在设计过程中兼顾效率和灵活性。

HLS的关键技术 HLS(High-Level Synthesis)是一种复杂的技术,存在一些关键技术问题和技术局限性。以下是一些主要问题和限制:

高层次综合的优化问题:高层次综合包括多个优化阶段,如数据流分析、资源映射、调度和寄存器分配等。这些优化阶段的顺序和参数设置会对设计的性能、面积和功耗等方面产生影响,需要合理的算法和工具支持。精度问题:由于高层次综合基于软件编程语言,因此需要考虑精度和舍入误差等问题。例如,浮点数运算会产生舍入误差,而整数运算可能会导致溢出或截断等问题。时序约束问题:在设计硬件时,时序约束是非常重要的,因为它们可以确保电路的正确性和可靠性。高层次综合需要能够自动生成正确的时序约束,以确保设计的正确性。可维护性和调试问题:由于高层次综合生成的硬件电路是自动生成的,因此很难进行调试和维护。开发人员需要有有效的工具和技术来检测和调试电路中的错误。

HLS的技术局限性

目前存在一些技术局限性,如:

支持的软件编程语言:目前,高层次综合支持的软件编程语言有限,大多数工具支持C/C++和SystemC等语言。因此,开发人员需要在这些语言中编写硬件描述。复杂性:高层次综合涉及多个优化阶段和复杂的算法,需要大量的计算资源和时间。因此,它对硬件层面的知识和经验要求较高。可移植性:高层次综合生成的电路可能会受到工具和目标平台的限制,因此需要进行定制化和优化。这可能会限制电路的可移植性和可重用性。成本问题:高层次综合需要使用专业的工具和硬件平台,这可能会增加开发成本和时间。 Vivado2018.3下载安装 下载

Vivado2018.3资源地址:vivado2018.3下载 网盘提取码:sygh

安装

解压Xilinx_Vivado_SDK_2018.3_1207_2324.tar文件 在这里插入图片描述

在解压得到的文件中选择运行xsetup.exe文件 在这里插入图片描述

勾选同意所有协议并点击next 在这里插入图片描述

勾选Vivado HL Design Edition后点击next 在这里插入图片描述

检查配置是否与下面相同,默认情况就是下图中所示。而后点击next 在这里插入图片描述

选择安装目录,注意安装目录路径不能包含中文且必须选择在根目录下的文件夹。这里我在D盘下创建了一个Xilinx文件夹作为安装目录。 在这里插入图片描述 在这里插入图片描述

点击install开始安装 在这里插入图片描述

等待安装完成。。。。。。 在这里插入图片描述

安装完成如下图所示: 在这里插入图片描述

许可证获取

许可证资源下载:点击进行license网盘下载 网盘提取码:vh3h

添加license 在这里插入图片描述

出现以下提示说明添加lisence成功,点击确认,并关掉license Manager 窗口即可。 在这里插入图片描述

使用vivado创建HLS——点亮led灯 创建 HLS工程

点击桌面刚刚生成的快捷方式,运行Vivado HLS 2018.3 在这里插入图片描述

打开Vivado HLS 2018.3后,点击create new project进行新HLS工程的创建 在这里插入图片描述

输入新工程的名称和工作空间 在这里插入图片描述

在之后出现的以下窗口点击next继续下一步即可 在这里插入图片描述 在这里插入图片描述

到下图所示界面时,需要进行器件的选择 在这里插入图片描述

工程编写 添加工程文件并编写代码

添加.h头文件 在这里插入图片描述 编写.h头文件(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 led_t; typedef ap_int 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 *led_o = ~led_i; } } } 右键点击Test Bench选择New File创建test_led.cpp文件并编写以下内容: #include "led.h" #include int main(){ led_t led_i=0x01; led_t led_o; const int SHIFT_TIME = 4; int i; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3