diff --git a/src/finn/transformation/fpgadataflow/convert_to_hls_layers.py b/src/finn/transformation/fpgadataflow/convert_to_hls_layers.py index 315a7368ee4896832b649ad0444704ac53dd974a..44029f1f338641aa8a5a4927ca66e38c8c857f6c 100644 --- a/src/finn/transformation/fpgadataflow/convert_to_hls_layers.py +++ b/src/finn/transformation/fpgadataflow/convert_to_hls_layers.py @@ -36,6 +36,7 @@ from finn.transformation.infer_shapes import InferShapes from finn.transformation.infer_datatypes import InferDataTypes import finn.core.data_layout as DataLayout from finn.util.onnx import nchw_to_nhwc +import warnings class InferConvInpGen(Transformation): @@ -505,13 +506,26 @@ class InferChannelwiseLinearLayer(Transformation): for k in DataType.__members__: dt = DataType[k] - if dt in [DataType.BIPOLAR, DataType.TERNARY]: + if dt in [DataType.BIPOLAR, DataType.TERNARY, DataType.FLOAT32]: # not currently supported continue if (dt.min() <= vals).all() and (vals <= dt.max()).all(): return dt + warnings.warn( + """InferChannelwiseLinearLayer: Output values may not be + representable with supported data types. + Setting maximum width data type available. + This will lead to errors if there are no constrains on the input + """ + ) + + if (0 <= vals).all(): + return DataType.UINT32 + else: + return DataType.INT32 + def apply(self, model): graph = model.graph node_ind = 0