南京观海微电子---Vitis HLS中数据类型定义——Vitis HLS教程

简介: Vitis HLS支持传统C数据类型,但不支持char16_t和char32_t。为优化FPGA资源与性能,HLS引入任意精度类型ap_[u]int<W>和ap_[u]fixed<W,I,Q,O>,可自定义位宽与量化、溢出模式,提升运算效率并减少资源消耗。

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>”来定义一个W位宽的变量,其中[u]表示为无符号变量。

例如:ap_int<6> data;定义了一个6bit位宽的int类型变量。

注:ap为ArbitraryPrecision的缩写。

例子:对于一个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。

相关文章
|
1月前
|
传感器 芯片 异构计算
南京观海微电子----峰值检测电路汇总
峰值检测电路用于提取并保持输入信号的峰值,广泛应用于AGC、传感器信号处理等领域。本文介绍其基本原理、常见结构(如二极管电容型、无二极管型、集成型)及改进方法,分析误差来源与优化措施,提升检测精度与响应速度。
|
1月前
|
算法 数据处理 C语言
南京观海微电子---Vitis HLS设计流程介绍——Vitis HLS教程
本文对比了传统FPGA RTL设计与基于C/C++的高级设计流程,重点介绍Vitis HLS如何通过高级综合将C代码转化为RTL,并支持IP核生成、协同仿真及多方案优化,提升设计效率与抽象层级。
南京观海微电子---Vitis HLS设计流程介绍——Vitis HLS教程
|
1月前
|
算法 调度 C语言
南京观海微电子---Vitis HLS的工作机制——Vitis HLS教程
Vitis HLS是一款高级综合工具,可将C/C++代码转换为FPGA可用的HDL硬件描述语言,支持算法在C层面开发与验证,提升开发效率。其工作流程包括调度、控制逻辑提取和资源绑定,实现从代码到硬件的高效映射。
南京观海微电子---Vitis HLS的工作机制——Vitis HLS教程
|
1月前
|
算法 C++ 异构计算
南京观海微电子---Vitis HLS设计流程(实例演示)——Vitis HLS教程
本课时通过一个具体实例,演示Vitis HLS的设计流程,包括工程创建、仿真、综合与协同仿真,并介绍如何通过不同Solution对比优化结果,帮助理解HLS从C++代码到RTL的转换过程及关键注意事项。
南京观海微电子---Vitis HLS设计流程(实例演示)——Vitis HLS教程
|
5天前
|
存储 弹性计算 安全
从0到1看懂:阿里云服务器ECS是什么?详解、价格、优势及使用问题解答FAQ
阿里云ECS是基于飞天架构的弹性计算服务,提供高稳定、高性能、安全可靠的云服务器,支持多种计费模式与丰富规格族,适配企业应用、互联网、AI等上百种场景,助力用户实现算力随需所用、成本最优。
|
19天前
|
存储 弹性计算 固态存储
阿里云服务器计算型、通用型、内存型等实例规格适用场景与选型指导
阿里云服务器实例规格从类型上来说有通用型(g系列)、计算型(c系列)、内存型(r系列)、通用算力型(U实例)、大数据型(d系列)、本地SSD型(i系列)、高主频型(hf系列)等十几种不同类型的实例规格。本文为大家整理汇总了计算型、通用型、内存型等实例规格的适用场景,以及云服务器ECS实例规格的选型指导,以供参考和选择。
|
1月前
|
缓存 前端开发 芯片
南京观海微电子---AXI总线技术简介——ZYNQ PS和PL的互联技术
AXI是Xilinx ZYNQ系列中实现ARM与FPGA高速通信的核心协议,支持Lite、4和Stream三种总线,分别适用于控制、批量传输和数据流场景。通过AXI Interconnect实现多设备互联,结合DMA等IP核,可高效完成数据交互,广泛应用于嵌入式系统开发。
南京观海微电子---AXI总线技术简介——ZYNQ PS和PL的互联技术
|
1月前
|
存储 芯片 异构计算
南京观海微电子---MIG IP核的使用——DDR接口专栏(二)
本文介绍Xilinx FPGA中MIG IP核的使用方法,涵盖DDR3颗粒选型、FPGA匹配、MIG参数配置及管脚分配等关键步骤,帮助用户实现对片外DDR存储器的高效读写操作。
南京观海微电子---MIG IP核的使用——DDR接口专栏(二)
|
11月前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
4天前
|
存储 人工智能 弹性计算
2026年阿里云服务器租用费用价格表更新_一年报价_1个月费用表
阿里云服务器主要分为轻量应用、ECS、GPU三大类,分别适配轻量场景、全场景专业算力及高性能计算需求。租用费用核心分为月付、年付两种模式,部分机型支持短期按量付费,2026年普惠优惠机型价格稳定,同时明确了不同计费模式的报价标准、附加费用及使用规则。以下结合最新信息,详细拆解各品类服务器的月付、年付价格及相关细则,方便用户根据使用周期规划成本。
125 5