课时4:Vitis HLS中数据类型定义——Vitis HLS教程

4 篇文章 28 订阅


1. 传统C语言支持的数据类型

在这里插入图片描述
其中要说明的是,Vitis HLS不支持“char16_t”以及“char32_t”这两种数据类型。

2. HLS引入了任意精度的数据类型

2. 1. 为何要使用任意精度的数据类型

C语言的原生数据类型都是基于8bit为边界的(比如8、16、32、64bits)。但FPGA开发人员在RTL代码开发中经常需要用自定义位宽的数据类型,如果强制用8bit为边界的数据类型,可能会增加资源的开销和降低运算的速度。

例如实现一个18bit*18bit的乘法器,如果采用以8bit为边界的数据类型,则输入数据的长度都需要扩展定义为32bit。乘法器的输出结果需要用64bit数据来表示。这种运算对于Xilinx 7系列的FPGA来说,需要消耗4个DSP48E1单元。

2. 2. 任意精度的数据类型定义

在HLS中,我们可以采用以下方式来定义任意精度的数据类型:
在这里插入图片描述

如在C++中,可以采用“ap_[u]int”来定义一个W位宽的变量,其中[u]表示为无符号变量。
例如:ap_int<6> data;定义了一个6bit位宽的int类型变量。
注:ap为Arbitrary Precision的缩写。

例子:对于一个18bit*18bit的乘法器,输入数据采用ap_int<18>,输出数据采用ap_int<36>。下图展示了采用传统C语言的数据类型方式(s1_native)和任意精度数据类型方式(s2_ap)的HLS编译结果。
在这里插入图片描述

图中结果可以明显看出,采用任意精度的解决方案(s2_ap)生成的RTL比C语言默认的数据类型解决方案(s1_native)生成的RTL时钟可以运行在更高的频率上、系统周期延迟也显著的降低、资源使用总数也显著的降低。

因此,采用任意精度数据类型,可以在获得相同精度的运算条件下,运算速度更快且使用更少的资源。

2. 3. 任意精度类型数据的初始化

例,对一个6bit位宽的int变量进行初始化,第一种方式为“copy intialiation”:
ap_int<6> a_6bit_var_c = -22
第二种方式为“direct initialization”:
ap_int<6> a_6bit_var_c(-22)

赋值的时候,指定数据格式方式如下:
ap_int<6> a_6bit_var_c(“0b101010”, 2);(二进制)
ap_int<6> a_6bit_var_c(“0x2A”, 16);(十六进制)

也可以将前缀“0b”、“0x”省略掉,如下:
ap_int<6> a_6bit_var_c(“101010”, 2);(二进制)
ap_int<6> a_6bit_var_c(“2A”, 16);(十六进制)

2. 4. ap_[u]fixed<W, I, Q, O>数据类型的介绍

ap_[u]fixed<W, I, Q, O>类型数据,尖括号中包含了4个参数。其中,W参数表示为数据的总位宽;I表示为数据整数部分的位宽,显然小数部分的位宽为W-I;Q为低位部分的量化模式;O为溢出模式,针对高位部分。
在这里插入图片描述

例如,变量定义和初始化如下
ap_[u]fixed<3, 2> var1 = 1.25;
由于1.25对应的二进制形式为0101(蓝色为整数部分,绿色为小数部分),但ap_[u]fixed<3, 2>的定义相当于取了1.25的2bit整数部分,1bit的小数部分,即最终数据为010,即代表数据1。

如果定义和初始化改为如下:
ap_[u]fixed<3, 2, AP_RND> var2 = 1.25,Q参数为AP_RND,即低位采用四舍五入的方式,最终var2的二进制为011,代表数据为1.5。
在这里插入图片描述

3. 小结

任意精度类型的数据在不同类型之间可以进行显示或隐式转换,本文章就不一一介绍了,详细可以查看高亚军老师的HLS教学视频。
链接如下:https://www.bilibili.com/video/BV1bt41187RW?p=6


参考文献:

[1]《Vitis High-Level Synthesis User Guide》. UG1399. Xilinx
[2] “跟Xilinx SAE学HLS系列视频讲座-高亚军 ”https://www.bilibili.com/video/av41246874

如果大家对我们的文章感兴趣,可以关注我们的公众号:“FpgaHome”,实时关注我们的更新动态。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值