关于拷贝初始化和直接初始化的区别:https://blog.csdn.net/linda_ds/article/details/82807006#commentBox
需要注意的是copy initialization不允许隐式转换,必须直接由初始化器(先类型转换等)产生T类型。在初始化尽可能的每行只初始化一个变量。
ap_[u]fixed
定义单精度浮点类型的时要有后缀f。
隐式的数据类型转换包括Numeric promotion和Numeric conversion两种,promotion其实是一种安全的方式,把小类型的向大类型的数据转化(对于有符号数就是符号位的扩展,对于无符号数就是扩展0);conversion是将大类型向小类型转换,这种转换可能会导致数据的损失甚至结果的错误。
显式数据类型转换包括()和C++中采用的类似于调用函数的转换两种方式,我们的原则就是大数据不溢出,小数据不损失。
C++常用的两种符合数据类型:结构体和枚举类型
struct 和 enum这两种类型都可以在顶层作为接口出现,如果结构体出现在顶层函数中会被data pack directive封装,枚举类型出现在顶层函数中作为接口,它实质上是正数,Vivado HLS会自动推断数据位宽。
进行基本运算时要特别注意数据位宽的处理,总体原则就是大数不溢出,小数不损失。