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

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_ocnt_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.mzph.cn/web/17973.shtml

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

相关文章

在矩池云上使用StoryDiffusion的详细方法

StoryDiffusion 是由南开大学和字节跳动团队联合研发的&#xff0c;基于一致性自注意力机制生成长跨度图像和视频的新型扩散模型&#xff08;Consistent Self-Attention for Long-Range Image and Video Generation&#xff09;&#xff0c;使用者不需要进行额外训练&#xff0…

VBA技术资料MF158:获取系统的用户名

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

ROS学习笔记(16):夹缝循迹

0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解&#xff0c;而这期我们来讲一下夹缝循迹&#xff0c;也常被叫follow the gap&#xff0c;也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划&#xff0c;例如巡墙循迹和夹缝循迹&…

CTF网络安全大赛简单的web抓包题目:HEADache

题目来源于&#xff1a;bugku 题目难度&#xff1a;简单 题目 描  述: > Wanna learn about some types of headache? > Lets dig right into it! 下面是题目源代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"&…

智能高效的IDE GoLand v2024.1全新发布 - 进一步升级AI辅助工具

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议&#xff0c;通过一步撤消快速安全重构&#xff0c;智能代码完成&#xff0c;死代码检测和文档提示帮助所有 Go 开发人员&#xff0c;从新手到经验丰富的专业人士&#xff0c;创建快速、高效、和可靠的…

基于Spring 框架中的@Async 注解实现异步任务

Async 是 Spring 框架中的一个注解&#xff0c;用于实现方法级别的异步执行。使用 Async 可以让你的代码在非当前线程中执行&#xff0c;从而提高应用的并发性能。 1、 启用异步支持 在 Spring 应用的主配置类或任何其他配置类上添加 EnableAsync 注解来开启异步任务的支持 …

极验3逆向 JS逆向最新点选验证码 逆向分析详解

目录 声明&#xff01; 一、请求流程分析 二、w参数生成位置 三、主要问题 四、结果展示 原创文章&#xff0c;请勿转载&#xff01; 本文内容仅限于安全研究&#xff0c;不公开具体源码。维护网络安全&#xff0c;人人有责。 声明&#xff01; 本文章中所有内容仅供学习交流…

Pytorch 1.9.0环境安装

pytorch官方链接: https://pytorch.org/get-started/previous-versions/ 安装指令&#xff1a;conda install pytorch1.9.0 torchvision0.10.0 torchaudio0.9.0 cudatoolkit11.3 -c pytorch -c conda-forge 报错&#xff1a;Solving environment: unsuccessful initial attemp…

分支机构多,如何确保文件跨域传输安全可控?

随着企业全球化发展&#xff0c;分支机构的分布越来越广泛&#xff0c;跨域文件传输需求也随之增加。然而&#xff0c;跨域文件传输面临的数据安全和传输效率问题&#xff0c;使得构建一个安全、可控的文件交换系统成为迫切需求。FileLink跨网文件交换系统通过综合的技术手段和…

Java常见集合类一(List)

一、Collection接口及其常见实现子类、子接口 由上图可以看出&#xff0c;Collection 接口实现了 Iterable 接口&#xff1b; Iterable接口是Java集合类中的核心接口之一&#xff0c;实现该接口的类具有迭代功能&#xff0c;它提供了能够对实现它的子类 中的元素进行逐个遍历的…

Android 13 sysprop_library新增属性

前提 我们在androidP及之前的版本&#xff0c;平台侧及应用层开发习惯于通过调用&#xff08;或者反射&#xff09;SystemProperties系统API的方式进行系统属性的读写。Android R以后&#xff0c;平台侧代码采用了一种将系统属性封装成类方法的形式供开发者调用。 Android R以…

go语言,golang,linux,unbantu安装

查看系统是arm还是amd uname -m 命令可以显示系统的架构类型&#xff1a; uname -m输出可能是&#xff1a; x86_64&#xff1a;表示是 AMD64 架构&#xff08;即 64 位的 x86 架构&#xff09;。aarch64&#xff1a;表示是 ARM64 架构&#xff08;即 64 位的 ARM架构&#xf…

SMB工具横向移动

一. SMB工具介绍和使用 1.介绍 2013年的Defcon上&#xff0c;就引入了smbexec&#xff0c;后续 smbexec 被 Impacket 进一步完善了。在Impacket中支持明文认证&#xff0c;NTLM认证&#xff0c;Aeskey认证等方式&#xff01; 2. 使用方法 命令&#xff1a; smbexec.exe 用户…

【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档】

目录 摘 要 第1章 绪论 1.1背景及意义 1.2 国内外研究概况 1.3 研究的内容 第2章 相关技术 2.1 Java简介 2.2 SSM三大框架 2.3 MyEclipse开发环境 2.4 Tomcat服务器 2.5 MySQL数据库 第3章 系统分析 3.1 需求分析 3.2 系统可行性分析 3.2.1技术可行性&#xff1a;技术背景 …

Debug-011-ES6中的链判断运算符(?.)

这个问题的来源是&#xff1a; 前端在请求后端接口&#xff0c;拿到的数据&#xff0c;有可能是这样的&#xff1a; data:{a:{b:{c:{d:""}}} } 我们前端小伙伴联调时需要取到d的值&#xff0c;我以前是这样写的&#xff1a; // 错误的写法 const value data.a.b.c…

ACM Proceedings Template 使用方法

模板导入 打开ACM Primary Article Template官网&#xff0c;可以看到自带overleaf模板&#xff0c;接下来我们使用overleaf来自动导入模板。 选择你需要的ACM Conference or Journals模板&#xff0c;然后Open as Template 栏目说明 接下来依次解释一下左边栏目的作用 …

5月28号总结

刷题记录 1.A. Phone Desktop 输入&#xff1a; 11 1 1 7 2 12 4 0 3 1 0 8 1 0 0 2 0 15 0 8 2 0 9 输出&#xff1a; 1 1 2 2 1 1 0 1 1 2 5 题意&#xff1a;题目给我们1x1和2x2的图标个数&#xff0c;让我们求最少需要多少个5x3的屏幕。 思路&#xff1a;当只看2x2的图…

开源与闭源:AI大模型发展路径的博弈

一、引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c;成为了近年来技术发展的热点。然而&#xff0c;在大模型的发展路径上&#xff0c;开源与闭源两种模式一直存在着激烈的博弈。本文将深入探讨这两种模式在大模…

module ‘plotting‘ has no attribute ‘EpisodeStats‘

plotting.py 的版本不同&#xff0c;可以使用下列版本 reinforcement-learning/lib/plotting.py at master dennybritz/reinforcement-learning GitHubImplementation of Reinforcement Learning Algorithms. Python, OpenAI Gym, Tensorflow. Exercises and Solutions to a…

如何将云服务器上操作系统由centos切换为ubuntu

本文将介绍如何将我们购买的云服务器上之前装的centos切换为ubuntu&#xff0c;云服务器以华为云为例&#xff0c;要切换的ubuntu版本为ubuntu20.04。 参考官方文档&#xff1a;切换操作系统_弹性云服务器 ECS (huaweicloud.com) 首先打开华为云官网&#xff0c;登录后点击右…