Vitis HLS 学习笔记--HLS入门示例集合-目录

目录

1. 示例集合概述

2. Interface 接口

2.1 Aggregation_Disaggregation

2.1.1 aggregation_of_m_axi_ports

2.1.2 aggregation_of_nested_structs

2.1.3 aggregation_of_struct

2.1.4 auto_disaggregation_of_struct

2.1.5 disaggregation_of_axis_port

2.1.6 struct_ii_issue

2.2 Memory

2.2.1 ecc_flags

2.2.2 manual_burst

2.2.3 max_widen_port_width

2.2.4 memory_bottleneck

2.2.5 ram_uram

2.2.6 rom_lookup_table_math

2.2.7 using_axi_master (DONE)

2.3 Register

2.3.1 using_axi_lite (DONE)

2.3.2 using_axi_lite_with_user_defined_offset

2.4 Streaming

2.4.1 axi_stream_to_master

2.4.2 using_array_of_streams

2.4.3 using_axi_stream_no_side_channel_data

2.4.4 using_axi_stream_with_side_channel_data

2.4.5 using_axi_stream_with_struct

2.4.6 using_axis_array_stream_no_side_channel_data

3. Pipelining

3.1 Functions

3.1.1 function_instantiate

3.1.2 hier_func

3.2 Loops

3.2.1 imperfect_loop

3.2.2 perfect_loop

3.3.3 pipelined_loop

3.3.4 using_free_running_pipeline

4. Task_Level_Parallelism

4.1 Control_driven

4.1.1 Bypassing

4.1.1.1 input_bypass

4.1.1.2 middle_bypass

4.1.1.3 output_bypass

4.1.2 Channels

4.1.2.1 Vitis

4.1.2.2 merge_split

4.1.2.3 simple_fifos

4.1.2.4 using_fifos

4.1.2.5 using_pipos

4.1.2.6 using_stream_of_blocks

4.2 Data_driven

4.1 handling_deadlock

4.2 mixed_control_and_data_driven

4.3 simple_data_driven

5. Modeling

5.1 Pointers

5.1.1 basic_arithmetic

5.1.2 basic_pointers

5.1.3 multiple_pointers

5.1.4 native_casts

5.1.5 stream_better

5.1.6 stream_good

5.1.7 using_double

5.2 basic_loops_primer

5.3 fixed_point_sqrt

5.4 free_running_kernel_remerge_ii4to1

5.5 using_C++_templates

5.6 using_arbitrary_precision_arith

5.7 using_arbitrary_precision_casting

5.8 using_fixed_point

5.9 using_float_and_double

5.10 using_vectors

5.11 variable_bound_loops 变量循环边界

6. Misc

6.1 initialization_and_reset

6.1.1 global_array_RAM

6.1.2 static_array_RAM

6.1.3 static_array_ROM

6.1.4 static_array_of_struct_with_array_RAM

6.1.5 static_struct_with_array_RAM

6.1.6 static_struct_with_array_RAM_Versal

6.2 malloc_removed

6.3 rtl_as_blackbox

7. 学习规划


1. 示例集合概述

GitHub - Xilinx/Vitis-HLS-Introductory-ExamplesContribute to Xilinx/Vitis-HLS-Introductory-Examples development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/Xilinx/Vitis-HLS-Introductory-Examples此示例集与先前的博客《Vitis HLS 学习笔记--HLS优化指令示例-目录-CSDN博客》相得益彰,分别聚焦于展示HLS功能和演示HLS优化指令。与之前的博客相比,需要同时编译宿主代码和PL(可编程逻辑)代码,而本示例集则可完全在Vitis HLS仿真环境下运行,使得效果展示更为直观。这两者互为补充,共同促进了对Vitis HLS的深入理解和掌握。

本示例集分类如下:

  • Interface(接口):展示各种模式和接口协议使用的常见示例
  • Pipelining(流水线):展示循环和函数的流水线pragma使用的常见示例
  • Task_Level_Parallelism(任务级并行):展示任务级并行编程模型和拓扑结构示例
  • Modeling(建模):数学和DSP示例以及其他常见使用模型/算法
  • Misc(其他):例如C++中的RTL黑盒等其他示例

2. Interface 接口

2.1 Aggregation_Disaggregation

2.1.1 aggregation_of_m_axi_ports

#pragma HLS AGGREGATE compact=auto

2.1.2 aggregation_of_nested_structs

嵌套结构体

2.1.3 aggregation_of_struct

2.1.4 auto_disaggregation_of_struct

2.1.5 disaggregation_of_axis_port

2.1.6 struct_ii_issue

迭代间隔违规

2.2 Memory

2.2.1 ecc_flags

Error Checking and Correcting

2.2.2 manual_burst

如果在设计中并未发生自动突发,则可使用 hls::burst_maxi 数据类型执行手动突发

2.2.3 max_widen_port_width

可选参数max_widen_bitwidth,因为Compiler会根据数据类型自动进行数据位宽的调整。

2.2.4 memory_bottleneck

achive II=1 by removing redundant memory accesses in the code。

2.2.5 ram_uram

BIND_STORAGE type=ram_2p impl=uram,DEPENDENCE inter WAR false,WAR is Write-After-Read

2.2.6 rom_lookup_table_math

sin_table[i] = (din1_t)(32768.0 * real_val);

2.2.7 using_axi_master (DONE)

《Vitis HLS 学习笔记--AXI4 主接口-CSDN博客》

2.3 Register

2.3.1 using_axi_lite (DONE)

2.3.2 using_axi_lite_with_user_defined_offset

2.4 Streaming

2.4.1 axi_stream_to_master

hls::stream<int,…> count; 是为了更方便自动优化实现流水线设计

2.4.2 using_array_of_streams

hls::stream<int> s_in[M],array即数组

2.4.3 using_axi_stream_no_side_channel_data

无信道侧,hls::axis<type, 0, 0, 0>,区别于传输控制信号

2.4.4 using_axi_stream_with_side_channel_data

含信道侧,hls::axis<type, WUser, WId, WDest>;

2.4.5 using_axi_stream_with_struct

查看Slide:“HLS - 接口综合:典范”

2.4.6 using_axis_array_stream_no_side_channel_data
 

3. Pipelining

3.1 Functions

3.1.1 function_instantiate

实例化函数

3.1.2 hier_func

分层函数,__SYNTHESIS__

3.2 Loops

3.2.1 imperfect_loop

循环边界是变量、循环体出现在外层

3.2.2 perfect_loop

循环边界是固定常数,循环体只在最内层

3.3.3 pipelined_loop

3.3.4 using_free_running_pipeline

DATAFLOW
 

4. Task_Level_Parallelism

4.1 Control_driven

4.1.1 Bypassing

4.1.1.1 input_bypass

(a-->t2, t2->t3) (b->k1; k1->k2; k2-k3)

4.1.1.2 middle_bypass

(a-->t1, t1->t3) (b->k1; k1->k2; k2-k3)

4.1.1.3 output_bypass

(a-->t1, t1->t2) (b->k1; k1->k2; k2-k3)

4.1.2 Channels

4.1.2.1 Vitis

use FIFOs instead of the default PIPOs on host

4.1.2.2 merge_split

<hls_np_channel.h> (number of parallel channel)

4.1.2.3 simple_fifos

config_dataflow -default_channel fifo -fifo_depth 2

4.1.2.4 using_fifos

#pragma HLS performance target_ti=32,ti=transaction interval,事务间隔

4.1.2.5 using_pipos
4.1.2.6 using_stream_of_blocks

hls::stream_of_blocks<block_data_t>

4.2 Data_driven

4.1 handling_deadlock

hls_thread_local hls::stream<int, 100> s1;

4.2 mixed_control_and_data_driven

hls_thread_local hls::task t[4];

4.3 simple_data_driven
 

5. Modeling

5.1 Pointers

5.1.1 basic_arithmetic

函数无返回,但指针修改了数组中的数据,实际上可以被视为函数的输出

5.1.2 basic_pointers

static 变量通常会在硬件中实现为一个寄存器或存储器单元,其值会在多个调用之间保持不变

5.1.3 multiple_pointers

局部的静态变量,是靠编译器实现作用区域限制的

5.1.4 native_casts

5.1.5 stream_better

默认ap_hs

5.1.6 stream_good

可通过Tcl脚本命令实现ap_fifo,也可以通过编译指令#pragma HLS INTERFACE

5.1.7 using_double

双重指针,应尽量避免使用,因为双重指针会增加访问数据时的间接性,从而导致额外的逻辑开销

5.2 basic_loops_primer

pipline off,unroll

5.3 fixed_point_sqrt

使用了自定义的sqrt函数,建议还是优先使用<hls_math.h>

5.4 free_running_kernel_remerge_ii4to1

Iteration Interval,ap_ctrl_none

5.5 using_C++_templates

5.6 using_arbitrary_precision_arith

<ap_int.h>

5.7 using_arbitrary_precision_casting

5.8 using_fixed_point

5.9 using_float_and_double

5.10 using_vectors

hls::vector<T, N>,适用于 SIMD(Single Instruction Multiple Data)

5.11 variable_bound_loops 变量循环边界

变量循环边界问题:该变量为函数参数,在编译时未知,需要运行时传递。

Loop: for (x=0; x<width; x++) {out_accum += A[x];
}

6. Misc

6.1 initialization_and_reset

6.1.1 global_array_RAM

全局数组,是指在函数外部定义的数组,ap_int<10> A[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

6.1.2 static_array_RAM

static ap_int<10> A[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

6.1.3 static_array_ROM

BIND_STORAGE variable=A type=ROM_1P impl=BRAM;

6.1.4 static_array_of_struct_with_array_RAM

数组结构体;

6.1.5 static_struct_with_array_RAM

结构体

6.1.6 static_struct_with_array_RAM_Versal

6.2 malloc_removed

#include "malloc_removed.h"

6.3 rtl_as_blackbox

7. 学习规划

这个示例集含有丰富的内容,我将在未来的博客文章中,专门挑选其中的重要部分进行详细讨论,并会在这里附上相关链接。

这个目录也方便我快速检索到相关知识点。

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

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

相关文章

Liunx磁盘管理(上)

一.硬盘类型 机械硬盘&#xff08;HDD&#xff09; 机械硬盘&#xff08;HDD&#xff09;是一种存储设备&#xff0c;使用旋转磁盘和读/写磁头来存储和检索数据。以下是机械硬盘的基本结构&#xff1a; 盘片&#xff08;Platters&#xff09;&#xff1a;机械硬盘通常由多个盘…

element的el-table 解决表格多页选择数据时,数据被清空

问题&#xff1a;切换页码时&#xff0c;勾选的数据会被清空 重点看我圈出来的&#xff0c;直接复制&#xff0c;注意&#xff0c;我这里 return row.productId;一般大家的是 return row.id,根据接口定的唯一变量 :row-key"getRowKeys"​​​​​​​:reserve-sele…

基于STM32和阿里云的智能台灯(STM32+ESP8266+MQTT+阿里云+语音模块)

一、主要完成功能 1、冷光模式和暖光模式两种灯光 主要支持冷光和暖光模式两种&#xff0c;可以通过语音模块或手机app远程切换冷暖光 2、自动模式和手动模式 主要支持手动模式和自动两种模式&#xff08;app或语音助手切换&#xff09; (1)自动模式&#xff1a;根据环境光照…

通信原理(2)--随机过程

通信原理(2)–随机过程 3.1随机过程的基本概念 随机过程{x(t)}由一族时间函数 x i ( t ) x_i(t) xi​(t)&#xff0c;i1,2.3…组成&#xff0c;每一个时间函数 x i ( t ) x_i(t) xi​(t)称为随机过程{x(t)}的一个样本函数&#xff08;一个实现&#xff09; 每个样本函数在时间…

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers&#xff0c;对这种请求&#xff0c;会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包…

笔记:编写程序,分别采用面向对象和 pyplot 快捷函数的方式绘制正弦曲线 和余弦曲线。 提示:使用 sin()或 cos()函数生成正弦值或余弦值。

文章目录 前言一、面向对象和 pyplot 快捷函数的方式是什么&#xff1f;二、编写代码面向对象的方法&#xff1a;使用 pyplot 快捷函数的方法&#xff1a; 总结 前言 本文将探讨如何使用编程语言编写程序&#xff0c;通过两种不同的方法绘制正弦曲线和余弦曲线。我们将分别采用…

DSP开发实战教程--EPWM模块的影子寄存器详细讲解原理和代码实例

EPWM模块影子寄存器的原理 在TI&#xff08;Texas Instruments&#xff09;的DSP28335中&#xff0c;EPWM&#xff08;Enhanced Pulse Width Modulator&#xff09;模块提供了高精度、高灵活性的PWM信号生成功能。为了能在不影响当前PWM波形输出的情况下预装载新的PWM参数&…

cocos-lua资源管理

本文介绍cocos-lua项目的资源管理和工作流&#xff0c;适用人群包括初学者和有经验开发者&#xff0c;故读者可根据自己的需要有选择性的查阅自己需要的内容&#xff0c;下文以ccs代指Cocos Studio 一.简单案例解析 下文通过介绍一个简单demo&#xff0c;介绍合图和资源目录结…

[C++][算法基础]最大不相交区间数量(贪心 + 区间问题2)

给定 &#x1d441; 个闭区间 [&#x1d44e;&#x1d456;,&#x1d44f;&#x1d456;]&#xff0c;请你在数轴上选择若干区间&#xff0c;使得选中的区间之间互不相交&#xff08;包括端点&#xff09;。 输出可选取区间的最大数量。 输入格式 第一行包含整数 &#x1d4…

【算法基础实验】图论-UnionFind连通性检测之quick-union

Union-Find连通性检测之quick-union 理论基础 在图论和计算机科学中&#xff0c;Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合&#xff08;即连通分量&#xff09;的情况&#xff0c;并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fi…

PHP源码_最新在线工具箱网站系统源码

项目运行截图 源码贡献 https://githubs.xyz/boot?app41 部分数据库表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for toolbox_category -- ---------------------------- DROP TABLE IF EXISTS toolbox_category…

StarRocks x Paimon 构建极速实时湖仓分析架构实践

Paimon 介绍 Apache Paimon 是新一代的湖格式&#xff0c;可以使用 Flink 和 Spark 构建实时 Lakehouse 架构&#xff0c;以进行流式处理和批处理操作。Paimon 创新性地使用 LSM&#xff08;日志结构合并树&#xff09;结构&#xff0c;将实时流式更新引入 Lakehouse 架构中。 …

医学vr虚拟仿真综合实验教学平台为科研教学提供了坚实的基础

在兽医专业的广袤领域中&#xff0c;动物解剖学作为基石学科&#xff0c;为组织胚胎学、生理学、病理解剖学、外科手术学、临床诊断学等科研教学提供了坚实的基础。而如今&#xff0c;随着科技的飞速发展&#xff0c;我们迎来了一个全新的学习时代——3D数字动物解刨虚拟仿真实…

[iOS]使用CocoaPods发布公开库

1.检查库名是否已被占用 选择库名时&#xff0c;尽量选择具有描述性并且独特的名字&#xff0c;这不仅可以避免命名冲突&#xff0c;还可以帮助用户更好地理解库的用途和功能。 在实际创建和发布 CocoaPods 库之前&#xff0c;确实应该检查库名是否已经被占用&#xff0c;以避…

AutoCAD 2025 for mac/win:设计未来,触手可及

在数字化时代&#xff0c;设计不再局限于纸笔之间&#xff0c;而是跃然于屏幕之上&#xff0c;AutoCAD 2025正是这一变革的杰出代表。无论是Mac用户还是Windows用户&#xff0c;AutoCAD 2025都以其卓越的性能和出色的用户体验&#xff0c;成为了CAD设计绘图领域的佼佼者。 Aut…

Vuforia AR篇(三)— AR模型出场效果

目录 前言一、AR模型出场二、AR出场特效三、添加过渡效果四、效果 前言 在这个数字化日益增长的时代&#xff0c;增强现实&#xff08;AR&#xff09;技术正以前所未有的速度发展。AR模型&#xff0c;作为这一技术的核心组成部分&#xff0c;不仅改变了我们与数字世界的互动方…

【MATLAB源码-第201期】基于matlab的黏菌群优化算法(SMA)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 黏菌优化算法&#xff08;Slime Mould Algorithm, SMA&#xff09;是一种新颖的启发式优化方法&#xff0c;其灵感来源于自然界中的真菌——黏菌。这种算法模拟了黏菌在寻找食物时的行为和网络形成策略。在本文中&#xff0c…

Python | Leetcode Python题解之第58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; class Solution:def lengthOfLastWord(self, s: str) -> int:ls[]for i in s.split():ls.append(i)return len(ls[-1])

【华为】NAT的分类和实验配置

【华为】NAT的分类和实验配置 NAT产生的技术背景IP地址分类NAT技术原理NAT分类静态NAT动态NATNAPTEasy IP&#xff08;PAT&#xff09;NAT Server 配置拓扑静态NAT测试抓包 动态NAT测试抓包 NAPT测试抓包 PAT测试抓包 NAT Server检测抓包 PC1PC2服务器 NAT产生的技术背景 随着…

排序算法:插入、希尔、选择、推排、冒泡、快速、归并排序

排序算法 目录 前言 一、排序的概念 1.1排序的概念 1.2 常见的排序算法 二、常见排序算法的实现 2.1 插入排序 2.2 希尔排序 2.3 选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 hoare版本 2.6.2 前后指针版本 2.6.3 非递归版本 2.7 归并排序 归并排序 2.8 计数排序 三、…