diff --git a/src/finn/custom_op/fpgadataflow/convolutioninputgenerator.py b/src/finn/custom_op/fpgadataflow/convolutioninputgenerator.py
index 91460fdac4f072b0954da1152fa578cd3338fd80..4bf9bbf568842e4527093aa763a89e2aedcf2f76 100644
--- a/src/finn/custom_op/fpgadataflow/convolutioninputgenerator.py
+++ b/src/finn/custom_op/fpgadataflow/convolutioninputgenerator.py
@@ -36,6 +36,12 @@ class ConvolutionInputGenerator(HLSCustomOp):
     def verify_node(self):
         pass
 
+    def bram_estimation(self):
+        pass
+
+    def lut_estimation(self):
+        pass
+
     def get_input_datatype(self):
         return DataType[self.get_nodeattr("inputDataType")]
 
diff --git a/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py b/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py
index 8d3d063c7a35bb86c72f1fcc1886c1821dd10c6a..7bbd6e9b00e9e166eaa63dc5daac5cb4b33193b3 100644
--- a/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py
+++ b/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py
@@ -1,5 +1,5 @@
 import os
-
+import math
 import numpy as np
 
 from finn.backend.fpgadataflow.utils import numpy_to_hls_code
@@ -141,6 +141,27 @@ class StreamingFCLayer_Batch(HLSCustomOp):
 
         return info_messages
 
+    def bram_estimation(self):
+        P = self.get_nodeattr("PE")
+        Q = self.get_nodeattr("SIMD")
+        wdt = self.get_weight_datatype()
+        W = wdt.bitwidth()
+        D_in = self.get_instream_width()
+        D_out = self.get_outstream_width()
+        omega = (D_in * D_out) / (Q * P)
+        return P * (math.ceil(omega / 512)) * (math.ceil((Q * W) / 36))
+
+    def lut_estimation(self):
+        P = self.get_nodeattr("PE")
+        Q = self.get_nodeattr("SIMD")
+        wdt = self.get_weight_datatype()
+        W = wdt.bitwidth()
+        tdt = DataType.INT32
+        A = tdt.bitwidth()
+        c0 = 300
+        c1 = 1.1
+        return c0 + c1 * (P * Q) * (W * A)
+
     def get_input_datatype(self):
         return DataType[self.get_nodeattr("inputDataType")]