vivado hls的输入可以是c、c++或者system c,从而继承了这些语言本身就具有的数据类型,例如char、short int、int等整型或float、double等浮点数据类型。不难发现,对于整型,其表示的字长是以8为边界的,这实际上和真实的硬件模型不完全匹配。这一点也不难理解,例如hdl中会根据设计需求设定位宽,而这些位宽很多情形下并不是8-bit、16-bit或者32-bit。因此,hls引入了任意精度(arbitraryprecision)的数据类型(对于systemc,可查看table 1-7, ug902)。以c++为例说明。
整数
1
对于任意精度整型数据类型,可通过ap_int声明位宽为w的有符号整数,或通过ap_uint声明位宽为w的无符号整数。需要添加头文件ap_int.h。
定点数
2
对于任意精度的定点小数,可通过ap_fixed声明位宽为w,其中整数部分字长为i的有符号定点小数;或通过ap_ufixed声明位宽为w,其中整数部分字长为i的无符号定点小数。需要添加头文件ap_fixed.h。
浮点数
3
对于浮点数据类型,除了float和double之外,vivado hls还引入了半精度浮点数half,需要添加头文件hls_half.h。该浮点数据类型为16-bit。
技巧
多种数据类型给用户提供了更多的选择,用户可根据实际需求选择可最佳匹配于硬件的数据类型。一个小的技巧是,把数据类型通过typedef定义在用户的头文件中。此外,在仿真时可采用float或double类型,以防止数据溢出,尽快完成算法功能的验证;之后再将设定为整型,观察是否有溢出,完成c综合。
结论
任意精度的数据类型可以完美地匹配硬件需求,同时还继承了原有数据类型所允许的操作。例如,对于两个13-bit的有符号整数相乘,不必把其定义为int类型,而是直接定义为ap_int,且可直接使用乘法运算符。这样做的最大好处就是更准确地获取资源利用率信息。注意在使用任意精度数据类型时要添加相应的头文件。
光学无线网取代WiFi:用LED灯发射信号上网
您电池电量计的精度如何
人工智能的普及是否会影响我们就业
统计数据“解码”电动汽车热失控
我们现在是多网络共同发展阶段吗
一篇文章看懂HLS中的数据类型
PCB线路板抄板方法及步骤
4层板到12层板层叠设计案例
Transceiver IC Generates ±30V,
WT2605立体声蓝牙芯片概述及功能特点
充电桩知识科普 你真的了解充电桩吗?
产业布局蛰伏多年 微软AI洪荒之力或将爆发
PLC系统中屏蔽层单端接地和屏蔽层双端接地
坚硬超乎你的想象:LG gram笔记本暴力测试
5G技术支持下将全面提升VR/AR的体验
关于智能手机将步PC的介绍和应用
CA3140(IC1)用作电阻/电压变换器
100脚的STM32F103VE单片机通过FSMC接口读写DS12C887时钟芯片中的寄存器
独立后的荣耀能否最终赢下这一局?
中国通用航空业现处在初创期,未来发展空间巨大