FPGA——HLS入门-LED闪烁仿真

news2025/1/12 7:00:26

系列文章目录

文章目录

  • 系列文章目录
  • 一、HLS介绍
    • 1、什么是HLS
    • 2、与VHDL/Verilog有什么关系?
    • 3、关键技术局限性
  • 二、Vivado HLS - LED闪烁仿真
    • 1、项目配置
    • 2、C仿真
    • 3、联合仿真
  • 三、总结


一、HLS介绍

1、什么是HLS

HLS就是高综合(High level Synthesis)的缩写,通过HLS,我们可以将C或者c++语言编译为FPGA能够读懂和运行的RTL级别的语言。

这个术语是行为和电子系统的结合:是一门技术,也是一门科学,它把设计意图抽象化,抽象视图可以自动地将人类设计者的努力付诸现实。最终生成的设计应遵循一系列要求,包括芯片面积、时钟频率、功耗和时间性能的要求等等。

通过HLS将电路设计规范的算法级或行为级描述在一定的约束条件下转化为电路结构描述的方法和过程。高层次综合又称为行为级综合、算法级综合等。它使设计者能够在更高层次进行电子设计,更快速有效地在较高层次设计验证和仿真,而较低层次的工作由工具来自动完成,从而让数字电路系统设计工程师可以有更多的精力和更充分的条件去进行设计空间的搜索,寻求最佳的设计方案。

HLS 的过程通常基本包括预处理、编译、转换、调度、分配、控制器、综合、RTL 、生成、和反编译等几个部分。编译、转换部分决定了软件的兼容性和易用性,调度(schedule)和分配(binding)主要决定了产生的 RTL 的性能、资源大小等。

2、与VHDL/Verilog有什么关系?

verilog 适合于RTL 级别的硬件描述,但是RTL 级别的硬件描述其实还是过于底层,因此这也带来了很多繁重的编码和设计工作,类似于汇编程序一样,Verilog可以精准的控制电路实现,但实现起来需要较长的周期,而HLS虽然可快速迭代,但其从软件到硬件翻译无论是面积还是资源均难以控制。

VHDL/Verilog两者结构基本相似,并行语句的种类也类似;

VHDL语言需要进行大量说明,程序通常比较长;

Verilog HDL通常不进行说明,或只进行非常简短的说明,程序比较简短。

3、关键技术局限性

关键技术
输入语言采用了类 C语言而非前两代的 HDL 语言,如 C、C++、SystemC 以及 SpecC、HandelC 等,这能够使得系统模型得到复用,进行进一步的软硬件实现。
实现了对时序(timing)比较精确的评估和调度。
实现了对验证环境的重复使用,通过 TLM 建模技术可以将系统验证环境复用于 RTL 级验证,降低了验证的复杂度。

局限性
没有早期的性能估计以及任何违反设计和平台限制的行为
没有利用所有可能的数据通信方式
没有功能概述,也没有对用户代码进行优化转换
支持代码报告得太晚了
在某些情况下,工具的高效实施是不可能的,例如当必须将太多的加速器映射到硬件部分时。 HLS工具无法预先检测到这种情况,也无法在用户坚持的情况下尽量减轻其影响。

二、Vivado HLS - LED闪烁仿真

1、项目配置

1.点击Vivado HLS 中的Create New Project

在这里插入图片描述
在这里插入图片描述

2.接下来选择定成函数,我们在这里暂不不添加,直接点击 Next
在这里插入图片描述
3.接下来是添加 C 仿真文件,我们同样先不添加,点击 Next
在这里插入图片描述
4.接下来进行器件的选择,在首先我们点击图中所示位置选择元器件

在这里插入图片描述
在这里插入图片描述
5.在导航栏中,文件列表所示
在这里插入图片描述
6.添加源文件
在这里插入图片描述

2、C仿真

1.编写代码
Helloworld.h

//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

//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);
		}
	}
}

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));
	}
}


2、仿真
在这里插入图片描述

在这里插入图片描述

弹出这个界面,什么都不用选。

运行仿真后,出现下面这个界面就说明仿真成功了:

在这里插入图片描述
3、综合
进行综合之前,先选择Top Function。

点击Project -> Project Setting -> Synthesis ,点击Helloworld.cpp,并点击Browse选择函数flash_led。

在这里插入图片描述
在这里插入图片描述

结束后,会有一个总结文件如下:
在这里插入图片描述
在这个文件的最后,有关于端口的表格:
在这里插入图片描述
文件:

在这里插入图片描述

3、联合仿真

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

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

然后点击联合仿真:

在这里插入图片描述

三、总结

通过HLS工具进行LED闪烁仿真可以帮助我们验证设计的正确性和功能性。在仿真过程中,我们可以观察LED的闪烁模式是否与我们预期的一致,并进行必要的调试和修正。仿真还可以帮助我们评估性能指标,如时序约束和资源利用率。

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

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

相关文章

如何开发微信小程序,后端,前端,小程序端,如何部署到腾讯云托管

开发微信小程序是一项非常有趣的任务&#xff0c;它涉及到前端、后端和小程序端的开发。在本文中&#xff0c;我们将介绍如何开发微信小程序&#xff0c;并将其部署到腾讯云托管。 一、前端开发 前端开发是微信小程序开发的第一步。在这一步中&#xff0c;我们需要使用微信小程…

分享几个网内可用的免费的ChatGPT网页版

Chatgpt: 与AI聊天的新体验 随着数字生活的普及和人工智能技术的快速发展&#xff0c;越来越多人希望与机器进行真挚的交流&#xff0c;体验身临其境的感觉。基于这个想法&#xff0c;我们推出了Chatgpt&#xff0c;一款基于自然语言处理技术和深度学习算法的智能聊天机器人&a…

Spark基础学习笔记----RDD检查点与共享变量

零、本讲学习目标 了解RDD容错机制理解RDD检查点机制的特点与用处理解共享变量的类别、特点与使用 一、RDD容错机制 当Spark集群中的某一个节点由于宕机导致数据丢失&#xff0c;则可以通过Spark中的RDD进行容错恢复已经丢失的数据。RDD提供了两种故障恢复的方式&#xff0c…

Linux防火墙之firewalld基础

一、firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具&#xff0c;取代了之前的iptables防火墙&#xff0c;也是工作在网络层&#xff0c;属于包过滤防火墙。 firewalld和iptables都是用来管理防火墙的工具&#xff08;属于用户态&#xff09;来定义防火墙的…

数据结构 之 二叉搜索树 结构

二叉树搜索树的基本属性&#xff1a; 如图所示&#xff1a;二叉搜索树有四个最基本的属性&#xff1a;指向节点的根&#xff08;root&#xff09;&#xff0c;节点中的键&#xff08;key&#xff09;、左指针&#xff08;right&#xff09;、右指针&#xff08;right&#xff…

DELL PowerVault MD3600f存储维修 控制器更换 电池更换

MD3600f 系列存储阵列介绍 MD3600f 系列是采用 2U 机架固定的外部独立磁盘冗余阵列 (RAID) 存储阵列&#xff0c;可容纳多达 12 个 3.5 英寸或 24 个 2.5 英寸的 6.0-Gbps 串行连接SCSI (SAS) 磁盘。 MD3600f 系列存储阵列可以使用 MD1200 系列扩展机柜以菊花链式连接&#xff…

解决:在 Router 中父级未引入单文件组件而且 children 中的单文件组件不能在页面展示的问题

1、问题展示&#xff1a; 其一、问题描述&#xff1a; 在 router 中父级未引入单文件组件&#xff0c;而只是写了其它配置&#xff0c;但在其 children 中写了配置且引入了单文件组件而未能在页面中展示&#xff1b; 其二、代码&#xff1a; // 某一块的静态路由管理 {path…

2021下半年

2021下半年 a d a c b 阶码是纯整数&#xff0c;尾数是纯小数 对于阶码&#xff1a; 对于尾数&#xff1a; 选b c c a c b c b 归属于受委托方 a b c a 前向传播 反向传播&#xff0c;求关键路径 b b 关键路径上的活动松弛时间为0 c 中缀式&#xff1a;需…

chatgpt赋能Python-python_namedtuple

Python中的namedtuple 在Python中&#xff0c;namedtuple是一个方便且易于使用的数据结构&#xff0c;可以有效地处理元组数据。 它是Python标准库collections中一个实用的类&#xff0c;可以创建一个具有命名属性的元组&#xff0c;类似于一个简单的类对象。namedtuple的属性…

Linux防火墙iptables(下)

一、通用匹配 1&#xff0c;协议匹配 2&#xff0c;地址匹配 3&#xff0c;接口匹配 二、隐含匹配 1.端口匹配 2&#xff0c;TCP标志位匹配 3&#xff0c;ICMP类型匹配 ICMP类型可以是字符串、数字代码 ICMP类型含义Echo-Request &#xff08;代码为8&#xff09;表示请求…

设计模式之规约模式

设计模式之规约模式 引言规约模式案例改造 参考 引言 规约模式的英文是Specification Pattern&#xff0c;Specification直译过来是要求、技术说明、明确的意思。光看名字估计大家都是一脸懵逼&#xff0c;根本不知道这个设计模式大概会是一个什么样子。这也是设计模式的一个通…

33.Mybatis-Plus

一、Mybatis-Plus。 &#xff08;1&#xff09;简介。 &#xff08;2&#xff09;快速开始_准备工作。 对于Mybatis整合MP有常常有三种用法&#xff0c;分别是MybatisMP、SpringMybatisMP、Spring BootMybatisMP。 &#xff08;2.1&#xff09;创建数据库以及表。 1.创建数…

chatgpt赋能Python-python_lanbda函数

Python Lambda函数&#xff1a;快速、灵活的编程利器 Python是当前最流行的编程语言之一&#xff0c;而在Python中&#xff0c;Lambda函数是一项十分强大的功能&#xff0c;它可以帮助开发者在编写代码时更快地完成任务&#xff0c;提高代码的灵活性和可读性。本文将介绍Pytho…

【Linux】Linux小程序(进度条)、git命令行的使用及gdb的使用

&#x1f601;作者&#xff1a;日出等日落 &#x1f514;专栏&#xff1a;Linux 辛勤的蜜蜂永没有时间悲哀。 ——布莱克 目录 \r和\n的区别&#xff1a; 进度条小程序 git 命令行 Linux调试器&#xff1a;…

Linux-模拟一个简单的shell

什么是shell外壳&#xff1f;就是操作系统给我们的一个命令行解释器&#xff0c;在Linux系统中&#xff0c;它的shell叫做bash。 那么bash本质是什么呢&#xff1f; 本质就是一个文件&#xff0c;一个进程。 万物皆文件 每个操作系统的shell都是很复杂的&#xff0c;想要…

chatgpt赋能Python-python_o_n_

Python O(n)的介绍 Python是世界上最流行的编程语言之一&#xff0c;因为其简单易学的语法&#xff0c;强大的功能和广泛的使用领域。对于程序员来说&#xff0c;时间复杂度是非常重要的一个概念。它用来描述一个算法在处理输入数据时所需的时间和空间资源。 在计算机科学的算…

CSS中块级元素,行内块元素,行内元素的特点

CSS自学笔记 目录 一、什么是元素显示模式 二、CSS的元素显示模式 1.块元素 2.行内元素 3.行内块元素 前言 网页的标签非常多&#xff0c;在不同地方会用到不同类型的标签&#xff0c;了解他们的特点可以更好的布局我们的网页。 HTML 元素一般分为块元素和行内元素两种类型…

220v转15v芯片-220v转15v用什么芯片?

FET开关&#xff0c;具有高效率和稳定性。 Q&#xff1a;为什么需要将220v转换为15v&#xff1f; A&#xff1a;在家庭电器和电子设备中&#xff0c;很多电路需要低电压直流电源供电。而家庭供电一般为220v交流电&#xff0c;需要经过转换才能得到所需的低电压直流电源。 Q&…

错题记录—哪个类用到了解决哈希冲突的开放定址法,MYSQL实现主从复制的日志是哪种,Java对象的初始化方式有

解决哈希冲突&#xff08;四种方法&#xff09;&#xff1a; 1、开放定址法&#xff1a;我们在遇到哈希冲突时&#xff0c;去寻找一个新的空闲的哈希地址。 &#xff08;1&#xff09;线性探测法 &#xff08;2&#xff09;平方探测法&#xff08;二次探测&#xff09; 2、再哈…

题解2023.5.23(欧拉筛)

C.Hossamand Trainees 欧拉筛,预处理先筛出质数&#xff0c;分解质因数对于出现两次及以上的输出yes 我们需要筛出根号(1e9)以内的所有质数&#xff0c;根据质数定理&#xff0c;大约有4e^3个质数&#xff0c; 时间复杂度分析&#xff1a;le5*4e34e8 #include<bits/stdc.…