diff --git a/src/finn/custom_op/fpgadataflow/convolutioninputgenerator1d.py b/src/finn/custom_op/fpgadataflow/convolutioninputgenerator1d.py index c4cf804126328b27fd56091d70f0b6e658b5b3c1..333f1bddcc83d16af63441727e16850bd6ecb8f0 100644 --- a/src/finn/custom_op/fpgadataflow/convolutioninputgenerator1d.py +++ b/src/finn/custom_op/fpgadataflow/convolutioninputgenerator1d.py @@ -288,20 +288,24 @@ class ConvolutionInputGenerator1D(HLSCustomOp): def uram_estimation(self): # NOTE: not tested for correctness - simd = self.get_nodeattr("SIMD") - ifm_ch = self.get_nodeattr("IFMChannels") - ifm_dim = np.prod(self.get_nodeattr("IFMDim")) - k = np.prod(self.get_nodeattr("ConvKernelDim")) - stride = np.prod(self.get_nodeattr("Stride")) + ( + ifm_ch, + ifm_dim, + ofm_dim, + k, + stride, + dilation, + ) = self.get_1d_conv_attrs_normalized() + ifm_dim_y, ifm_dim_x = ifm_dim + k_y, k_x = k + stride_y, stride_x = stride ram_style = self.get_nodeattr("ram_style") + simd = self.get_nodeattr("SIMD") if ram_style == "ultra": - return int( - (k + stride) - * ( - math.ceil(simd * self.get_input_datatype().bitwidth() / 64) - * math.ceil(ifm_dim * ifm_ch / simd / 4096) - ) - ) + block_mul = 2 + width_mul = math.ceil(simd * self.get_input_datatype().bitwidth() / 64) + depth_mul = math.ceil(stride_x * ifm_dim_x * (ifm_ch // simd) / 4096) + return block_mul * width_mul * depth_mul else: return 0