From 4d9af62b05420ea83ef63ed45186eed83358f000 Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <maltanar@gmail.com>
Date: Wed, 12 Aug 2020 01:09:33 +0200
Subject: [PATCH] [ZYNQ] build driver as part of ZynqBuild

---
 .../transformation/fpgadataflow/make_zynq_proj.py     |  2 ++
 tests/end2end/test_zynqbuild_end2end_cnv_w1a1.py      | 11 +----------
 tests/end2end/test_zynqbuild_end2end_tfc_w1a1.py      | 11 +----------
 tests/end2end/test_zynqbuild_end2end_tfc_w2a2.py      | 11 +----------
 tests/fpgadataflow/test_fpgadataflow_fifo.py          |  2 +-
 tests/fpgadataflow/test_fpgadataflow_ipstitch.py      |  5 -----
 6 files changed, 6 insertions(+), 36 deletions(-)

diff --git a/src/finn/transformation/fpgadataflow/make_zynq_proj.py b/src/finn/transformation/fpgadataflow/make_zynq_proj.py
index dfc076ba5..1558d7399 100644
--- a/src/finn/transformation/fpgadataflow/make_zynq_proj.py
+++ b/src/finn/transformation/fpgadataflow/make_zynq_proj.py
@@ -52,6 +52,7 @@ from finn.transformation.fpgadataflow.floorplan import Floorplan
 from finn.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames
 from finn.transformation.infer_data_layouts import InferDataLayouts
 from shutil import copy
+from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver
 
 from . import templates
 
@@ -280,6 +281,7 @@ class ZynqBuild(Transformation):
         model = model.transform(InferDataLayouts())
         # prepare at global level, then break up into kernels
         prep_transforms = [
+            MakePYNQDriver(platform="zynq-iodma"),
             InsertIODMA(64),
             InsertDWC(),
             Floorplan(),
diff --git a/tests/end2end/test_zynqbuild_end2end_cnv_w1a1.py b/tests/end2end/test_zynqbuild_end2end_cnv_w1a1.py
index 1a1b21afa..cefe4d038 100644
--- a/tests/end2end/test_zynqbuild_end2end_cnv_w1a1.py
+++ b/tests/end2end/test_zynqbuild_end2end_cnv_w1a1.py
@@ -44,7 +44,6 @@ from finn.transformation.fpgadataflow.create_dataflow_partition import (
     CreateDataflowPartition,
 )
 from finn.transformation.fpgadataflow.make_deployment import DeployToPYNQ
-from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver
 from finn.transformation.general import (
     RemoveUnusedTensors,
     RemoveStaticGraphInputs,
@@ -168,19 +167,11 @@ def test_end2end_zynqbuild_cnv_w1a1_fold():
     model.save(build_dir + "/end2end_zynqbuild_cnv_w1a1_folded.onnx")
 
 
-def test_end2end_zynqbuild_cnv_w1a1_make_driver():
-    model = load_test_checkpoint_or_skip(
-        build_dir + "/end2end_zynqbuild_cnv_w1a1_folded.onnx"
-    )
-    model = model.transform(MakePYNQDriver(platform="zynq-iodma"))
-    model.save(build_dir + "/end2end_zynqbuild_cnv_w1a1_pynq_driver.onnx")
-
-
 @pytest.mark.slow
 @pytest.mark.vivado
 def test_end2end_zynqbuild_cnv_w1a1_build():
     model = load_test_checkpoint_or_skip(
-        build_dir + "/end2end_zynqbuild_cnv_w1a1_pynq_driver.onnx"
+        build_dir + "/end2end_zynqbuild_cnv_w1a1_folded.onnx"
     )
     model = model.transform(ZynqBuild(test_pynq_board, target_clk_ns))
     model = model.transform(AnnotateResources("synth"))
diff --git a/tests/end2end/test_zynqbuild_end2end_tfc_w1a1.py b/tests/end2end/test_zynqbuild_end2end_tfc_w1a1.py
index 98ccc9318..f473b86bb 100644
--- a/tests/end2end/test_zynqbuild_end2end_tfc_w1a1.py
+++ b/tests/end2end/test_zynqbuild_end2end_tfc_w1a1.py
@@ -49,7 +49,6 @@ from finn.transformation.fpgadataflow.create_dataflow_partition import (
     CreateDataflowPartition,
 )
 from finn.transformation.fpgadataflow.make_deployment import DeployToPYNQ
-from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver
 from finn.transformation.general import (
     RemoveUnusedTensors,
     RemoveStaticGraphInputs,
@@ -152,19 +151,11 @@ def test_end2end_zynqbuild_tfc_w1a1_fold():
     model.save(build_dir + "/end2end_zynqbuild_tfc_w1a1_folded.onnx")
 
 
-def test_end2end_zynqbuild_tfc_w1a1_make_driver():
-    model = load_test_checkpoint_or_skip(
-        build_dir + "/end2end_zynqbuild_tfc_w1a1_folded.onnx"
-    )
-    model = model.transform(MakePYNQDriver(platform="zynq-iodma"))
-    model.save(build_dir + "/end2end_zynqbuild_tfc_w1a1_pynq_driver.onnx")
-
-
 @pytest.mark.slow
 @pytest.mark.vivado
 def test_end2end_zynqbuild_tfc_w1a1_build():
     model = load_test_checkpoint_or_skip(
-        build_dir + "/end2end_zynqbuild_tfc_w1a1_pynq_driver.onnx"
+        build_dir + "/end2end_zynqbuild_tfc_w1a1_folded.onnx"
     )
     model = model.transform(ZynqBuild(test_pynq_board, target_clk_ns))
     model = model.transform(AnnotateResources("synth"))
diff --git a/tests/end2end/test_zynqbuild_end2end_tfc_w2a2.py b/tests/end2end/test_zynqbuild_end2end_tfc_w2a2.py
index b8db8c1a4..7b2809085 100644
--- a/tests/end2end/test_zynqbuild_end2end_tfc_w2a2.py
+++ b/tests/end2end/test_zynqbuild_end2end_tfc_w2a2.py
@@ -45,7 +45,6 @@ from finn.transformation.fpgadataflow.create_dataflow_partition import (
     CreateDataflowPartition,
 )
 from finn.transformation.fpgadataflow.make_deployment import DeployToPYNQ
-from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver
 from finn.transformation.general import (
     RemoveUnusedTensors,
     RemoveStaticGraphInputs,
@@ -142,19 +141,11 @@ def test_end2end_zynqbuild_tfc_w2a2_fold():
     model.save(build_dir + "/end2end_zynqbuild_tfc_w2a2_folded.onnx")
 
 
-def test_end2end_zynqbuild_tfc_w2a2_make_driver():
-    model = load_test_checkpoint_or_skip(
-        build_dir + "/end2end_zynqbuild_tfc_w2a2_folded.onnx"
-    )
-    model = model.transform(MakePYNQDriver(platform="zynq-iodma"))
-    model.save(build_dir + "/end2end_zynqbuild_tfc_w2a2_pynq_driver.onnx")
-
-
 @pytest.mark.slow
 @pytest.mark.vivado
 def test_end2end_zynqbuild_tfc_w2a2_build():
     model = load_test_checkpoint_or_skip(
-        build_dir + "/end2end_zynqbuild_tfc_w2a2_pynq_driver.onnx"
+        build_dir + "/end2end_zynqbuild_tfc_w2a2_folded.onnx"
     )
     model = model.transform(ZynqBuild(test_pynq_board, target_clk_ns))
     model = model.transform(AnnotateResources("synth"))
diff --git a/tests/fpgadataflow/test_fpgadataflow_fifo.py b/tests/fpgadataflow/test_fpgadataflow_fifo.py
index 5de3c7d6f..a0881e2c9 100644
--- a/tests/fpgadataflow/test_fpgadataflow_fifo.py
+++ b/tests/fpgadataflow/test_fpgadataflow_fifo.py
@@ -107,7 +107,7 @@ def test_fpgadataflow_fifo_rtlsim(Shape, folded_shape, depth, finn_dtype):
         model = model.transform(CreateStitchedIP(test_fpga_part, target_clk_ns))
         model = model.transform(MakePYNQProject(test_pynq_board))
         model = model.transform(SynthPYNQProject())
-        model = model.transform(MakePYNQDriver(platform="zynq-iodma"))
+        model = model.transform(MakePYNQDriver(platform="zynq"))
         username = os.getenv("PYNQ_USERNAME", "xilinx")
         password = os.getenv("PYNQ_PASSWORD", "xilinx")
         port = os.getenv("PYNQ_PORT", 22)
diff --git a/tests/fpgadataflow/test_fpgadataflow_ipstitch.py b/tests/fpgadataflow/test_fpgadataflow_ipstitch.py
index 380e9313a..66b0ef921 100644
--- a/tests/fpgadataflow/test_fpgadataflow_ipstitch.py
+++ b/tests/fpgadataflow/test_fpgadataflow_ipstitch.py
@@ -459,11 +459,6 @@ def test_fpgadataflow_ipstitch_zynqbuild(board):
     idt = model.get_tensor_datatype(iname)
     ishape = model.get_tensor_shape(iname)
     x = gen_finn_dt_tensor(idt, ishape)
-    # driver
-    model = model.transform(MakePYNQDriver(platorm="zynq-iodma"))
-    driver_dir = model.get_metadata_prop("pynq_driver_dir")
-    assert driver_dir is not None
-    assert os.path.isdir(driver_dir)
     # bitfile using ZynqBuild
     model = model.transform(ZynqBuild(board, 10))
     model.save(ip_stitch_model_dir + "/test_fpgadataflow_ipstitch_customzynq.onnx")
-- 
GitLab