HLS入门

一. HLS是什么?与VHDL/Verilog编程技术有什么关系?

高层次综合 (HLS)

  1. 抽象级别更高:HLS允许设计者在更高的抽象级别上工作,使用高级编程语言来描述硬件的功能。这种方法减少了设计者需要处理的底层细节,使得设计过程更加高效。
  2. 自动生成HDL代码:HLS工具可以将高级语言编写的算法自动转换为HDL代码,从而生成可综合的硬件描述。这种自动化过程可以减少手工编码的错误,并加快设计周期。
  3. 设计优化:HLS工具通常具有许多优化选项,可以自动进行循环展开、流水线化等优化,以生成更高效的硬件实现。
  4. 加快设计验证:由于使用高级语言进行设计,设计者可以利用软件调试工具进行早期验证,从而加快整个设计验证过程。

VHDL/Verilog编程技术

  1. 低级硬件描述:VHDL和Verilog是传统的硬件描述语言,设计者需要在较低的抽象级别上编写代码,详细描述硬件的行为和结构。这需要设计者具备深厚的硬件知识。
  2. 手工编码:使用VHDL或Verilog进行设计时,所有的代码都是手工编写的。这种方法尽管灵活,但也容易出现人为错误,并且开发周期较长。
  3. 详细控制:设计者可以完全控制硬件的每一个细节,因此在需要精确控制和优化硬件时,VHDL和Verilog是不可替代的。
  4. 广泛应用:尽管HLS越来越受欢迎,但VHDL和Verilog仍然是硬件设计中的主流语言,尤其在FPGA和ASIC设计中。

关系和区别

  1. 抽象级别:HLS使用高级语言进行设计,抽象级别较高;而VHDL和Verilog是低级的硬件描述语言,需要详细描述每个硬件组件。
  2. 设计流程:HLS的设计流程包括高级语言编写、自动综合、优化和验证;而VHDL/Verilog的设计流程主要是手工编写和验证。
  3. 应用场景:HLS适用于快速原型设计和算法验证,尤其在设计周期较短的项目中表现出色;而VHDL和Verilog适用于需要详细控制和优化的复杂硬件设计。

总的来说,HLS与传统的VHDL/Verilog编程技术是互补的。HLS提高了设计效率,减少了设计复杂度,而VHDL和Verilog则提供了更高的控制和优化能力。在现代硬件设计流程中,设计者往往会结合使用这两种技术,以充分发挥各自的优势。

二. HLS有哪些关键技术问题?目前存在什么技术局限性?

高层次综合 (HLS) 虽然提供了显著的设计效率提升和抽象级别的提高,但在实际应用中仍然面临一些关键技术问题和局限性:

关键技术问题

  1. 精确的硬件映射:如何将高级语言中的抽象描述精确地映射到硬件结构上是HLS的核心挑战之一。高级语言的抽象程度较高,而硬件设计需要精确的细节控制,这两者之间的映射是一个复杂的过程。

  2. 性能优化:尽管HLS工具可以进行自动化的性能优化,但如何高效地利用硬件资源(如寄存器、逻辑单元、内存等)仍是一个挑战。自动化优化可能无法达到手工优化的精细程度。

  3. 并行性和流水线化:高级语言中的并行性和流水线化在硬件中实现时,需要处理数据相关性、控制依赖性等问题。HLS工具需要智能地分析和处理这些依赖关系,以生成高效的并行和流水线化硬件。

  4. 代码风格和结构:高级语言代码的风格和结构对生成的硬件有很大影响。设计者需要熟悉如何编写适合HLS工具处理的代码,以便生成高效的硬件。

  5. 调试和验证:从高级语言到硬件描述语言的转换过程中,调试和验证是一个复杂的问题。如何在高级语言级别进行有效的调试,并在硬件级别验证功能正确性,是HLS面临的重要问题。

技术局限性

  1. 性能与手工设计的差距:HLS生成的硬件在性能上可能与手工优化的设计存在一定差距。手工设计可以进行更细粒度的优化,而HLS工具的自动化优化难以达到相同的精度。

  2. 对复杂控制逻辑的支持不足:HLS在处理复杂的控制逻辑时可能表现出局限性。这是因为高级语言通常更适合描述算法,而硬件设计需要详细的状态机和控制逻辑。

  3. 工具的成熟度和兼容性:目前市场上的HLS工具在成熟度和兼容性上存在差异。不同工具对高级语言的支持程度不同,生成的硬件描述语言代码质量也有所不同。这可能导致在不同工具之间进行移植时遇到问题。

  4. 学习曲线:尽管HLS提高了抽象级别,但设计者仍然需要学习如何有效使用HLS工具,以及如何编写适合硬件实现的高级语言代码。这对传统的软件工程师和硬件设计师都是一个新的挑战。

  5. 资源开销:HLS工具和方法可能引入额外的资源开销,如增加硬件面积、功耗等。虽然HLS可以显著提高设计效率,但在资源受限的应用中,这些开销需要仔细权衡。

未来发展方向

尽管存在这些问题和局限性,HLS技术仍在不断发展。未来的研究和改进可能包括:

  1. 提高工具智能化:利用人工智能和机器学习技术,提高HLS工具的智能化水平,自动识别和优化复杂的硬件结构。
  2. 改进调试和验证工具:开发更强大的调试和验证工具,支持从高级语言级别到硬件级别的全流程验证。
  3. 优化算法:研究和开发更高效的算法,用于自动优化生成的硬件描述,缩小与手工优化的性能差距。
  4. 标准化和互操作性:推动HLS工具的标准化,增强不同工具之间的兼容性和互操作性,使得设计者可以更灵活地选择和切换工具。

总体来说,HLS作为一种前沿的设计技术,正在不断进步,并有望在未来的硬件设计中发挥越来越重要的作用。

三. 在win10(或者Ubuntu系统下)安装 Intel 或者 Xilinx 的支持HLS的FPGA编程开发软件(Quartus18或者Vivado18),设置好环境,完成一个入门级的HLS程序,并进行仿真或者实际开发板运行。

创建项目

1、点击Vivado HLS 中的Create New Project
在这里插入图片描述
2、设置项目名
在这里插入图片描述
在这里插入图片描述
3、加入文件
在这里插入图片描述
右键Source与Test Bench,分别新建文件Helloworld.cpp,Helloworld.h与tb_Helloworld.h。

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、仿真
在保存好代码之后,点击图中的这个按钮进行C仿真:
在这里插入图片描述
在这里插入图片描述
运行仿真后,出现下面这个界面就说明仿真成功了:
在这里插入图片描述
3、综合
进行综合之前,先选择Top Function。

点击Project -> Project Setting -> Synthesis ,点击Helloworld.cpp,并点击Browse选择函数flash_led。
在这里插入图片描述
然后点击C运行:
在这里插入图片描述
C 综合结束后,会有一个总结文件在这个文件的最后,有关于端口的表格:
在这里插入图片描述
solution1\impl\verilog中,有已经生成好的.v文件:
在这里插入图片描述
4、联合仿真
在这里插入图片描述
仿真结束后,出现下面界面,说明联合仿真成功:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

遥感和ENVI技术检测食物污染

对于生产者和消费者来说食物污染都是个问题。家禽污染会引发严重的健康问题&#xff0c;导致严重的危害。美国农业部需要一种方法&#xff0c;使用遥感影像在离开生产线之前探测出受污染的家禽。 解决方案 提起遥感&#xff0c;人们想到的大多是那些太空船和轨道卫星。然而在美…

标准化软件实施方案(直接套用即可)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施 软件开发全套资料获取&#xff1a;&#xff08;本文末个人名片也可直接获取&#xff09;软件开发全套资料_数字中台建设指南-CSDN博客 软件产品&am…

Python | Leetcode Python题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; class Solution:# 在【100. 相同的树】的基础上稍加改动def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:if p is None or q is None:return p is qreturn p.val q.val and self.isSameTree(p.left, q.ri…

[Linux] 进程概念

目录 1.冯诺依曼硬件体系结构 2.操作系统&#xff08;OS&#xff09; 3.系统接口 4.进程的概念 5.进程状态 6.四个其他概念 7.环境变量 8.进程地址空间 1.冯诺依曼硬件体系结构 在冯诺依曼体系结构中&#xff0c;计算机是由输入、输出、存储设备和中央处理器cpu组成的。图中体结…

代码随想录训练营打卡第36天:动态规划解决子序列问题

1.300最长递增子序列 1.问题描述 找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。 2.问题转换 从nums[0...i]的最长的递增的子序列 3.解题思路 每一个位置的n…

WebRTC | 网络传输协议 RTP 和 RTCP

WebRTC | 网络传输协议 RTP 和 RTCP WebRTC | 网络传输协议 RTP 和 RTCP如何选择 TCP 与 UDPRTP概述工作机制报文结构RTP 的使用RTP 拓展头RTP 中的填充数据翻译器和混合器同步控制报文大小wireshark 抓取 RTP 报文 RTCP概述工作机制分组类型报文结构WebRTC 的反馈报文RTPFBPSF…

鸿蒙系统和安卓系统通过termux搭建Linux系统—Centos

目录 1. 前言 2. 效果图展示 3. 安装termux 4. 安装Centos系统 4.1 更换源 4.2 拉取镜像 4.3 启动centos 5.结尾 1. 前言 大家好&#xff0c;我是jiaoxingk 今天这篇文章让你能够在手机或者平板上使用Linux-Centos系统 让你随时随地都能操作命令行进行装13 2. 效果图展示…

【电子学会】2023年09月图形化一级 -- 保护环境

保护环境 1. 准备工作 &#xff08;1&#xff09;删除角色小猫&#xff0c;添加角色Wizard&#xff0c;Bear-walking&#xff1b; &#xff08;2&#xff09;添加背景Desert和Forest。 2. 功能实现 &#xff08;1&#xff09;调整魔法师和熊的大小为50&#xff1b; &…

docker搭建gitlab及默认密码修改及配置修改

推荐官方文档 https://docs.gitlab.com/17.0/ee/install/docker.html 我使用的是docker run的方式&#xff0c;官方文档后面有docker-compose、swarm、k8s的部署文档 版本说明 1&#xff1a;可以部署gitlab-ce社区版和gitlab-ee企业版&#xff0c;然后&#xff0c;鉴于是个人…

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义&#xff0c;是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG&#xff1a;The X/Open Porta…

SpringIOCDI—第一讲

文章目录 什么是IOC什么是控制&#xff0c;谁控制谁什么是反转&#xff0c;从什么反转到什么了 IOC的注解五大类注解Controller注解&#xff08;控制器存储&#xff09;Service&#xff08;服务存储&#xff09;Repository&#xff08;仓库存储&#xff09;Componet(组件存储)C…

大语言模型实战——最小化agent

1. agent是什么 大模型拥有语言理解和推理能力后&#xff0c;就相当于拥有了大脑&#xff0c;要让模型发挥更大的潜力&#xff0c;就需要给它安装上手臂&#xff0c;让它拥有行动的能力。 而Agent就是一个将语言模型和外部工具结合起来的智能体&#xff0c;它使用语言模型的推…

安全设计 | Microsoft 威胁建模工具Threat Modeling Tool安装及使用详解(文末附样例)

1. 概览 微软威胁建模工具&#xff08;Threat Modeling Tool&#xff09;是 Microsoft 安全开发生命周期 (SDL&#xff0c;Security Develop LifeCycle) 的核心要素。 当潜在安全问题处于无需花费过多成本即可相对容易解决的阶段&#xff0c;软件架构师可以使用威胁建模工具提…

人工智能再现大脑细胞导航的活动模式

人工智能再现大脑细胞导航的活动模式 李升伟 编译 深度学习算法可自发模拟特殊神经元的活动&#xff0c;这种神经元活动可以告诉我们在空间的位置。 大鼠使用被称为网格细胞的大脑细胞帮助它们导航&#xff0c;人工智能程序已经可以再现这种能力。 科学家已经使用人工智能来再…

【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)

视频演示 基于AI技术智能语音台灯的设计 前言&#xff1a; 随着社会的快速发展&#xff0c;人们对家用电器智能化程度的要求越来越高。不管是对于学生人群还是对于工作加班者&#xff0c;台灯是每家每户必不可少的工具&#xff0c;长期处于光线太强或者过弱的环境中学习和一系列…

用户账户的权限管理

用户账户的权限管理 用户账号&#xff1a; 1、超级用户 &#xff1a;管理员账号 root 默认对本机拥有最高权限的账户&#xff0c;在系统中唯一。 2、普通用户&#xff1a;一般由管理员创建&#xff0c;拥有的权限是受限制的&#xff0c;一般只在自己的家目录中拥有完整的权限…

每日练习之排序——链表的合并;完全背包—— 兑换零钱

链表的合并 题目描述 运行代码 #include<iostream> #include<algorithm> using namespace std; int main() { int a[31];for(int i 1;i < 30;i)cin>>a[i];sort(a 1,a 1 30);for(int i 1;i < 30;i)cout<<a[i]<<" ";cout&…

走进创新高地,探索职业未来——记大学生参观刺掌信息科技学习活动

在这个向阳生长&#xff0c;充满活力的5月&#xff0c;一群来自江苏大学的充满朝气与求知欲的大学生们来我司参观学习&#xff0c;他们带着对网络安全的热爱和职业生涯的憧憬&#xff0c;走进我们的企业&#xff0c;开始了探索之旅。 交流会上&#xff0c;江苏刺掌信息科技有限…

Python使用multiprocessing实现多进程

大家好&#xff0c;当我们工作中涉及到处理大量数据、并行计算或并发任务时&#xff0c;Python的multiprocessing模块是一个强大而实用的工具。通过它&#xff0c;我们可以轻松地利用多核处理器的优势&#xff0c;将任务分配给多个进程并同时执行&#xff0c;从而提高程序的性能…

CTFHUB技能树——SSRF(二)

目录 上传文件 ​FastCGI协议 Redis协议 上传文件 题目描述&#xff1a;这次需要上传一个文件到flag.php了.祝你好运 index.php与上题一样&#xff0c;使用POST请求的方法向flag.php传递参数 //flag.php页面源码 <?phperror_reporting(0);if($_SERVER["REMOTE_ADDR&…