一、结论
各种数据类型混合运算,高层次综合工具无能为力了,陷于蒙圈状态。
所以,这个是特别注意
二、案例
ap_uint<16> current_dst_x = dst_x + k;
float src_x_f = (current_dst_x + 0.5) * scale_x - 0.5;
上述数据类型混合运算是存在问题的!!!
三、分析问题
float src_y_f = (dst_y + 0.5) * scale_y - 0.5;
其中:
dst_y 是 ap_uint<16>(整型)
0.5 是 double 字面量,注意是double
scale_y 是 scale_t,而 scale_t 定义为 ap_ufixed<32, 16, AP_RND>
五、如何解决?
typedef ap_ufixed<32, 16> scale_t;
scale_t src_y_f = (scale_t(dst_y) + scale_t(0.5)) * scale_y - scale_t(0.5);
ap_ufixed<32, 16> src_y = src_y_f;
如果只有float和ap_fixed,他们之间是可以直接赋值的,这个会强转!
但是上述代码中各种数据类型,造成工具完全没有办法推断!