南京观海微电子---Vitis HLS设计流程(实例演示)——Vitis HLS教程

1. 前言

课时2我们介绍了Vitis HLS的设计流程,如下图所示:

图片

算法或软件的设计和仿真都基于C/C++,通过HLS平台导出打包好的IP RTL代码,最后将该打包的IP加入到主工程使用。

本课时,我们通过一个具体的实例,演示HLS设计流程。

2. Vitis HLS设计注意事项

  • 在VitisHLS中,只有一个函数可以设为顶层综合函数,但不能是main()函数。

  • 任何在顶层函数下的子函数都会被综合,并且综合后得到代码的函数层级结构可以保留。

图片

  • 有些代码和结构是不可被Vitis HLS综合的,包括动态分配存储空间、与操作系统相关操作等。

3. Vitis HLS设计示例

3.1 Vitis HLS工程建立

(1)新建Vitis HLS工程,如下图所示,工程名为“HLS_StartDemo”;

图片

 

(2)指定要综合的顶层函数名称,此处我们填写待综合的函数名称为“VectorAdd”;

图片

 

(3)可以在建立工程的时候,暂时不添加Testbench文件。

图片

 

(4)创建Solution,同时要指定Solution名称,模块的时钟周期以及FPGA器件型号。

图片

 

(5)添加示例代码,示例工程代码主要包含3个文件:

图片

其中,VectorAdd.h 为头文件;VectorAdd.cpp为源文件;VectorAdd_tb.cpp为Test Bench。该工程代码主要实现的功能是:在一个for循环内,对一个数组做加法。顶层函数如下:

图片

 

测试的Testbench部分截图如下:

图片

 

Testbench里既包含了测试数据,也包含了正确的输出结果用于做仿真比较。

工程文件加完后,工程结构如下图所示:

图片

 

3.2 仿真和综合

(1)对工程进行仿真,在菜单栏中点击“C Simulation”。

图片

 

得到的仿真输出如下,可以看到结果显示“TestPass”。

(2)仿真通过后,对工程进行综合,在菜单栏中点击“C Synthesis”。

图片

打开综合报告,可以看到C代码被综合成RTL代码后,使用的硬件资源评估、性能评估等等。

图片

图片

(3)综合通过后,对工程进行联合仿真,在菜单栏中点击“Co-Simulation”。

图片

图片

可以查看到联合仿真后的仿真报告。报告显示了联合仿真的状态为“Pass”,并附有一些性能评估报告。

图片

(4)联合仿真通过后,我们可以打开波形查看窗口“Open Wave Viewer…”

图片

更加直观的查看仿真结果是什么样子,查看结果时会自动打开Vivadao。

图片

 

其中“Block-level IO Handshake”端口为握手端口信号:

图片

 

以下为输入输出数组或变量端口,端口包含地址总线、使能信号、写使能信号、数据总线等:

图片

 

3.3 创建另一个Solution

(1)创建新Solution

Vitis HLS给用户提供了非常方便创建新Solution的接口。用户可以点击工具栏上的“New Solution”来给同样的工程代码创建新的Solution。

图片

 

新的Solution命名为“solution2”,同时我们勾选“Copy directives and constraints from solution: solution1”选项,即solution2拷贝了solution1原有的directives指令(该示例中,solution1的directives指令为空)。

图片

 

(2)给命名为“myloop”的循环添加directive指令。右键“myloop”,点击“Insert Directive…”

图片

我们选择了“HLS PIPELINE”指令(这些指令的含义将在后面课时着重讲解);

图片

 

(3)针对“solution2”对工程进行综合,生成综合报告。

(4)在菜单栏中点击“Compare Reports…”,比较同样的工程在两个Solutions下综合出来的结果。

图片

 

(5)由于在Vitis HLS 2021.1版本中,建立新工程(solution1)时即便没有添加directives,HLS会给solution默认添加“HLS PIPELINE”指令。而我们给solution2添加的directives也为“HLS PIPELINE”指令,因此两个Solutions综合编译出来的结果是一致的(大家可以尝试添加不同的directives指令,然后对比下不同Solutions综合编译出的结果)。

图片

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

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

相关文章

Dapr(三) Dapr核心组件的使用一

结合前两期 Dapr(一) 基于云原生了解Dapr(Dapr(一) 基于云原生了解Dapr-CSDN博客) Dapr(二) 分布式应用运行时搭建及服务调用(Dapr(二) 分布式应用运行时搭建及服务调用-CSDN博客) 下篇推出dapr服务注册与发现,dapr组件绑定,dapr Actor功能。 目录 1.…

中颖51芯片学习2. IO端口操作

一、SH79F9476 I/O端口介绍 1. 特性 SH79F9476提供了30/26位可编程双向 I/O 端口;端口数据在寄存器Px中;端口控制寄存器PxCRy是控制端口作为输入还是输出;端口作为输入时,每个I/O端口均带有PxPCRy控制的内部上拉电阻。有些I/O引…

超详细!211页网络协议与管理,看完终于明白了(建议收藏)

与其说计算机改变了世界,不如说是计算机网络改变了世界。作为计算机网络通信实体之间的语言,网络通信协议对计算机正常通信起着极大的作用。 那么到底什么是网络协议与管理呢?今天给大家分享一份211页网络协议与管理文档,包含概念…

碧桂园服务净利降两成,关联交易收入仅占2.9%,发力增值服务充电桩日进超10万

自2018年分拆上市以来,碧桂园服务经历过非常高速的发展,曾是物管市场的“并购王”,但从2023年开始,希望从外延式的增长向内生式增长转型,将往期的经验与教训,通过投后管理沉淀下来,向高质量发展…

nginx多https证书配置精简

其实有很多方式,网上看到一个这个方法,给大家介绍一下。 首先,开启支持-TLS SNI support Nginx开启单IP多SSL证书支持-TLS SNI support Nginx支持单IP多域名SSL证书需要OpenSSL支持,首先需要编译安装一个高版本的openssl。 检查…

04 Python进阶:MySQL-PyMySQL

什么是 PyMySQL? PyMySQL 是一个用于 Python 的纯 Python MySQL 客户端库,提供了与 MySQL 数据库进行交互的功能。PyMySQL 允许 Python 开发人员连接到 MySQL 数据库服务器,并执行诸如查询、插入、更新和删除等数据库操作。 以下是 PyMySQL …

自动驾驶领域中的感知,决策,控制

目录 一、自动驾驶领域感知决策控制概论 二、自动驾驶感知 三、自动驾驶决策 四、自动驾驶控制 一、自动驾驶领域感知决策控制概论 1.感知(Perception):感知是指系统通过各种传感器来感知周围环境的能力,包括识别和理解道路、…

第29篇:秒表计时器

Q:本期我们采用计数器来实现秒表计时器,循环进行0~9计时。 A:在数码管HEX0上循环从0到9计数,间隔时间为1s,使用计数器实现1s时间间隔。 DE2-115开发板提供了50MHz时钟,触发器直接以50MHz信号作为同步时钟…

过亿级别的用户数据如何检查用户名是否存在?

目录 引言用户名存在性检查的挑战用户规模庞大带来的性能挑战数据一致性与并发性问题防止恶意行为的挑战 常见的解决方案基于数据库的方案基于缓存的方案基于分布式系统的方案基于搜索引擎的方案 案例分析与实践经验分享社交媒体平台的用户名检查方案 引言 随着互联网的普及和数…

redis的Bitmaps详细介绍

Redis的 Bitmaps(位图)并不是一种特殊的数据类型,而是字符串的二进制操作。虽然在 Redis 内部,BitMaps 是以字符串数据类型来存储的,但是它们却可以使用一些特殊的命令进行操作。如下是关于Redis Bitmaps的详细介绍&am…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(9)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 第一课 ——第三课素材文件 https://www.alipan.c…

怎么在UE过场动画中加入振动效果

我们已经学会了怎么在游戏中加入振动效果,比较典型的交互场景如:在开枪时让手柄同步振动,实现起来真的很简单,就是定义场景和事件,然后在游戏事件发生时播放特定的振动资源文件,跟播放音效是极其相似的&…

探索Linux的挂载操作

在Linux这个强大的操作系统中,挂载操作是一个基本而重要的概念。它涉及到文件系统、设备和数据访问,对于理解Linux的工作方式至关重要。那么,挂载操作究竟是什么,为什么我们需要它,如果没有它,我们将面临什…

2024年华为OD机试真题-找数字-Java-OD统一考试(C卷)

题目描述: 小扇和小船今天又玩起来了数字游戏,小船给小扇一个正整数n (1<=n<=1e9),小扇需要找到一个比n大的数字m,使得m和n对应的二进制中1的个数要相同(如4对应二进制100,8对应二进制1000,1的个数都为1),现在求m的最小值。 输入描述: 输入:第一行输入一个正整数…

【实时监控主机与某个IP的网络连接情况】

Python脚本 写个脚本监控主机与某几个IP的连接情况&#xff0c;发现存在这种连接的&#xff0c;记录连接起始时间、源IP源、端口、目的IP、目的端口等信息 import os import time import subprocess from typing import List# 目标IP列表 TARGET_IPS ["192.168.1.1&quo…

基因组de novo组装

分以下几个部分&#xff1a; CLR组装 HIFI组装 ONT组装 二、三代数据矫正 组装结果评估 一、CLR组装 下机数据&#xff1a; 主要用那个bam文件 软件&#xff1a;wtdbg2 第一步&#xff1a;bam转fasta文件 参考&#xff1a;https://www.jianshu.com/p/03c7eb11102d # 进行基…

基于单片机放大电路程控放大特性参数设计

**单片机设计介绍&#xff0c;基于单片机放大电路程控放大特性参数设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机放大电路程控放大特性参数设计是一个结合了单片机编程和放大电路技术的综合性项目。以下是对该设计项目的概…

第⑪讲:Ceph集群OSD扩容方案及实现横向和纵向扩容

文章目录 1.Ceph集群OSD扩容方案2.实现OSD的横向扩容4.实现OSD的纵向扩容 1.Ceph集群OSD扩容方案 Ceph集群OSD的扩容支持两种方式&#xff1a; 横向扩容 通过增加OSD节点来达到扩容的目的。使用横向扩容要完成以下几个步骤&#xff1a; 在新的机器中进行初始化操作、配置Yum源…

AJAX —— 学习(三)(完结)

目录 一、jQuery 中的 AJAX &#xff08;一&#xff09;get 方法 1.语法介绍 2.结果实现 &#xff08;二&#xff09;post 方法 1.语法介绍 2.结果实现 &#xff08;三&#xff09;通用型的 AJAX 方法 1.语法介绍 2.结果实现 二、AJAX 工具库 axios &#xff08…

1.手写JavaScript快速排序

一、核心思想&#xff1a; 定位中间值和左右数组&#xff0c;将小于等于中间值的置于左数组&#xff0c;否则放在右数组&#xff0c;递归执行上述操作&#xff0c;出口为数组的长度为1或者空&#xff0c;返回数组本身。 二、代码实现&#xff1a; let arr [2, 3, 5, 7, 9, …