HLS开发学习-06- 数据类型的处理-- HLS 中的复合数据类型

简介: HLS开发学习-06- 数据类型的处理-- HLS 中的复合数据类型

写在前面


本文是本系列专题的第六篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了vivado HLS数据类型的处理,结构体和枚举类型的处理。

结构体


结构体当struct被用作顶级函数的参数时,

标量成员被实现为标准标量端口

默认情况下,数组被实现为内存端口。

工程中建议-在头文件中定义结构体。

结构上的元素可以通过数据打包优化打包到单个向量中

  • Byte_pad
  • field_level
  • struct_level

image.png

结构体示例


简单说明下这个例子,有过C基础的人都大致了解这个的操作,这里说一下结构体的大小:A占用1字节,B是位宽为4的长度为4的数组,占用4个字节所以一个结构体一共占用了5个字节。具体功能很简单这里就不细说了。

image.png

Data pack mode


数据打包的方式,这里我们在directive中可以进行配置,打包的模式。

image.png

field_level


field_level下的打包方式是:首先对每位数据都进行在标准字节长度下进行打包,这里的A位宽为4,但是一个字节位宽为8,所以A需要拓展为8位,如果A位宽为13,那么则需要打包在两个字节下,也即是打包的数据位宽为16。

image.png

struct_level


struct_level下的打包方式是:先打包结构,然后在标准字节长度下进行打包。和field_level相比,前者为所有数据都为8的倍数,后者则没有限制数据位宽,可以任意位宽,但是在整体打包后,需要对打包后的数据长度进行限制,化为整字节的长度。

image.png

打包方式对比


教程提及,两种的打包方式效果相似,暂时不作为区分

数据包可以减少延迟和初始间隔,即提高吞吐量

下面是刚刚的那个example的资源报表,经过了数据打包的操作,for循环展开,并行化处理,所以减少了延迟,提高了吞吐量。

image.png

这里老师提到了对于仿真的设置,可以创建虚拟总线(这里我暂时没接触到,暂时不深究)

image.png

枚举类型


枚举类型(也称为枚举)是一种数据类型,其中每个可能的值都定义为符号常量(称为枚举器)

  • 枚举是通过enum关键字声明的
  • 每个枚举数将根据其在枚举列表中的位置自动分配一个整数值
  • 默认情况下,第一个枚举器被分配整数值0,每个后续枚举器都有一个比前一个枚举器大1的值

image.png

枚举示例


根据刚刚介绍的枚举的处理,结合这里的例子,我们可以看出,在我们的函数调用的时候可以在case的索引值,相比原先的数字,我们可以更加直观的看出来每一个case的条件下执行的是具体哪种操作,我们可以利用枚举给每一步的操作命名。

image.png

Vivado HLS将自动推断模式的数据宽度,尽管默认情况下它是int该值与头文件中枚举类型定义的值一致,从仿真看出,工具和描述一致。

image.png

小结


Vivado HLS可以同时支持struct和enum结构和枚举

都可以在顶层函数接口上

如果结构在顶层函数接口,它可以通过数据包指令打包

如果顶级函数接口上的枚举,它实际上是一个整数,Vivado HLS将自动推断出数据宽度。

简单来说,HLS下进行结构体的调用时候,我们可以进行data pack 从而提高程序的效率,而引用枚举,目前我认为的实用操作就是在case下指示每一步操作,提高我们程序的可读性。

image.png

目录
相关文章
|
存储 编译器 程序员
C++基础篇之什么是数据类型
C++基础篇之什么是数据类型
|
2月前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
95 1
|
4月前
|
存储 Linux C语言
【C++基础】数据类型详解
这篇文章详细介绍了C++中各种基本数据类型,包括整型、浮点型、字符型、字符串型和布尔型,以及它们的使用方式和范围。
39 4
|
C#
57【C#基础】C#数据类型总结
【C#基础】C#数据类型总结
72 0
C#基础Ⅲ-数据类型
C#基础Ⅲ-数据类型
关于如何转换视频格式的解决方案
关于如何转换视频格式的解决方案
123 0
|
存储 安全 Java
【C#基础】C# 数据类型总结
编程语言 C# 数据类型的介绍 。
111 0
【C#基础】C# 数据类型总结
HLS开发学习-05- 数据类型的处理--数据类型转换
HLS开发学习-05- 数据类型的处理--数据类型转换
308 0
HLS开发学习-05- 数据类型的处理--数据类型转换
|
C语言 C++ 异构计算
HLS开发学习-04- 数据类型的处理--任意精度数据类型
HLS开发学习-04- 数据类型的处理--任意精度数据类型
198 0
HLS开发学习-04- 数据类型的处理--任意精度数据类型
|
C++
HLS实践 - 04 - 任意精度
HLS实践 - 04 - 任意精度
179 0
HLS实践 - 04 - 任意精度