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

news2024/11/20 8:28:40

目录

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

2.3 Register

2.3.1 using_axi_lite

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

INTERFACE m_axi port=a depth=50

2.3 Register

2.3.1 using_axi_lite

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 offunroll

5.3 fixed_point_sqrt

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

5.4 free_running_kernel_remerge_ii4to1

Iteration Intervalap_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.coloradmin.cn/o/1624280.html

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

相关文章

类与对象(二)

类的六个默认构造函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生…

2.6设计模式——Flyweight 享元模式(结构型)

意图 运用共享技术有效地支持大量细粒度的对象。 结构 其中 Flyweight描述一个接口&#xff0c;通过这个接口Flyweight可以接受并作用于外部状态。ConcreteFlyweight实现Flyweight接口&#xff0c;并作为内部状态&#xff08;如果有&#xff09;增加存储空间。ConcreteFlywe…

6547网新增信息素养大赛真题及白名单考级真题

打扰大家了&#xff0c;汇报一下最近的更新动态&#xff0c;如果大家有急切需要的白名单真题及试卷留言&#xff0c;我们会优先更新&#xff01; 6547网文库&#xff08;www.6547.cn/wenku&#xff09;&#xff1a;新增信息素养大赛图形化编程真题及Python真题&#xff0c;2024…

STM32单片机C语言模块化编程实战:LED控制详解与示例

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 之前介绍了很多关于点灯的方法&#xff0c;比如…

不要小看使用说明书,它才是提高成交率的秘诀

在产品推广和销售环节中&#xff0c;许多企业可能忽略了一个非常重要但常被低估的环节——使用说明书的作用。使用说明书&#xff0c;这本附随每件产品的“小书”&#xff0c;往往是用户了解和使用产品的第一步。事实上&#xff0c;一个清晰、详尽、易懂的使用说明书能够显著提…

Blueprints - 鼠标光标判断相关节点

一些以前的学习笔记归档&#xff1b; 俯视角场景中要用鼠标光标判断是否点中物体&#xff0c;或依靠光标引发各种事件&#xff1b; 这些逻辑一般编写在Controller中&#xff0c;Controller类本身就带有相关判断节点&#xff1a; 其中Get Hit Result Under Cursor by Channel是…

OpenFeign微服务调用组件!!!

1.Feign是什么 GitHub - OpenFeign/feign: Feign makes writing java http clients easierFeign makes writing java http clients easier. Contribute to OpenFeign/feign development by creating an account on GitHub.https://github.com/OpenFeign/feignFeign是Netflix开…

第十讲 操作符详解

第十讲 操作符详解 1 操作符的分类 算术操作符&#xff1a; 、- 、* 、/ 、%移位操作符: << >>位操作符: & | ^赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^单⽬操作符&#xff1a; &#xff01;、、–、&、*、、-、~ 、…

JavaScript:将input标签中的内容打印到控制台

使用浏览器进行开发时&#xff0c;按F12可以查看网页信息。 目标&#xff1a;实现将input标签中的内容&#xff0c;打印到控制台&#xff08;console&#xff09; HTML页面的关键代码实现&#xff1a; 登录功能&#xff1a; HTML代码&#xff1a; <div class"form-…

个人博客系统的设计与实现

https://download.csdn.net/download/liuhaikang/89222885http://点击下载源码和论文 本 科 毕 业 设 计&#xff08;论文&#xff09; 题 目&#xff1a;个人博客系统的设计与实现 专题题目&#xff1a; 本 科 毕 业 设 计&#xff08;论文&#xff09;任 务 书 题 …

ABTest如何计算最小样本量-工具篇

如果是比例类指标&#xff0c;有一个可以快速计算最小样本量的工具&#xff1a; https://www.evanmiller.org/ab-testing/sample-size.html 计算样本量有4个要输入的参数&#xff1a;①一类错误概率&#xff0c;②二类错误概率 &#xff08;一般是取固定取值&#xff09;&…

设计模式-01 设计模式简介之分类

设计模式-01 设计模式简介之分类 1.分类概述 今天梳理下设计模式的分类学说。按照GoF书籍 《Design Patterns - Elements of Reusable Object-Oriented Software》&#xff08;中文译名&#xff1a;《设计模式 - 可复用的面向对象软件元素》&#xff09; 中所提到的&#xff0c…

牛客NC209 最短无序连续子数组【中等 数组,双指针 C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/d17f4abd1d114617b51e951027be312e 思路 解题思路 1、方法1&#xff0c;排序对比&#xff1a;将数组按升序排序&#xff0c;然后与原数组对照&#xff0c;从哪里开始变化到哪里结束变化的数组就是答案。 2、 方…

初识 Express

目录 1. Express 简介 1.1. 什么是 Express 1.1.1. 概念 1.1.2. 通俗理解 1.1.3. Express 的本质 1.2. 进一步理解 Express 1.2.1. 问题引入1——不使用 Express 能否创建 Web 服务器&#xff1f; 1.2.2. 问题引入2——有了 http 内置模块&#xff0c;为什么还要用 Exp…

【算法刷题 | 贪心算法03】4.25(最大子数组和、买卖股票的最佳时机|| )

文章目录 4.最大子数组和4.1题目4.2解法一&#xff1a;暴力4.2.1暴力思路4.2.2代码实现 4.3解法二&#xff1a;贪心4.3.1贪心思路4.3.2代码实现 5.买卖股票的最佳时机||5.1题目5.2解法&#xff1a;贪心5.2.1贪心思路5.2.2代码实现 4.最大子数组和 4.1题目 给你一个整数数组 n…

【JavaScript】内置对象 ③ ( Math 内置对象 | Math 内置对象简介 | Math 内置对象的使用 )

文章目录 一、Math 内置对象1、Math 内置对象简介2、Math 内置对象的使用 二、代码示例1、代码示例 - Math 内置对象的使用2、代码示例 - 封装 Math 内置对象 一、Math 内置对象 1、Math 内置对象简介 JavaScript 中的 Math 内置对象 是一个 全局对象 , 该对象 提供了 常用的 数…

openEuler-22.03下载、安装

一、下载 下载地址&#xff1a;openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本&#xff1a;openEuler-22.03-LTS-x86_64-dvd.iso 二、安装 配置完后开启虚拟机 设置完后&#xff0c;重启虚拟机 设置桥接模式的网络 cd /etc/sysconfig/network-scripts/ vi if…

Apple公司面试题之Apple-Orange

1. 引言 你幻想过在Apple公司工作吗&#xff1f; 如果心动过&#xff0c;那这个逻辑推理面试题就是给你准备的&#xff01;这是一道有趣的面试题&#xff0c;如下所示&#xff1a; 看到这里的同学&#xff0c;我建议你暂停文章&#xff0c;拿起笔和纸&#xff0c;试一试。准…

图像在神经网络中的预处理与后处理的原理和作用(最详细版本)

1. 问题引出及内容介绍 相信大家在学习与图像任务相关的神经网络时&#xff0c;经常会见到这样一个预处理方式。 self.to_tensor_norm transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) 具体原理及作用稍后解释&…

用html写一个旋转菜单

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>旋转菜单</title><link relstylesheet href"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"&…