HLS入门(Xilinx Vivado 2019.2)——点亮LED仿真

news2024/11/19 13:42:51

HLS入门——点亮LED仿真

  • 一、HLS简介
    • (一)什么是HLS?
    • (二)HLS能做什么?
    • (三)HLS的使用
    • (四)HLS的优势
    • (五)HLS与VHDL/Verilog编程技术的关系
    • (六)HLS的关键技术问题与局限性
  • 二、点亮LED仿真
    • (一)创建项目
    • (二)添加文件
    • (三)仿真与综合
  • 三、总结
  • 四、引用

一、HLS简介

(一)什么是HLS?

HLS是一种设计方法,使用HSL可以更快地开发电子系统,特别是那些需要特定硬件加速的复杂系统。通过使用HLS,你可以用高级语言(如C或C++)编写代码,然后自动转换成硬件描述语言(HDL),从而加速开发过程。

(二)HLS能做什么?

HLS允许开发者在更高的抽象层次上工作,这意味着你可以专注于算法和功能,而不是硬件的具体细节。当你需要优化性能或功耗时,HLS工具可以自动为你找到最佳的硬件实现方案。

(三)HLS的使用

  1. 编写代码:使用C或C++等高级语言编写你的算法或系统。
  2. 配置HLS工具:设置性能目标(如速度、面积或功耗)和约束条件。
  3. 综合:HLS工具将高级代码转换成硬件描述语言(HDL),如Verilog或VHDL。
  4. 验证:检查生成的HDL代码是否符合预期的功能和性能。
  5. 实现:将HDL代码用于FPGA或ASIC的生产。

(四)HLS的优势

  • 加速开发:减少从概念到实现的时间。
  • 提高效率:自动优化可以提高系统的性能和功耗。
  • 灵活性:可以在不同的硬件平台上实现相同的高级代码。
  • 可扩展性:随着技术的发展,HLS工具可以适应新的硬件和需求。

(五)HLS与VHDL/Verilog编程技术的关系

HLS与传统的VHDL/Verilog编程技术之间存在紧密的联系,但它们在设计流程和抽象层次上有所不同:

  • 抽象层次:HLS提供了比VHDL/Verilog更高的抽象层次。开发者可以使用C/C++等高级语言来描述算法和逻辑,而不是直接使用VHDL/Verilog来设计硬件的门级或寄存器传输级(RTL)实现。

  • 设计流程:在HLS中,开发者首先用高级语言编写代码,然后通过HLS工具自动转换成VHDL或Verilog代码。相比之下,VHDL/Verilog编程需要开发者直接用这些硬件描述语言来编写代码。

  • 自动化:HLS的一个主要优势是自动化。它自动化了许多硬件设计任务,如资源分配、时序分析和优化,这在VHDL/Verilog编程中通常需要手动完成。

  • 目标一致性:尽管方法不同,但HLS和VHDL/Verilog编程的最终目标是相同的,即生成可以部署在FPGA或ASIC上的硬件设计。

  • 协同工作:HLS生成的HDL代码可以与手写的VHDL/Verilog代码结合使用,形成混合设计。这允许开发者在某些部分利用HLS的自动化优势,而在其他部分则利用VHDL/Verilog的精确控制。

(六)HLS的关键技术问题与局限性

尽管HLS提供了许多优势,但在实际应用中也存在一些关键技术问题和局限性:

  1. 语言支持:并非所有高级语言的特性都能被HLS工具完美支持,某些特性可能需要特别的处理或无法综合。
  2. 性能预测:预测HLS工具综合后的性能可能具有挑战性,因为自动化优化过程可能引入不可预见的结果。
  3. 调试难度:与传统的VHDL/Verilog相比,调试HLS生成的硬件可能更加困难,因为问题可能出现在高级代码或综合过程中。
  4. 特定领域限制:HLS可能在某些特定类型的硬件设计中表现更好,而在其他类型(如需要极端时序控制的设计)中可能不如手写VHDL/Verilog代码。
  5. 学习曲线:对于习惯于VHDL/Verilog的硬件工程师来说,学习HLS和相关工具可能需要一定的时间和努力。
  6. 工具依赖性:HLS的结果很大程度上依赖于所使用的特定工具和版本,不同的工具可能有不同的优化策略和结果。

二、点亮LED仿真

使用的是Vivado HLS 2019.2

(一)创建项目

①打开Vivado HLS,点击Create New Project
在这里插入图片描述

②输入相关工程信息
在这里插入图片描述

③选择顶层函数
在这里插入图片描述
④其他都点next,直到finish

(二)添加文件

①源文件添加
点击Source,右键后,选择New File,创建文件
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 Bench,选择New File
tb_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));
	}
}



(三)仿真与综合

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

②点击project->Run C Simulation(输出01交替,表示C仿真结果正确)
在这里插入图片描述

③点击Solution->Run C Synthesis->Active Solution
生成的总结文件(Synthesis(solution1)(flash_led_csynth.rpt))里有端口表格
以及solution1\impl\verilog中,有已经生成好的.v文件
在这里插入图片描述
在Helloworld.cpp界面,右边的Drective界面,右键led_o,进入如下界面:
在这里插入图片描述
按下图来配置后点击OK

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

三、总结

此次学习了如何使用Xilinx Vivado HLS 2019.2版本来实现一个简单的LED点亮仿真项目。这个过程包括了创建项目、添加源文件、编写C/C++代码、配置HLS工具、进行仿真与综合,以及最终的验证和实现步骤。

HLS(高级综合)作为一种设计方法,它允许开发者使用高级语言(如C或C++)来编写算法或系统,然后自动将其转换成硬件描述语言(HDL),如Verilog或VHDL。这种方法的优势在于能够加速开发过程,提高效率,增加灵活性,并具备可扩展性。

四、引用

【HarrietLH】基于FPGA实现LED的闪烁——HLS
【终极末影龙】HLS入门-LED闪烁仿真

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1710136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】【深度学习】正则化(Regularization)

概念 正则化&#xff08;Regularization&#xff09;是在机器学习模型中避免过拟合的一种技术。它通过引入一个惩罚项&#xff08;即正则项&#xff09;来限制模型的复杂度&#xff0c;以此来提防模型过度依赖训练数据&#xff0c;捕获数据中的噪音信息而导致过拟合现象。简单…

企业营收分析难?搞定收入认领月底不加班!

在当今日益激烈的市场竞争中&#xff0c;企业的营收分析不仅是衡量经营成果的关键指标&#xff0c;更是指导企业未来发展的重要依据。然而&#xff0c;对于许多企业来说&#xff0c;营收分析的过程往往繁琐且耗时&#xff0c;尤其是月底结账时&#xff0c;大量的数据和复杂的计…

【机器学习300问】95、什么是KNN算法?它和K-means什么关系?

一、KNN算法的定义 KNN&#xff08;K-Nearest Neighbors&#xff09;算法&#xff0c;是一种简单而有效的监督学习方法。它既可以用在分类任务&#xff0c;也可用在回归任务中。KNN算法的核心思想&#xff1a;在特征空间中&#xff0c;如果有一个数据点周围的大多数邻居属于某个…

10. C++异步IO处理库和使用libevent实现高性能服务器

C比较有名的异步IO处理库 libevent 这个主要使用的是epoll。libevthplibuvlibev 我们主要介绍libevent。 libevent重要函数 event_base_new 这个可以对应于epoll_create也就是创建一个实例。还可以初始化libevent所有管理相关的代码。比如说所能用到的队列&#xff0c;栈&a…

OFDM 802.11a的FPGA实现:发射部分的最终实现

目录 1.摘要 2.最终实现的ModelSim仿真 3.Matlab仿真和MoselSim仿真进行对比 4.完整工程 1.摘要 本系统在Xilinx的zynq 7000系列FPGA芯片上实现了一个基于IEEE 802.11a协议的OFDM基带处理发射机的功能。本系统包含了整个发射机的所有功能&#xff0c;包括序列训练符号、Si…

现代信号处理11_Spectral Analysis谱分析(CSDN_20240526)

谱分析与傅里叶变换 对于一个信号&#xff0c;一方面可以从时域上对其进行分析&#xff0c;另一方面也可以从频域上对其进行认识&#xff0c;对信号进行频谱分析能够帮助我们了解能量在频域上的分布。 确定性信号的能量通常是有限的&#xff0c;而平稳随机信号的能量通常是无限…

No input file specified.(‘.user.ini’文件问题宝塔复制到本地,其他情况可跳过)

症状 病因 一般是宝塔直接copy到本地的情况。 宝塔面板中的.user.ini文件是一个重要的配置文件&#xff0c;它主要用于配置PHP运行环境和网站环境。以下是.user.ini文件的主要作用和操作建议&#xff1a; 防止跨目录访问和文件跨目录读取。这是.user.ini文件的主要作用之一&a…

kafka-消费者组-点对点测试

文章目录 1、点对点测试1.1、获取 kafka-consumer-groups.sh 的帮助信息1.2、列出所有的消费者组1.3、创建消费者1并指定组 my_group11.4、创建消费者2并指定组 my_group11.5、创建消费者3并指定组 my_group11.6、创建生产者发送消息到 my_topic1 主题1.6.1、发送第一条消息rom…

用循环神经网络预测股价

循环神经网络可以用来对时间序列进行预测&#xff0c;之前我们在介绍循环神经网络RNN,LSTM和GRU的时候都用到了正弦函数预测的例子&#xff0c;其实这个例子就是一个时间序列。而在众多的时间序列例子中&#xff0c;最普遍的就是股价的预测了&#xff0c;股价序列是一种很明显的…

【PG16】后 EL 7 时代,PG 16 如何在 CentOS 7 上运行

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ ★ 本文写于 2023-09-29 PostgreSQL 16 Released 9/14, PostgreSQL 16 正式发布。从发布公告^1 和 Release Notes^2 可以看到 PG16 包含了诸多新特性和增强改进。 性能提升&#xff0c;查询计划…

ssm超市管理系统java超市进销存管理系统jsp项目

文章目录 超市进销存管理系统一、项目演示二、项目介绍三、系统部分功能截图四、七千字项目文档五、部分代码展示六、底部获取项目源码和七千字项目文档&#xff08;9.9&#xffe5;带走&#xff09; 超市进销存管理系统 一、项目演示 超市进销存管理系统 二、项目介绍 角色分…

Dynadot API调整一览

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

算法设计第七周(应用哈夫曼算法解决文件归并问题)

一、【实验目的】 &#xff08;1&#xff09;进一步理解贪心法的设计思想 &#xff08;2&#xff09;掌握哈夫曼算法的具体应用 &#xff08;3&#xff09;比较不同的文件归并策略&#xff0c;探讨最优算法。 二、【实验内容】 设S{f1,…,fn}是一组不同的长度的有序文件构…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm&#xff0c;详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架&#xff08;Vue CLI&#xff09;是Vue.js官方提供的一个命令行工具&…

打乱一维数组中数据(小练习)

int[] tempArr{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 要求&#xff1a;打乱一维数组的数据&#xff0c;并按照4个一组的方式添加到二维数组中。 package chengyu4; import java.util.Random; public class Test{public static void main(String args[]) {int[] temArr {1…

CM2038A 3W 双通道立体声音频功率放大器芯片IC

功能说明: CM2038A是一双路音频功率放大器&#xff0c;它能够在5V 电源电压下给一个4Ω负载提供THD小于10%、最大平均值为3W的输出功率。另外&#xff0c;在驱动立体声耳机时耳机输入引脚可以使放 大器工作在单边模式。 CM2038A是为提供高保真音频输出而专门设计…

【每日一坑】KiCAD 覆铜区域约束

【每日一坑】 1.螺丝孔周围不想要要铜皮&#xff1b; 2、首先在CTRLshiftK;画一个区域&#xff0c;比如铺一个GND; 3、选择CUTOUT; 4、画线&#xff0c;画好闭合图形&#xff1b;如下图 5、就是这样了&#xff0c;就是还没有画圆或者异形的&#xff1b;

如何制定一个有效的现货黄金投资策略(EEtrade)

制定一个有效的现货黄金投资策略涉及多方面的考量。以下是几个步骤和考虑因素&#xff0c;可以帮助您建立一个坚实的投资策略&#xff1a; 1. 设立清晰的投资目标 决定您投资现货黄金的主要目的。是否是为了短期利润&#xff0c;长期保值增值&#xff0c;还是为了投资组合的多…

如何通过网络性能监控和流量回溯分析提升网络效率?

目录 网络性能监控的重要性 什么是网络性能监控&#xff1f; 为什么需要网络性能监控&#xff1f; 流量回溯分析的应用 什么是流量回溯分析&#xff1f; 流量回溯分析的优势 实现网络性能监控和流量回溯分析的方法 使用高性能的分析工具 部署网络监控系统 结论 在当今…

Windows内核函数 - 创建关闭注册表

在驱动程序的开发中&#xff0c;经常会用到对注册表的操作。与Win32的API不同&#xff0c;DDK提供另外一套对注册表操作的相关函数。首先明确一下注册表里的几个概念&#xff0c;避免在后面混淆。 图1 注册表概念 有5个概念需要重申一下&#xff1a; * 注册表项&#xff1a; 注…