HLS 基础 (三 处理任意精度的数据类型)

C基本数据类型

image-20220508164438478

硬件角度看数据类型

C语言数据类型

均是以8bit为边界,即位宽分别为:8、16、32、64 bit;

对硬件而言,C语言的位宽相对来说比较死板。

例如:

​ 两个18*18bit数据位宽的乘法器,在C语言中都要被声明为32位的int;

​ 得到的输出结果又必须声明位64位的longlong类型;

​ 按照这种方式如果实在7-series系列FPGA中,需要消耗4个DSP48E1,浪费资源。

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

image-20220508165326463

(1024bits)表示可设置的数据位宽范围为1-1024;

fixed表示定点数。

引入任意进度的数据类型后带来的好处

image-20220508170326092

​ 输入数据类型使用ap_int<18>,输出数据类型使用:ap_int<36>,图中有两种solution的对比,一个是s1_native,采用传统的C语言的数据类型,另一个是s2_ap采用任意精度的数据类型。

​ 由上图中可以得出,采用任意精度的数据类型,可以运行到更高的时钟频率,获得更好的数据吞吐率,资源消耗的也少。

​ 一般由C/C++所支持的数据类型的运算,也都可以被ap_[u]intap_[u]fixed类型所支持。

​ 因此使用任意精度的数据类型可以获得相同的精度,使用更少的资源获得更快的速度。

image-20220508170533827

使用任意精度的数据类型

tips:通常定义数据类型在头文件中;

image-20220508170856621

使用sizeof

sizeof函数返回数据类型或变量所占用的字节大小;也反映了其数据类型所占用的位宽;

同样char_16_t和char_32_t在 Vivado HLS中是不支持的;

image-20220508171151046

image-20220508171406252

可以使Visual Studio支持任意精度的数据类型

方法如下:

image-20220508171604591

Summary

image-20220508171700081

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信