diff --git a/notebooks/end2end_example/cnv_end2end_example.ipynb b/notebooks/end2end_example/cnv_end2end_example.ipynb index ce8c9decf4aaa6b7be2e556b6053abf380d0d373..74efa67d16616f64b21d84a8ef328ceaf2f3ce09 100644 --- a/notebooks/end2end_example/cnv_end2end_example.ipynb +++ b/notebooks/end2end_example/cnv_end2end_example.ipynb @@ -574,7 +574,7 @@ "target_dir = os.getenv(\"PYNQ_TARGET_DIR\", \"/home/xilinx/finn\")\n", "\n", "model = ModelWrapper(build_dir + \"/end2end_cnv_w1a1_synth.onnx\")\n", - "model = model.transform(MakePYNQDriver())\n", + "model = model.transform(MakePYNQDriver(platform="zynq"))\n", "model = model.transform(DeployToPYNQ(ip, port, username, password, target_dir))\n", "model.save(build_dir + \"/end2end_cnv_w1a1_pynq_deploy.onnx\")" ] diff --git a/notebooks/end2end_example/tfc_end2end_example.ipynb b/notebooks/end2end_example/tfc_end2end_example.ipynb index c84efc964b1f57b7ed385521fc5214fdc2396590..fd272d7bf1138981f9651e4c2551fa040af17c19 100644 --- a/notebooks/end2end_example/tfc_end2end_example.ipynb +++ b/notebooks/end2end_example/tfc_end2end_example.ipynb @@ -1422,7 +1422,7 @@ "source": [ "from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver\n", "model = ModelWrapper(build_dir + \"/tfc_w1_a1_post_synthesis.onnx\")\n", - "model = model.transform(MakePYNQDriver())" + "model = model.transform(MakePYNQDriver(platform="zynq"))" ] }, { diff --git a/src/finn/transformation/fpgadataflow/make_pynq_driver.py b/src/finn/transformation/fpgadataflow/make_pynq_driver.py index a7bf9e6e6279923764009a00e2f805be1b1fa9c0..fc326b4a25a9784f3919b4246ec2b8f54fb881f4 100644 --- a/src/finn/transformation/fpgadataflow/make_pynq_driver.py +++ b/src/finn/transformation/fpgadataflow/make_pynq_driver.py @@ -41,6 +41,8 @@ class MakePYNQDriver(Transformation): accelerator, including data packing/unpacking. The MakePYNQProject transformation must have been already applied. + platform: one of ["zynq", "zynq-iodma", "alveo"] + Outcome if successful: sets the pynq_driver_dir attribute in the ONNX ModelProto's metadata_props field, with the created driver dir as the value. diff --git a/src/finn/transformation/fpgadataflow/vitis_build.py b/src/finn/transformation/fpgadataflow/vitis_build.py index 0fb85f25e4f8d652a87f1e832c6b41fd67a7406e..2df58c537250c102ee85a685fc32904ee879e38f 100644 --- a/src/finn/transformation/fpgadataflow/vitis_build.py +++ b/src/finn/transformation/fpgadataflow/vitis_build.py @@ -246,7 +246,8 @@ class VitisLink(Transformation): f.write("cd {}\n".format(link_dir)) f.write( "v++ -t hw --platform %s --link %s" - " --kernel_frequency %d --config config.txt --optimize 2 --save-temps -R2\n" + " --kernel_frequency %d --config config.txt --optimize 2" + " --save-temps -R2\n" % (self.platform, " ".join(object_files), self.f_mhz) ) f.write("cd {}\n".format(working_dir)) @@ -277,7 +278,7 @@ class VitisBuild(Transformation): model = model.transform(InferDataLayouts()) # prepare at global level, then break up into kernels prep_transforms = [ - MakePYNQDriver(), + MakePYNQDriver(platform="alveo"), InsertIODMA(512), InsertDWC(), Floorplan(), diff --git a/tests/end2end/test_end2end_cnv_w1a1.py b/tests/end2end/test_end2end_cnv_w1a1.py index a2cfcd3a864c12788c2ac73271b5782ddfa336c1..ebca224389550929cebd542cf4201cf62481a169 100644 --- a/tests/end2end/test_end2end_cnv_w1a1.py +++ b/tests/end2end/test_end2end_cnv_w1a1.py @@ -322,7 +322,7 @@ def test_end2end_cnv_w1a1_synth_pynq_project(): def test_end2end_cnv_w1a1_make_driver(): model = load_test_checkpoint_or_skip(build_dir + "/end2end_cnv_w1a1_synth.onnx") - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) model.save(build_dir + "/end2end_cnv_w1a1_pynq_driver.onnx") diff --git a/tests/end2end/test_end2end_cnv_w2a2.py b/tests/end2end/test_end2end_cnv_w2a2.py index f45b0a3eccd2f52ea144405865a1df06315952d9..2e34990007677ce1b8e0a9ae4a1781d4527ee040 100644 --- a/tests/end2end/test_end2end_cnv_w2a2.py +++ b/tests/end2end/test_end2end_cnv_w2a2.py @@ -320,7 +320,7 @@ def test_end2end_cnv_w2a2_synth_pynq_project(): def test_end2end_cnv_w2a2_make_driver(): model = load_test_checkpoint_or_skip(build_dir + "/end2end_cnv_w2a2_synth.onnx") - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) model.save(build_dir + "/end2end_cnv_w2a2_pynq_driver.onnx") diff --git a/tests/end2end/test_end2end_tfc_w1a1.py b/tests/end2end/test_end2end_tfc_w1a1.py index 31659df631e8ab489cb63dbef51200f313bca6b3..b827cbb1c31cc84de9fa5d4df4d6b23e02a02a5f 100644 --- a/tests/end2end/test_end2end_tfc_w1a1.py +++ b/tests/end2end/test_end2end_tfc_w1a1.py @@ -319,7 +319,7 @@ def test_end2end_tfc_w1a1_synth_pynq_project(): def test_end2end_tfc_w1a1_make_driver(): model = load_test_checkpoint_or_skip(build_dir + "/end2end_tfc_w1a1_synth.onnx") - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) model.save(build_dir + "/end2end_tfc_w1a1_pynq_driver.onnx") diff --git a/tests/end2end/test_end2end_tfc_w1a2.py b/tests/end2end/test_end2end_tfc_w1a2.py index d5579f625a20ae26e18bcdcba0cfaa3042a71b9a..755650e3d4da6947a93495fd5bbe0464cf485193 100644 --- a/tests/end2end/test_end2end_tfc_w1a2.py +++ b/tests/end2end/test_end2end_tfc_w1a2.py @@ -275,7 +275,7 @@ def test_end2end_tfc_w1a2_synth_pynq_project(): def test_end2end_tfc_w1a2_make_driver(): model = load_test_checkpoint_or_skip(build_dir + "/end2end_tfc_w1a2_synth.onnx") - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) model.save(build_dir + "/end2end_tfc_w1a2_pynq_driver.onnx") diff --git a/tests/end2end/test_end2end_tfc_w2a2.py b/tests/end2end/test_end2end_tfc_w2a2.py index 470119f3444987f0156caff81bf556bf4f2f2cbb..4b2dd9ef01850897d95ede1214f87e9aa5b79f63 100644 --- a/tests/end2end/test_end2end_tfc_w2a2.py +++ b/tests/end2end/test_end2end_tfc_w2a2.py @@ -275,7 +275,7 @@ def test_end2end_tfc_w2a2_synth_pynq_project(): def test_end2end_tfc_w2a2_make_driver(): model = load_test_checkpoint_or_skip(build_dir + "/end2end_tfc_w2a2_synth.onnx") - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) model.save(build_dir + "/end2end_tfc_w2a2_pynq_driver.onnx") diff --git a/tests/fpgadataflow/test_fpgadataflow_ipstitch.py b/tests/fpgadataflow/test_fpgadataflow_ipstitch.py index 40f29b0c7df025df09137f124d66ea33236e18e4..380e9313ae28637c81c0e0a28b0e07ce37d2d650 100644 --- a/tests/fpgadataflow/test_fpgadataflow_ipstitch.py +++ b/tests/fpgadataflow/test_fpgadataflow_ipstitch.py @@ -343,7 +343,7 @@ def test_fpgadataflow_ipstitch_pynq_driver(): model = load_test_checkpoint_or_skip( ip_stitch_model_dir + "/test_fpgadataflow_ipstitch_pynq_synth.onnx" ) - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) driver_dir = model.get_metadata_prop("pynq_driver_dir") assert driver_dir is not None assert os.path.isdir(driver_dir) @@ -460,7 +460,7 @@ def test_fpgadataflow_ipstitch_zynqbuild(board): ishape = model.get_tensor_shape(iname) x = gen_finn_dt_tensor(idt, ishape) # driver - model = model.transform(MakePYNQDriver()) + 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) diff --git a/tests/pynq/test_pynq_performance_fifo.py b/tests/pynq/test_pynq_performance_fifo.py index 1d4542473c4b58d3baa62f4123fd0f2f76954d95..1a438f79e09925cab57866c83a3cc9c8a1896351 100644 --- a/tests/pynq/test_pynq_performance_fifo.py +++ b/tests/pynq/test_pynq_performance_fifo.py @@ -81,7 +81,7 @@ def test_pynq_performance_fifo(): model = model.transform(CreateStitchedIP(fpga_part, clk_ns)) model = model.transform(MakePYNQProject(board)) model = model.transform(SynthPYNQProject()) - model = model.transform(MakePYNQDriver()) + model = model.transform(MakePYNQDriver(platform="zynq")) model = model.transform(DeployToPYNQ(ip, port, username, password, target_dir)) ret = dict()