diff --git a/src/finn/qnn-data/templates/driver/driver_base.py b/src/finn/qnn-data/templates/driver/driver_base.py
index 439a1304a9eeb7468c84f4a8cdafffddc521c45a..01f332b3b353ff89c1b70b2cd7e749374fd392e1 100644
--- a/src/finn/qnn-data/templates/driver/driver_base.py
+++ b/src/finn/qnn-data/templates/driver/driver_base.py
@@ -156,6 +156,12 @@ class FINNExampleOverlay(Overlay):
 
                 self.external_weights +=[(iwdma,weight_buf)]
 
+        if "number_of_external_weights" in self._io_shape_dict:
+            hw_ext_weights = self._io_shape_dict["number_of_external_weights"]
+            assert len(self.external_weights) == hw_ext_weights, (
+                "Number of hardware external weights and number of external " +
+                "weight tensors available do not match. \n"+
+                "Is runtime_weight_dir pointing to the correct folder?")
 
 
     def load_runtime_weights(self, flush_accel=True, verify=True):
diff --git a/src/finn/transformation/fpgadataflow/make_pynq_driver.py b/src/finn/transformation/fpgadataflow/make_pynq_driver.py
index 092c43c8726fc748940693b7119f4d79d5ee1d94..de5e180f59b1d731e71e523b342ccd8c0282c464 100644
--- a/src/finn/transformation/fpgadataflow/make_pynq_driver.py
+++ b/src/finn/transformation/fpgadataflow/make_pynq_driver.py
@@ -123,6 +123,7 @@ class MakePYNQDriver(Transformation):
         
         os.makedirs(weights_dir)
         idma_idx = 0
+        ext_weight_dma_cnt = 0
             
         for node in model.graph.node:
             assert node.op_type == "StreamingDataflowPartition", (
@@ -134,6 +135,7 @@ class MakePYNQDriver(Transformation):
             if producer is None : # input dma?
                 idma_name = "idma" + str(idma_idx)
                 if init_tensor is not None: # input weights dma?
+                    ext_weight_dma_cnt += 1
                     w_dtype = model.get_tensor_datatype(node.input[0])
                     init_external_tensor = to_external_tensor(init_tensor,w_dtype)
                     np.save(weights_dir+"/"+ idma_name+".npy",init_external_tensor)
@@ -169,7 +171,8 @@ class MakePYNQDriver(Transformation):
         driver = driver.replace("$OUTPUT_SHAPE_NORMAL$", mss(o_tensor_shape_normal))
         driver = driver.replace("$OUTPUT_SHAPE_FOLDED$", mss(o_tensor_shape_folded))
         driver = driver.replace("$OUTPUT_SHAPE_PACKED$", mss(o_tensor_shape_packed))
-        driver = driver.replace("$INPUT_DMA_NAME$", "'%s'" %net_input_name)
+        driver = driver.replace("$INPUT_DMA_NAME$", "'%s'" % net_input_name)
+        driver = driver.replace("$EXT_WEIGHT_NUM$", str(ext_weight_dma_cnt) )
 
         with open(driver_py, "w") as f:
             f.write(driver)
diff --git a/src/finn/transformation/fpgadataflow/template_driver.py b/src/finn/transformation/fpgadataflow/template_driver.py
index 6be3182471f003d92974d39f9edc28d7075af8bb..5265835dd2530a5c93ceefbef629a43d6f33de52 100644
--- a/src/finn/transformation/fpgadataflow/template_driver.py
+++ b/src/finn/transformation/fpgadataflow/template_driver.py
@@ -78,7 +78,8 @@ io_shape_dict = {
     "oshape_folded" : $OUTPUT_SHAPE_FOLDED$,
     "ishape_packed" : $INPUT_SHAPE_PACKED$,
     "oshape_packed" : $OUTPUT_SHAPE_PACKED$,
-    "input_dma_name" : $INPUT_DMA_NAME$
+    "input_dma_name" : $INPUT_DMA_NAME$,
+    "number_of_external_weights": $EXT_WEIGHT_NUM$
 }
 
 if __name__ == "__main__":